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:
parent
d142f2da0e
commit
9dd6a0faf7
42
config/scripts/backup.sh
Normal file
42
config/scripts/backup.sh
Normal 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"
|
||||
103
docs/07_Infrastructure/Guides/Setup_Backup_Zora.md
Normal file
103
docs/07_Infrastructure/Guides/Setup_Backup_Zora.md
Normal 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.
|
||||
Loading…
Reference in New Issue
Block a user