docs: add backup setup guide and backup script for Zora

Introduced a detailed guide on configuring automated backups for the Zora server, covering scheduling, manual execution, and restoration processes. Added `backup.sh` script to streamline database and configuration backups with retention and rotation.
This commit is contained in:
Stefan Mogeritsch 2026-03-05 13:11:44 +01:00
parent d142f2da0e
commit 9dd6a0faf7
2 changed files with 145 additions and 0 deletions

42
config/scripts/backup.sh Normal file
View File

@ -0,0 +1,42 @@
#!/bin/bash
# ==========================================
# Meldestelle Backup Script
# Sichert Datenbanken und Konfigurationen
# ==========================================
# Konfiguration
BACKUP_DIR="/home/grandmo/backups/meldestelle"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
RETENTION_DAYS=7
PROJECT_NAME="meldestelle"
# Container Namen (müssen mit docker-compose übereinstimmen)
DB_CONTAINER="${PROJECT_NAME}-postgres"
DB_USER="meldestelle" # Oder aus .env lesen
# Verzeichnisse erstellen
mkdir -p "$BACKUP_DIR"
echo "🚀 Starte Backup: $DATE"
# 1. PostgreSQL Dump
echo " -> Erstelle Datenbank-Dump..."
if docker exec "$DB_CONTAINER" pg_dumpall -U "$DB_USER" > "$BACKUP_DIR/db_dump_$DATE.sql"; then
echo " ✅ DB Dump erfolgreich."
gzip "$BACKUP_DIR/db_dump_$DATE.sql"
else
echo " ❌ FEHLER beim DB Dump!"
# Optional: Mail senden oder Exit Code setzen
fi
# 2. Konfigurations-Dateien sichern (.env ist kritisch!)
echo " -> Sichere Konfigurationen..."
tar -czf "$BACKUP_DIR/config_$DATE.tar.gz" .env docker-compose.yaml dc-*.yaml config/
# 3. Alte Backups löschen (Rotation)
echo " -> Lösche Backups älter als $RETENTION_DAYS Tage..."
find "$BACKUP_DIR" -name "db_dump_*.sql.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "config_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "✅ Backup abgeschlossen: $BACKUP_DIR"
ls -lh "$BACKUP_DIR" | grep "$DATE"

View File

@ -0,0 +1,103 @@
---
type: Guide
status: ACTIVE
owner: DevOps Engineer
last_update: 2026-03-05
tags: [backup, postgres, zora, cron]
---
# 🛡️ Guide: Automatisierte Backups auf Zora
Dieser Guide beschreibt, wie du regelmäßige Backups der Meldestelle-Datenbank und Konfigurationen auf Zora einrichtest.
## 📋 Voraussetzungen
* SSH-Zugriff auf Zora (`ssh user@10.0.0.xx`).
* Docker-Container `meldestelle-postgres` läuft.
* Das Skript `config/scripts/backup.sh` liegt im Repo.
---
## 🛠️ Schritt-für-Schritt Anleitung
### 1. Backup-Skript vorbereiten
Das Skript liegt bereits im Repo unter `config/scripts/backup.sh`.
Du musst es auf Zora ausführbar machen und ggf. anpassen.
1. Verbinde dich mit Zora:
```bash
ssh user@zora-ip
cd ~/meldestelle
```
2. Mache das Skript ausführbar:
```bash
chmod +x config/scripts/backup.sh
```
3. **WICHTIG:** Prüfe die Variablen im Skript (`nano config/scripts/backup.sh`):
* `BACKUP_DIR`: Wohin sollen die Backups? (Standard: `/home/grandmo/backups/meldestelle`)
* `DB_CONTAINER`: Name des Postgres-Containers (Standard: `meldestelle-postgres`).
* `DB_USER`: Datenbank-User (Standard: `meldestelle`).
### 2. Cronjob einrichten (Automatische Ausführung)
Wir wollen das Backup jede Nacht um 03:00 Uhr laufen lassen.
1. Öffne die Crontab des Users:
```bash
crontab -e
```
2. Füge folgende Zeile am Ende hinzu:
```cron
# Meldestelle Backup: Täglich um 03:00 Uhr
0 3 * * * /home/grandmo/meldestelle/config/scripts/backup.sh >> /home/grandmo/meldestelle/logs/backup.log 2>&1
```
3. Speichern und schließen (`Ctrl+O`, `Enter`, `Ctrl+X`).
### 3. Testen
Führe das Skript einmal manuell aus, um sicherzustellen, dass alles klappt:
```bash
./config/scripts/backup.sh
```
* Prüfe den Output: "✅ Backup abgeschlossen".
* Prüfe das Backup-Verzeichnis: `ls -lh /home/grandmo/backups/meldestelle`.
---
## 🔄 Wiederherstellung (Restore)
Falls der Ernstfall eintritt (Datenbank korrupt oder gelöscht):
1. Stoppe die App-Container (aber lasse die DB laufen):
```bash
docker compose stop api-gateway ping-service keycloak
```
2. Entpacke das Backup:
```bash
gunzip /home/grandmo/backups/meldestelle/db_dump_YYYY-MM-DD.sql.gz
```
3. Spiele den Dump ein:
```bash
cat db_dump_YYYY-MM-DD.sql | docker exec -i meldestelle-postgres psql -U meldestelle
```
4. Starte die App wieder:
```bash
docker compose up -d
```
---
## 💡 Tipps
* **Offsite-Backup:** Kopiere die Backups regelmäßig auf einen externen Speicher (z.B. NAS oder Cloud), falls die Festplatte von Zora ausfällt. `rsync` ist dein Freund!
* **Monitoring:** Prüfe regelmäßig die Log-Datei `logs/backup.log`, ob Fehler auftreten.