Dein Sicherheitsnetz für Daten
Stell dir vor: Dein Server stürzt ab, das Dateisystem ist korrupt und deine lokale PostgreSQL-Datenbank mit all den mühsam eingepflegten Testdaten ist weg. Ein Albtraum für jeden Entwickler.
Ein docker volume ist kein Backup! Heute bauen wir uns eine automatisierte Lösung, die deine Daten regelmäßig in Sicherheit bringt.
Vorbereitung: Dein Backup-Projekt
Wir starten in einem isolierten Verzeichnis:
mkdir postgres-safe-setup && cd postgres-safe-setup
mkdir backups scripts
Schritt 1: Die Infrastruktur (docker-compose.yml)
Wir nutzen ein Standard-Postgres Image und binden unser Backup-Script ein.
postgres-safe-setup/docker-compose.yml:
version: '3.8'
services:
db:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_USER: devuser
POSTGRES_PASSWORD: devpassword
POSTGRES_DB: devdb
volumes:
- postgres_data:/var/lib/postgresql/data
- ./scripts:/scripts
- ./backups:/backups
volumes:
postgres_data:
Schritt 2: Das magische Backup-Script
Wir nutzen pg_dump, das Standard-Tool von Postgres, um einen vollständigen SQL-Dump zu erzeugen.
postgres-safe-setup/scripts/backup.sh:
#!/bin/sh
# Zeitstempel für den Dateinamen
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
BACKUP_FILE="/backups/backup_${TIMESTAMP}.sql.gz"
echo "Starte Backup: ${BACKUP_FILE}..."
# Ausführung im Container
pg_dump -U devuser devdb | gzip > "${BACKUP_FILE}"
echo "Backup erfolgreich erstellt!"
# Optional: Alte Backups löschen (älter als 7 Tage)
find /backups -name "*.sql.gz" -mtime +7 -delete
Vergiss nicht, das Script ausführbar zu machen:
chmod +x scripts/backup.sh
Schritt 3: Den Backup-Vorgang testen
Starte deine Datenbank:
docker compose up -d
Führe nun das Backup manuell aus dem Host-System heraus im laufenden Container aus:
docker compose exec db /scripts/backup.sh
⚠️ 📸 SCREENSHOT ANFRAGE: Hier einen Screenshot vom Verzeichnis
backups/einfügen, in dem die neu erstellte.sql.gzDatei zu sehen ist.
Wie automatisiere ich das?
Auf einem echten Server würdest du nun einen Cron-Job auf dem Host-System anlegen, der diesen Befehl jede Nacht ausführt:
# Öffne crontab
crontab -e
# Füge diese Zeile hinzu (täglich um 03:00 Uhr morgens)
0 3 * * * cd /pfad/zu/deinem/projekt && /usr/bin/docker compose exec -T db /scripts/backup.sh
Fazit
Ein automatisiertes Backup-System ist die Lebensversicherung deiner Anwendung. Mit nur wenigen Zeilen Scripting und Docker Power hast du eine Lösung geschaffen, die dich vor dem Super-GAU bewahrt.
Cheatsheet für den Ernstfall (Wiederherstellung)
Wenn du ein Backup wieder einspielen musst:
# 1. Dekomprimieren
gunzip backups/dein_backup.sql.gz
# 2. Importieren
docker compose exec -T db psql -U devuser devdb < backups/dein_backup.sql
Login