Selbst hosten ist nur so gut wie das letzte Backup, das man auch wirklich zurückspielen konnte. Dieser Teil ist unspektakulär und trotzdem der wichtigste.
Die 3-2-1-Regel
- 3 Kopien der Daten (das Original und zwei Sicherungen),
- auf 2 verschiedenen Datenträgern,
- 1 davon an einem anderen Ort, z. B. bei einem zweiten Vorstandsmitglied oder verschlüsselt in der Cloud.
Ebene 1: Proxmox sichert jeden Container
Weil jeder Dienst in seinem eigenen Container läuft, lässt sich auch jeder einzeln zurückspielen. Unter Rechenzentrum → Backup → Hinzufügen einen Job anlegen:
| Speicher | das Datenlaufwerk oder eine USB-Platte, nicht die System-SSD |
| Zeitplan | täglich, z. B. 03:00 |
| Auswahl | alle Container außer der Vorlage 9000 |
| Modus | Snapshot (die Dienste laufen während der Sicherung weiter) |
| Aufbewahrung | z. B. 7 tägliche, 4 wöchentliche, 6 monatliche |
| Benachrichtigung | E-Mail bei Fehlern |
Mount Points mit großen Datenmengen (Fotos, Scans) werden nur mitgesichert, wenn bei ihnen „Backup“ angehakt ist. Das bewusst entscheiden. Wer mehr will, setzt einen Proxmox Backup Server auf einem zweiten Gerät auf: Er speichert nur Änderungen, verschlüsselt und prüft die Sicherungen selbstständig.
Ebene 2: Anwendungen exportieren ihre Daten
Ein Container-Backup ist bequem, aber nur mit Proxmox lesbar. Zusätzlich exportiere ich die Inhalte nachts in offene Formate, jeweils im Container selbst:
# Admidio, WordPress und Nextcloud (MariaDB im Container), per Cron als root
0 1 * * * mariadb-dump --all-databases | gzip > /srv/backup/db-$(date +\%F).sql.gz
# Paperless: alle Dokumente samt Metadaten
0 2 * * * cd /opt/paperless && docker compose exec -T webserver document_exporter ../export
Mit Ansible verteilt man solche Cron-Jobs an alle betroffenen Container auf einmal, mit dem Modul ansible.builtin.cron.
Ebene 3: eine Kopie außer Haus
Mit rclone lassen sich die Backup-Dateien verschlüsselt zu einem Speicheranbieter in Deutschland hochladen. Alternativ zwei USB-Platten im Wechsel: eine hängt am Server, die andere liegt bei einem Vorstandsmitglied.
Ein Backup, das nie zurückgespielt wurde, ist nur eine Hoffnung. Einmal im Quartal einen Container aus dem Backup unter neuer ID wiederherstellen, starten, kurz prüfen, wieder löschen. Das dauert zehn Minuten und schafft echte Sicherheit.
Updates
| Was | Wie | Wann |
|---|---|---|
| Proxmox | (Knoten) → Updates → Aktualisieren, dann Upgrade | monatlich |
| Alle Container | Sicherheitsupdates automatisch, alles andere mit ansible-playbook update.yml | monatlich |
| Paperless, Keycloak, Vaultwarden, Uptime Kuma | docker compose pull && docker compose up -d | monatlich |
| Nextcloud | eingebauter Updater, nie mehrere Hauptversionen auf einmal überspringen | sobald verfügbar |
| n8n | npm install -g n8n@latest, dann Dienst neu starten | monatlich |
| Admidio, ResourceSpace, WordPress | über die eigene Update-Funktion der Anwendung | sobald verfügbar |
Vor jedem größeren Update einen Snapshot der betroffenen Container anlegen. Das geht auf einen Schlag in der Proxmox-Shell:
for id in 100 101 102 110 111 112 113 114 115 116; do
pct snapshot $id vor-update-$(date +%Y%m%d)
done
Läuft danach etwas nicht, ist der einzelne Container mit pct rollback <ID> vor-update-… in Sekunden zurück. Bei großen Versionssprüngen (z. B. eine neue Hauptversion von PostgreSQL oder Proxmox) immer erst die Upgrade-Hinweise des Herstellers lesen.
Überwachung
Ob die nächtlichen Backups wirklich gelaufen sind, meldet Uptime Kuma mit einem Push-Monitor: Jedes Backup-Skript ruft am Ende eine URL auf, bleibt der Aufruf aus, gibt es Alarm.