perf/ops: Auth-Latenz, Zähl-View, DB-Backup, Schreib-Limit, Asset-Cache
- 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>
This commit is contained in:
Executable
+30
@@ -0,0 +1,30 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user