Zurück zur Übersicht
Selfhosting Artikel 07 von 08

Backups und Wiederherstellung

Was du wirklich sichern musst, wie rsync und Cron-Jobs die Arbeit automatisieren und warum eine externe Kopie entscheidend ist.

Hier planst du Backups so, dass Docker-Daten, Konfigurationen und Dienste nach einem Ausfall wiederherstellbar sind. Wer selbst hostet, ist selbst verantwortlich. Festplatten gehen kaputt, Konfigurationsfehler überschreiben Daten, Container werden versehentlich gelöscht. Ohne Backup bedeutet das Datenverlust.

Die gute Nachricht: für Selfhosting braucht man keine komplexe Backup-Software. Ein paar Shell-Befehle und ein automatisierter Zeitplan reichen völlig aus.

Was gesichert werden muss

Bei einem Docker-basierten Setup gibt es drei Kategorien von Daten die gesichert werden müssen:

Docker Volumes Datenbanken, Anwendungsdaten, hochgeladene Dateien. Das sind die wertvollen Daten die bei Verlust nicht wiederherstellbar sind. Liegen unter /var/lib/docker/volumes/.
Konfigurationsdateien Alle compose.yml Dateien, Nginx-Konfigurationen, Umgebungsvariablen. Damit lässt sich ein System nach einem Totalausfall vollständig neu aufbauen.
Bind Mounts Wenn du eigene Ordner in Container eingebunden hast, müssen diese ebenfalls gesichert werden. Docker Images selbst müssen nicht gesichert werden, sie lassen sich jederzeit neu herunterladen.

rsync für lokale Backups

rsync ist das Standardwerkzeug für Datei-Synchronisation auf Linux. Es kopiert nur veränderte Dateien, ist dadurch schnell und effizient. Auf Ubuntu und Linux Mint ist es bereits vorinstalliert.

Ein einfaches Backup-Skript:

#!/bin/bash DATUM=$(date +%Y-%m-%d) QUELLE="/home/norbert/docker" ZIEL="/media/backup/docker-$DATUM" rsync -avz --delete "$QUELLE/" "$ZIEL/" echo "Backup abgeschlossen: $DATUM"

Der Parameter -a erhält Berechtigungen und Zeitstempel, -v zeigt was kopiert wird, -z komprimiert die Übertragung. Mit --delete werden im Ziel gelöschte Dateien auch gelöscht.

Automatisierung mit Cron

Cron ist der Aufgabenplaner von Linux. Mit crontab -e öffnest du die persönliche Cron-Konfiguration. Jede Zeile ist ein geplanter Job:

# Täglich um 3:00 Uhr Backup ausführen 0 3 * * * /home/norbert/scripts/backup.sh >> /var/log/backup.log 2>&1

Das Format ist: Minute Stunde Tag Monat Wochentag Befehl. Die Ausgabe wird in eine Log-Datei geschrieben damit du nachsehen kannst ob das Backup erfolgreich war.

Alte Backups aufräumen um Speicher zu sparen:

# Backups die älter als 7 Tage sind löschen find /media/backup -name "docker-*" -mtime +7 -exec rm -rf {} \;

Docker Volumes sichern

Named Volumes liegen unter /var/lib/docker/volumes/ und brauchen sudo für den Zugriff. Eine saubere Methode ist das Exportieren über einen temporären Container:

docker run --rm \ -v n8n_data:/data \ -v /media/backup:/backup \ alpine tar czf /backup/n8n_data_$(date +%Y-%m-%d).tar.gz /data

Dieser Befehl startet einen minimalen Alpine-Container, bindet das Volume und das Backup-Ziel ein und erstellt ein komprimiertes Archiv. Der Container wird danach automatisch gelöscht.

Die 3-2-1 Regel

Ein gutes Backup folgt der 3-2-1-Regel: 3 Kopien deiner Daten, auf 2 verschiedenen Medientypen, davon 1 an einem anderen Ort. Eine externe Festplatte im selben Raum schützt nicht vor Einbruch oder Feuer. Ich sichere kritische Konfigurationen zusätzlich auf meinem Nextcloud-Server, der auf einem anderen physischen System läuft.

Der nächste sinnvolle Schritt

Wenn du diesen Teil verstanden hast, passen diese Seiten als Nächstes:

Häufige Fragen

Was muss ich beim Selfhosting sichern?

Compose-Dateien, .env-Dateien, Datenordner, Datenbanken, Uploads, Zertifikate und wichtige Konfigurationen.

Ist ein Backup ohne Restore-Test genug?

Nein. Ein Backup ist erst belastbar, wenn du geprüft hast, ob eine Wiederherstellung funktioniert.

Wie oft sollte ich sichern?

Das hängt vom Datenverlust ab, den du akzeptieren kannst. Häufig geänderte Daten brauchen häufigere Backups.