8404165f5c
- auth: Supabase-JWT lokal verifizieren (hono/jwt, HS256) statt GoTrue- Roundtrip pro Request; JWT_SECRET in cms-env, Remote-Fallback wenn ungesetzt - dialog: comment_stats-View (group by thread) ersetzt Full-Table-Scan + JS-Aggregation bei jedem Forum-Aufruf - ops: scripts/backup-db.sh (pg_dump, rotiert) + täglicher Cron im Proxmox- Script — Dialog-Daten liegen nur in Postgres, nicht in Git - security: Rate-Limit auf Schreib-Endpunkte (/api non-GET, 60/min je Nutzer) - perf: Cache-Control (1 Woche) auf statische Assets, HTML bleibt frisch Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
31 lines
1.1 KiB
Bash
Executable File
31 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# OPENBUREAU — Backup der Postgres-DB.
|
|
#
|
|
# WICHTIG: Foren, Threads und Wortmeldungen (Dialog) leben NUR in Postgres —
|
|
# anders als content/*.md sind sie NICHT in Git. Ohne Backup sind sie beim
|
|
# Verlust des Volumes weg. Dieses Skript dumpt die ganze DB komprimiert weg.
|
|
#
|
|
# Auf dem Host/LXC im cms/-Verzeichnis ausführen (oder per Cron, siehe README):
|
|
# bash scripts/backup-db.sh
|
|
#
|
|
# Wiederherstellen:
|
|
# gunzip -c backups/openbureau-<TS>.sql.gz \
|
|
# | docker compose exec -T db psql -U supabase_admin -d postgres
|
|
set -euo pipefail
|
|
|
|
# Ins cms/-Verzeichnis (eine Ebene über scripts/).
|
|
cd "$(dirname "$0")/.."
|
|
|
|
DIR="${BACKUP_DIR:-./backups}"
|
|
KEEP="${BACKUP_KEEP:-14}" # wie viele Dumps behalten
|
|
mkdir -p "$DIR"
|
|
|
|
TS="$(date +%Y%m%d-%H%M%S)"
|
|
OUT="$DIR/openbureau-$TS.sql.gz"
|
|
|
|
docker compose exec -T db pg_dump -U supabase_admin -d postgres | gzip > "$OUT"
|
|
echo "✓ Backup: $OUT ($(du -h "$OUT" | cut -f1))"
|
|
|
|
# Rotation: nur die letzten $KEEP Dumps behalten.
|
|
ls -1t "$DIR"/openbureau-*.sql.gz 2>/dev/null | tail -n +$((KEEP + 1)) | xargs -r rm -f
|