Zum Inhalt springen

Backup

TeamVis hat zwei kritische Daten-Bereiche, die gesichert werden müssen:

  1. Postgres-DB (alle Mitarbeiter, Stellen, Audit-Log, Bindings)
  2. Storage-Bucket employee-photos (alle Fotos)

DB-Backup (Supabase Cloud)

Supabase macht automatische tägliche Backups mit Point-in-Time-Recovery (PITR) auf höheren Plänen. Im Free-Plan sind 7 Tage History inklusive, ab Pro mehr.

Zusätzlich empfohlen: regelmäßiger eigener Dump.

Terminal-Fenster
pg_dump "postgres://service_role:KEY@db.<project>.supabase.co:5432/postgres" \
--no-owner --no-acl \
--format=custom \
> teamvis-$(date +%Y%m%d).dump

Cron-Beispiel für täglichen Dump auf der App-VM:

Terminal-Fenster
0 3 * * * pg_dump "$DATABASE_URL" --format=custom > /backup/teamvis-$(date +\%Y\%m\%d).dump

Storage-Backup

Terminal-Fenster
# einmaliger vollständiger Sync mit Supabase-CLI
npx supabase storage cp "ss:///employee-photos" /backup/photos --recursive

Bei Self-Hosted Supabase ist der Storage einfach ein Verzeichnis im Container — direkt mit rsync oder ZFS-Snapshots sichern.

Audit-Log-Sonderbehandlung

Das Audit-Log ist GoBD-relevant: 10 Jahre Aufbewahrungspflicht. Empfehlung: monatlich CSV-Export über Verwaltung → Protokoll → Export und ins Langzeit-Archiv (nicht-überschreibbares Storage).

Restore-Test

Mindestens einmal im Jahr einen Restore-Test machen:

  1. Dump in Test-DB einspielen
  2. Container gegen Test-DB starten
  3. Login + ein paar Karten prüfen

Backup, das nie restored wurde, ist kein Backup.

Was NICHT gesichert wird

  • .env — Secrets, gehören in einen Passwort-Safe
  • Caddy-Zertifikate — werden bei Bedarf neu von Let’s Encrypt geholt
  • Container-Image — wird bei Update neu gebaut