dfed00b263a3e1b8b75c7c19e40adc26b3bbfdca
BorgBackup Pull-Backup: Raspberry Pi ← Docker-Host
Konzept
Docker-Host (Quelle) Raspberry Pi (Backup-Ziel)
───────────────────── ──────────────────────────
borgbackup-User (SSH) ←───── sshfs mount (read-only)
/var/lib/docker/volumes borg create → lokales Repo
/etc, /opt, /home Systemd-Timer (02:30 Uhr)
Der Pi zieht die Daten – der Docker-Host hat keinen Zugriff auf das Borg-Repository. Ransomware oder Kompromittierung des Docker-Hosts kann die Backups nicht zerstören.
Schritt-für-Schritt Einrichtung
Schritt 1: Docker-Host vorbereiten
# Als root auf dem Docker-Host:
bash setup-docker-host.sh
# Alternativ mit direkter Key-Übergabe:
bash setup-docker-host.sh "ssh-ed25519 AAAA... pi@raspberry"
Das Skript legt den User borgbackup an und trägt den SSH-Key
mit Einschränkungen ein (kein Port-Forwarding, kein PTY).
Schritt 2: Pi einrichten
# Als root auf dem Pi:
bash setup-pi.sh 192.168.1.100 # IP des Docker-Hosts
# Das Skript:
# - Installiert borgbackup, sshfs, fuse
# - Erzeugt SSH-Key /home/pi/.ssh/borg_pull
# - Initialisiert das Borg-Repository
# - Installiert das Backup-Skript
Schritt 3: Backup-Skript anpassen
nano /usr/local/bin/borg-pull-backup.sh
Wichtige Variablen:
| Variable | Bedeutung |
|---|---|
REMOTE_HOST |
IP/Hostname des Docker-Hosts |
REMOTE_USER |
SSH-User (borgbackup) |
SSH_KEY |
Pfad zum SSH-Key auf dem Pi |
BORG_REPO |
Lokaler Pfad zum Repository |
BORG_PASSPHRASE |
Verschlüsselungspasswort |
BACKUP_PATHS |
Welche Pfade gesichert werden |
KEEP_DAILY/WEEKLY/MONTHLY |
Aufbewahrungsrichtlinie |
Schritt 4: Systemd-Timer aktivieren
# Dateien kopieren
cp borg-pull-backup.service /etc/systemd/system/
cp borg-pull-backup.timer /etc/systemd/system/
# Aktivieren
systemctl daemon-reload
systemctl enable --now borg-pull-backup.timer
# Status prüfen
systemctl status borg-pull-backup.timer
systemctl list-timers borg-pull-backup.timer
Schritt 5: Testlauf
# Backup manuell starten
/usr/local/bin/borg-pull-backup.sh
# Oder via Systemd
systemctl start borg-pull-backup.service
# Log verfolgen
journalctl -fu borg-pull-backup.service
tail -f /var/log/borg-pull-backup.log
Wiederherstellung
export BORG_PASSPHRASE="dein-passwort"
REPO="/media/backup/borg/docker-host"
# Archive auflisten
borg list "$REPO"
# Einzelne Datei / Verzeichnis wiederherstellen
cd /tmp/restore
borg extract "$REPO::docker-host-2024-01-15T02-30-00" \
var/lib/docker/volumes/mein-volume
# Komplettes Archiv wiederherstellen
borg extract --list "$REPO::docker-host-2024-01-15T02-30-00"
# Archiv-Inhalt durchsuchen ohne zu extrahieren
borg list "$REPO::docker-host-2024-01-15T02-30-00" | grep "volumes"
Wichtige Hinweise
Repokey sichern!
# Einmalig nach der Initialisierung:
borg key export /media/backup/borg/docker-host \
/media/backup/borg-key-docker-host.txt
# Diesen Key getrennt aufbewahren (USB-Stick, Passwortmanager)
# Ohne Key + Passwort sind die Backups WERTLOS
Docker Volumes konsistent sichern
Für Datenbanken entweder:
Option A: Container kurz stoppen
# Im Backup-Skript vor borg create:
ssh borgbackup@docker-host \
"docker compose -f /opt/myapp/docker-compose.yml stop"
# ... backup ...
ssh borgbackup@docker-host \
"docker compose -f /opt/myapp/docker-compose.yml start"
Option B: Dump vorher erstellen
# PostgreSQL
ssh borgbackup@docker-host \
"docker exec postgres pg_dumpall -U postgres > /opt/backup/pg_dump.sql"
# MySQL/MariaDB
ssh borgbackup@docker-host \
"docker exec mysql mysqldump -u root -p... --all-databases > /opt/backup/mysql_dump.sql"
Mehrere Docker-Hosts
Das Skript ist pro Host ausgelegt. Für mehrere Hosts:
# Kopie für jeden Host
cp /usr/local/bin/borg-pull-backup.sh \
/usr/local/bin/borg-pull-backup-host2.sh
# Separate Timer/Services anlegen
cp /etc/systemd/system/borg-pull-backup.{service,timer} \
/etc/systemd/system/borg-pull-backup-host2.{service,timer}
Troubleshooting
| Problem | Lösung |
|---|---|
sshfs: connection failed |
SSH-Key prüfen, User borgbackup vorhanden? |
Permission denied auf /var/lib/docker |
borgbackup-User braucht Lesezugriff |
| Mount hängt nach Fehler | fusermount -u /mnt/borg-pull/docker-host |
| Backup sehr langsam | Compression auf zstd ändern statt lz4 |
Repository already locked |
borg break-lock /media/backup/borg/docker-host |
Description
Languages
Shell
100%