Schliesst das Restore-Skills-Audit 2026-06-02/03 ab: - RESTORE_HANDBOOK.md auf Stand 2026-06-03: alle 6 verifizierten Tests (Vaultwarden, Gitea, Paperless, Immich, Authelia, Komodo-Bootstrap) dokumentiert, Frequenz-Tabelle aktualisiert, Betriebsmodus auf V1+ (mit ntfy), Schnellstart um Immich/Authelia/Komodo ergaenzt, Report-Aufbewahrungsregel dokumentiert, Ausbaustufen priorisiert. - RESTORE_MATRIX.md: neue Sektion "Restore-Test-Reifegrad" mit Uebersichtstabelle (pro Dienst: Tier, letzter Test, Typ, naechster Lauf) und priorisierter Kandidatenliste fuer fehlende Tests. - Gitea-Restore: SSH-Check im Report korrekt als "TCP connect only" benannt statt "SSH port open" (war Audit-Finding M3). - AUDIT_2026-05-25_TODO.md: Restore-Audit-Backlog ergaenzt mit den verbleibenden 8 offenen Punkten (Nextcloud, Shared PG18, Komodo-Mongo, Mailarchiver, Mealie, Traefik, Negativ-Test, E2E-DR-Drill). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6.5 KiB
Restore Handbook - KalliLab CORE
Stand: 2026-06-03
Dieses Handbuch ist die praktische Betriebsanleitung fuer Restore-Checks und Restore-Lab in KalliLab CORE.
Es ergaenzt:
docs/RESTORE_MATRIX.mddocs/DISASTER_RECOVERY.mdops/restore-tests/*
1. Ziel
Dieses Handbuch beantwortet vier Fragen:
- Was ist die Restore-Quelle?
- Wo wird getestet?
- Wie pruefen wir Erfolg?
- Wie machen wir das regelmaessig mit wenig Handarbeit?
2. Grundmuster
Alle validierten Restore-Tests folgen demselben Muster:
- Quelle bleibt das produktive Borg-Repo bei Hetzner
- Borg-Zugriff laeuft ueber den vorhandenen
borg-ui-Container - Passphrase kommt aus
/mnt/user/appdata/secrets/borg_repo_passphrase.txt - Testdaten landen unter
/mnt/user/backups/restore-lab/<dienst> - Reports landen unter
/mnt/user/backups/restore-reports - Testinstanzen laufen lokal ohne Traefik und ohne produktive Domain
- nach Erfolg werden Testcontainer und Testdaten wieder entfernt
3. Bereits praktisch verifiziert
Vaultwarden
- Erstlauf: 2026-05-07
- Nachweis: Borg-Restore, Testcontainer, Login-Seite erreichbar
Gitea
- Erstlauf: 2026-05-07
- Nachweis: Borg-Restore, Web-UI, SSH-TCP-Port
Paperless
- Erstlauf: 2026-05-07, Folgelauf: 2026-05-31
- Nachweis: Borg-Datei-Restore, Dump-Import in Test-Postgres, Login-Seite, Doc-Count
Immich
- Erstlauf: 2026-05-27
- Nachweis: DB-Dump-Restore in VectorChord-Test-Postgres, HTTP-Smoke, Asset-Count
- Hinweis: Foto-Dateien-Restore ist bewusst nicht Teil des Smokes
Authelia
- Erstlauf: 2026-06-03
- Nachweis: Config-Borg-Restore,
authelia config validate, HTTP-Health/api/health - Hinweis: Daten-Restore des produktiven Dumps ist bewusst nicht Teil des Smokes (Storage-Encryption-Key-Kopplung)
Komodo Bootstrap
- Erstlauf: 2026-05-30
- Nachweis: Compose-Validierung, Mongo healthy, Core HTTP, Periphery running
- Hinweis: Daten-Restore aus
komodo-mongo.archive.gzist noch nicht getestet
4. Verzeichnisstruktur
Produktiv
/mnt/user/appdata/mnt/user/services/mnt/user/documents/mnt/user/backups/borg/dumps/latest
Restore-Lab
/mnt/user/backups/restore-lab/vaultwarden/mnt/user/backups/restore-lab/gitea/mnt/user/backups/restore-lab/paperless/mnt/user/backups/restore-lab/immich/mnt/user/backups/restore-lab/authelia/mnt/user/backups/restore-lab/komodo/mnt/user/backups/restore-lab/_failed(Diagnose-Material bei Fehllaeufen)
Reports
/mnt/user/backups/restore-reports
5. Restore-Frequenz
- jeden Montag, 06:30: Frische-Check fuer Dumps und Reports
-
- Samstag im Monat, 07:00: Vaultwarden
-
- Samstag im Monat, 07:15: Gitea
-
- Samstag in ungeraden Monaten, 08:00: Paperless
-
- Sonntag in Feb/Mai/Aug/Nov, 08:30: Immich
-
- Samstag in geraden Monaten, 07:30: Authelia
-
- Kalendertag im Monat, 09:00: Zufaelliger Restore aus Pool
Vollstaendiger Kalender mit Cron-Ausdruecken und Shell-Guards steht in ops/restore-tests/schedule.md.
6. Betriebsmodus
Stand 2026-06-03 ist der Betrieb auf V1+ (V1 mit ntfy):
- validierte Bash-Host-Jobs fuer Vaultwarden, Gitea, Paperless, Immich, Authelia, Komodo-Bootstrap
- Host-Job-Definitionen und Cron-Vorlagen liegen im Repo (
ops/restore-tests/unraid-user-scripts.md) ntfy-Wrapper sendet Erfolg anhomelab-info, Fehler anhomelab-alerts- Frische-Check prueft zusaetzlich pg-Custom-Format-Dumps per
pg_restore --listHeader-Validierung - bei Fehlschlag wird das Restore-Lab nach
_failed/verschoben statt geloescht
Noch geplant fuer V2:
- Hermes-Zusammenfassung ueber vorhandene Reports
- Sammelreports und Report-Rotation
- weitere Dienste (Nextcloud, Mailarchiver, Mealie)
7. User Script Jobs auf Unraid
Die Vorlagen stehen in:
ops/restore-tests/unraid-user-scripts.md
Host-Repo-Pfad:
/mnt/user/services/homelab-infra
Jobs:
restore-freshness-weeklyrestore-vaultwarden-monthlyrestore-gitea-monthlyrestore-paperless-bimonthlyrestore-immich-quarterlyrestore-authelia-bimonthlymonthly-random-restore
8. Erfolgskriterien
Ein Restore-Test gilt nur dann als erfolgreich, wenn:
- Restore-Quelle lesbar war
- Daten im Restore-Lab ankamen
- Testcontainer startete
- Smoke-Test erfolgreich war
- Report geschrieben wurde
Nur Container laeuft reicht nicht.
9. Sicherheitsregeln
- keine produktiven Pfade beschreiben
- keine produktiven Container fuer Restore-Tests verwenden
- keine produktiven Domains fuer Testinstanzen verwenden
- keine Secrets im Repo
- keine Restore-Automatik fuer neue Dienste ohne bewusste Freigabe
10. Schnellstart
Frische-Check
Auf dem Unraid-Host:
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh freshness
Vaultwarden Restore-Check
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh vaultwarden
Gitea Restore-Check
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh gitea
Paperless Restore-Check
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh paperless
Immich Restore-Check
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh immich
Authelia Restore-Check
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh authelia
Komodo Bootstrap Trockenlauf
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-checks.sh komodo-bootstrap
Optional mit ntfy
bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh freshness homelab-info
11. Naechste Ausbaustufen
- Nextcloud-Restore-Test (mit
occ maintenance:mode-Choreographie) - Mailarchiver-Restore-Test
- Mealie-Restore-Test
- Komodo-Mongo-Daten-Restore (echtes
mongorestorestatt reinem Bootstrap) - Shared-PostgreSQL-18-Cluster-Restore-Drill (globals + per-DB-Dumps)
- Traefik-Restore-Test (mit
dynamic/und LE-State) - Hermes-Zusammenfassung ueber vorhandene Reports
- Report-Rotation (archivieren nach 12 Monaten)
- Negativ-Test: bewusst kaputten Dump in den Frische-Check einfuettern
12. Report-Aufbewahrung
Reports unter /mnt/user/backups/restore-reports werden dauerhaft aufbewahrt. Bei wachsender Anzahl (ca. 50-60 pro Jahr) empfiehlt sich eine jaehrliche Archivierung alter Reports in einen Unterordner _archive/YYYY/. Der Frische-Check warnt bei MAX_REPORT_AGE_DAYS=45, loescht aber bewusst nicht automatisch.