697c5781b7
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.
112 lines
3.2 KiB
Markdown
112 lines
3.2 KiB
Markdown
# 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)
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
cd /opt/kapteins-daagbok
|
|
./scripts/backup.sh
|
|
./scripts/backup.sh --reason manual --dry-run # Vorschau ohne Schreiben
|
|
```
|
|
|
|
### Staging (manueller Test)
|
|
|
|
```bash
|
|
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`](../../scripts/crontab.prod.example)
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
./scripts/restore-backup.sh --list
|
|
```
|
|
|
|
Vollständige Wiederherstellung (DB + `.env`, optional Git-Tag checkout):
|
|
|
|
```bash
|
|
./scripts/restore-backup.sh --restore /var/backups/kapteins-daagbok/kapteins-daagbok_YYYYMMDD-HHMMSS_vX.Y.Z.tar.gz
|
|
```
|
|
|
|
Nur Datenbank:
|
|
|
|
```bash
|
|
./scripts/restore-backup.sh --restore PATH --db-only
|
|
```
|
|
|
|
Nur `.env`:
|
|
|
|
```bash
|
|
./scripts/restore-backup.sh --restore PATH --env-only
|
|
```
|
|
|
|
Ohne Rückfragen (Notfall):
|
|
|
|
```bash
|
|
./scripts/restore-backup.sh --restore PATH --full --yes
|
|
```
|
|
|
|
## Vor Passwort-Rotation
|
|
|
|
Vor [`rotate-postgres-password.sh`](../../scripts/rotate-postgres-password.sh) ein Backup anlegen — siehe auch [postgres-password.md](postgres-password.md):
|
|
|
|
```bash
|
|
./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` |
|