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