← Zurück zur Übersicht Datenbank-Backups automatisiert: So sicherst du deine Docker-Postgres Instanz jede Nacht

Datenbank-Backups automatisiert: So sicherst du deine Docker-Postgres Instanz jede Nacht

[WERBUNG: CONTENT OBEN]

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.gz Datei 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
[WERBUNG: CONTENT UNTEN]