Erweitert die Backup- und Restore-Skripte um die Möglichkeit, Staging-Umgebungen zu unterstützen. Fügt die Option `-dest stage` hinzu, um spezifische Konfigurationen für Staging zu verwenden, einschließlich separater Docker-Compose-Dateien und Datenbankcontainer. Dokumentation aktualisiert, um manuelle Tests und Umgebungsvariablen für Staging zu reflektieren.
3.2 KiB
Server-Backup (Produktion)
Automatische und manuelle Sicherung von PostgreSQL, .env, docker-compose.yml und App-Code (Git-Archiv) auf der Prod-VM.
Staging: Kein automatisches Backup — Daten sind bewusst wegwerfbar. Deploy via update-remotes.sh -dest stage legt kein Backup an. Zum manuellen Testen auf Staging: -dest stage (oder Auto-Fallback, wenn nur daagbox-staging-db läuft).
Was wird gesichert?
| Inhalt | Beschreibung |
|---|---|
database.sql.gz |
pg_dump aus dem laufenden DB-Container |
.env |
Server-Secrets (Sessions, DB-Passwort, VAPID, …) |
docker-compose.yml |
Aktive Compose-Datei |
app.tar.gz |
git archive HEAD — Code-Snapshot |
manifest.json |
Timestamp, Git-Tag, SHA, Grund (cron / pre-deploy / manual) |
Backups liegen in /var/backups/kapteins-daagbok/ (mode 700, root-only). Es werden maximal 5 Archive aufbewahrt.
Einmalige Einrichtung (Prod-Server)
ssh root@10.0.0.25
mkdir -p /var/backups/kapteins-daagbok
chmod 700 /var/backups/kapteins-daagbok
cd /opt/kapteins-daagbok
git pull
chmod +x scripts/backup.sh scripts/restore-backup.sh
./scripts/backup.sh --reason manual
Manuell sichern
cd /opt/kapteins-daagbok
./scripts/backup.sh
./scripts/backup.sh --reason manual --dry-run # Vorschau ohne Schreiben
Staging (manueller Test)
cd /opt/kapteins-daagbok-staging
./scripts/backup.sh -dest stage --reason manual
# oder: Auto-Fallback, wenn nur daagbox-staging-db läuft
./scripts/backup.sh --reason manual
Crontab (unbeaufsichtigt)
Beispiel: scripts/crontab.prod.example
crontab -e
# Zeile einfügen:
0 3 * * * cd /opt/kapteins-daagbok && ./scripts/backup.sh --reason cron >> /var/log/kapteins-backup.log 2>&1
Pre-Deploy-Backup
Bei ./scripts/update-remotes.sh -dest prod wird vor dem Git-Sync auf dem Server automatisch ein Backup mit Tag v{VERSION}-predeploy erstellt. Schlägt das Backup fehl, wird das Deploy abgebrochen.
Staging-Deploys (-dest stage) erstellen kein Backup.
Wiederherstellen
Verfügbare Backups anzeigen:
./scripts/restore-backup.sh --list
Vollständige Wiederherstellung (DB + .env, optional Git-Tag checkout):
./scripts/restore-backup.sh --restore /var/backups/kapteins-daagbok/kapteins-daagbok_YYYYMMDD-HHMMSS_vX.Y.Z.tar.gz
Nur Datenbank:
./scripts/restore-backup.sh --restore PATH --db-only
Nur .env:
./scripts/restore-backup.sh --restore PATH --env-only
Ohne Rückfragen (Notfall):
./scripts/restore-backup.sh --restore PATH --full --yes
Vor Passwort-Rotation
Vor rotate-postgres-password.sh ein Backup anlegen — siehe auch postgres-password.md:
./scripts/backup.sh --reason manual
Umgebungsvariablen
| Variable | Prod (default) | Staging (-dest stage) |
|---|---|---|
COMPOSE_FILE |
docker-compose.yml |
docker-compose.staging.yml |
DB_CONTAINER |
daagbox-prod-db |
daagbox-staging-db |
BACKUP_DIR |
/var/backups/kapteins-daagbok |
gleich |
RETENTION |
5 |
5 |