11 KiB
Disaster Recovery - KalliLab CORE
Dieses Dokument beschreibt den kontrollierten Wiederanlauf nach einem Totalausfall des Unraid-Hosts.
Es ist bewusst repo-genau fuer dieses Homelab geschrieben und ersetzt keine Backup-Dokumentation im engeren Sinn.
Verwandte Dokumente:
docs/ROLLBACK.md- Rueckweg bei Fehlern im laufenden GitOps-Betriebdocs/RESTORE_MATRIX.md- Restore-Quellen und Verifikationsregeln pro Dienstdocs/RESTORE_HANDBOOK.md- praktische Restore-Betriebsanleitungops/borg-ui/BACKUP_SCOPE.md- Zielbild des Borg-Scopes
1. Ziel und Geltungsbereich
Dieses Runbook behandelt primaer den Fall:
- Unraid-Host war ausgefallen oder musste neu aufgesetzt werden
- Array / Shares sind wieder verfuegbar
- Daten auf den Festplatten sind grundsaetzlich noch lesbar oder koennen aus Borg wiederhergestellt werden
Es behandelt nicht im Detail:
- den Rueckweg einzelner Fehl-Deployments im laufenden Betrieb
- eine spontane Live-Reparatur an einem einzelnen Service
- einen kompletten Datenverlust ohne verfuegbares Borg- oder Share-Material
2. Zwei verschiedene Ernstfaelle
Diese beiden Szenarien muessen sauber getrennt werden:
A. Host-/Systemausfall, aber Daten auf den Shares sind noch da
Das ist der wahrscheinlichere und einfachere Fall.
Dann muessen in vielen Bereichen keine Daten aus Borg extrahiert werden. Es reicht oft:
- Unraid sauber neu aufzusetzen
- Shares wieder einzubinden
- Repo / Secrets / Laufzeitpfade zu pruefen
- Stacks in der richtigen Reihenfolge wieder hochzufahren
B. Daten muessen wirklich aus Borg wiederhergestellt werden
Das ist der schwerere Fall.
Dann muessen gezielt die in docs/RESTORE_MATRIX.md beschriebenen Pfade, Dumps und Secrets aus Borg oder anderen Restore-Quellen zurueckgeholt werden.
Merksatz: Erst klaeren, ob wir nur den Host wiederbeleben oder echte Nutz-/App-Daten aus Backups zurueckholen muessen.
3. Voraussetzungen vor einem Ernstfall
Diese Punkte sollten vor einem echten Ausfall geklaert sein:
| Thema | Sollzustand |
|---|---|
| Repo-Zugang ausserhalb von Gitea | externer Mirror oder lokaler aktueller Clone vorhanden |
| Unraid USB-/Flash-Backup | eingerichtet und wiederherstellbar |
| Borg-Ziel | nicht nur lokal auf demselben Ausfallpfad |
| Borg-Passphrase | extern sicher hinterlegt |
| Secrets-Dateien | ueber Borg bzw. Restore-Quellen abgedeckt |
| Komodo Stack ENV-Werte | extern dokumentiert, z. B. Vaultwarden |
| Restore-Smoke-Tests | fuer mindestens 1-2 kritische Dienste nachgewiesen |
Wichtig: Dieses Dokument ist nur so gut wie die Vorbereitung ausserhalb des Repos.
4. Phase 0 - Repo-Zugang sicherstellen
Nach einem Totalausfall kann es sein, dass gitea selbst noch nicht laeuft.
Deshalb gilt:
- Wenn moeglich, Repo ueber einen externen Mirror oder einen lokalen aktuellen Clone holen.
- Nur wenn
giteabereits wieder verfuegbar ist, direkt ausgit.kaleschke.infoklonen.
Empfohlene Wege:
- externer Push-Mirror
- lokaler Bare-Clone auf dem PC
- normaler lokaler Arbeits-Clone auf dem PC
Wenn kein externer Repo-Zugang besteht, ist services/gitea/data selbst ein kritischer Restore-Pfad.
5. Phase 1 - Unraid und Shares wiederherstellen
5.1 Unraid-Grundzustand
- Unraid USB/Flash wiederherstellen oder neu aufsetzen
- Lizenz / Device-Zuordnung sauber herstellen
- Array wieder zuweisen und starten
- Grundlegende Shares pruefen
5.2 Erwartete Shares / Pfade
Mindestens diese Pfade muessen wieder verfuegbar sein:
/mnt/user/appdata/mnt/user/backups/mnt/user/services/mnt/user/documents/mnt/user/photos
Je nach Dienst zusaetzlich:
/mnt/user/finance/mnt/remotes/...fuer externe Backup-Ziele
Wenn diese Pfade nicht sauber da sind, keine Stacks starten.
6. Phase 2 - Secrets und kritische Restore-Pfade pruefen
Bevor produktive Dienste hochfahren, muessen die wichtigsten Secret- und Konfigurationspfade verifiziert werden.
6.1 Zentrale Secrets
Erwartete Basis unter /mnt/user/appdata/secrets/:
authelia_jwt_secret.txtauthelia_postgres_password.txtauthelia_session_secret.txtauthelia_smtp_password.txtauthelia_storage_encryption_key.txtimmich_postgres_password.txtkomodo_mongo_password.txtmealie_postgres_password.txtnextcloud_admin_password.txtnextcloud_admin_user.txtnextcloud_postgres_password.txtpostgres_password.txtredis_password.txtborg_repo_passphrase.txtvaultwarden_admin_token.txthermes_runner_id_ed25519
Weitere relevante Secret-Pfade:
/mnt/user/appdata/traefik/secrets/cloudflare_dns_api_token/mnt/user/appdata/code-server/secrets/password
6.2 Stack-ENV-Werte ausserhalb von Datei-Secrets
Diese Werte sind vor dem Start der betroffenen Dienste zu pruefen bzw. wieder in Komodo zu hinterlegen:
PAPERLESS_DBPASSPAPERLESS_REDISIMMICH_DB_PASSWORDMAILARCHIVER_DB_CONNECTIONMAILARCHIVER_AUTH_PASSWORDHERMES_DASHBOARD_HOST- Hermes Host-
.envfuer Provider-/API-/Home-Assistant-Tokens KOMODO_SECRET_KEYKOMODO_WEBHOOK_SECRETKOMODO_JWT_SECRETKOMODO_MONGO_PASSWORDKOMODO_PERIPHERY_PASSKEY- relevante
HOMEPAGE_VAR_* APP_KEYundADMIN_PASSWORDfuerspeedtest-tracker
6.3 Rechte
Nach einem Restore oder manuellem Rueckkopieren:
- Secret-Dateien wieder auf sinnvolle restriktive Rechte setzen
- keine produktiven Dienste starten, solange offensichtliche Secret-Dateien fehlen
7. Phase 3 - Was wirklich aus Borg kommen muss
Nicht alles muss in jedem Fall aus Borg zurueckgespielt werden.
7.1 Typischer Host-Ausfall ohne Datenverlust
In diesem Fall meist kein kompletter Borg-Extract notwendig.
Stattdessen:
- Shares und Pfade pruefen
- Secrets pruefen
- Dumps unter
/mnt/user/backups/borg/dumps/latestpruefen - Stacks kontrolliert hochfahren
7.2 Wenn echte Daten aus Borg benoetigt werden
Dann nur gezielt die in docs/RESTORE_MATRIX.md beschriebenen Pfade wiederherstellen.
Besonders kritisch:
/mnt/user/appdata/secrets/mnt/user/appdata/traefik/mnt/user/services/gitea/data/mnt/user/appdata/authelia/config/mnt/user/appdata/komodo/core/mnt/user/appdata/komodo/periphery/mnt/user/backups/borg/dumps/latest- dienstspezifische App- und Nutzdatenpfade
Nicht blind alles extrahieren, wenn nur einzelne Pfade oder Dienste betroffen sind.
8. Phase 4 - Bootstrap-Reihenfolge der Stacks
Nie alle Stacks gleichzeitig starten.
Stufe 1 - Netz und Zugang
traefik/host-services/Adguard/host-services/tailscale/
Ziel:
- Web-Einstieg funktioniert
- DNS/Resolver-Basis ist da
- Remote-Zugang ist wieder verfuegbar
Stufe 2 - Gemeinsame Backends und Identity
infra/postgresql17/security/authelia/infra/redis/core/gitea/
Ziel:
- gemeinsame DB verfuegbar
- zentrale Auth laeuft; Authelia nutzt bewusst kein Redis-Session-Backend
- Authelia SMTP-Notifier kann GMX erreichen
- Redis als shared Cache fuer abhaengige Apps verfuegbar
- Git-Zugriff wiederhergestellt
Stufe 3 - Deploy-System
ops/komodo/
Ziel:
- Komodo Core und Mongo laufen
- Periphery verbindet sich wieder
- Stacks koennen wieder aus Git konsumiert werden
Stufe 4 - Kritische Anwendungen
security/vaultwarden/apps/paperless/apps/immich/apps/mealie/apps/mail-archiver/apps/nextcloud/
Stufe 5 - Restliche Apps und Ops
apps/homepage/apps/ntfy/apps/paperless-gpt/apps/bentopdf/ops/uptime-kuma/ops/borg-ui/ops/filebrowser/ops/glances/ops/scrutiny/ops/speedtest/monitoring/ops/hermes-agent/infra/ddns-updater/
Regel: Nach jeder Stufe kurz pruefen, bevor die naechste beginnt.
9. Phase 5 - Verifikation nach dem Wiederanlauf
9.1 Fundament
traefik.kaleschke.infoerreichbar- Authelia-Login funktioniert
- AdGuard beantwortet DNS-Anfragen
- Tailscale ist verbunden
9.2 GitOps
git.kaleschke.infoerreichbar- Repo vorhanden
komodo.kaleschke.infoerreichbar- Periphery verbunden
9.3 Kritische Apps
- Vaultwarden startet und ist erreichbar
- Paperless startet und sieht Dokumente
- Immich startet und sieht Medien
- Mealie startet
- Mail-Archiver startet
- Nextcloud startet und sieht Dateien
9.4 Backup-/Beobachtungsebene
- Borg UI startet und kennt sein Repo noch
- aktuelle Dump-Artefakte sind vorhanden
- Uptime Kuma / Homepage / ntfy sind wieder da
- Hermes Gateway und Dashboard starten;
hermes.kaleschke.infoleitet anonym zu Authelia weiter
10. Bekannte Sonderregeln
Traefik dynamic/
traefik/dynamic/* bleibt eine dokumentierte manuelle Ausnahme.
Das bedeutet:
- Git allein reicht hier nicht
- die Dateien unter
/mnt/user/appdata/traefik/dynamic/muessen real vorhanden sein - nach einem Restore oder Neuaufbau diesen Pfad explizit pruefen
paperless-ngx
paperless-ngx bleibt bewusst bei Stack Environment Variables fuer:
PAPERLESS_DBPASSPAPERLESS_REDIS
Nach einem Komodo-Neuaufbau muessen diese Werte vor dem Start des Stacks wieder gesetzt sein.
authelia
Authelia nutzt GMX SMTP fuer Identity-/2FA-Benachrichtigungen.
Vor dem Start muessen vorhanden sein:
/mnt/user/appdata/secrets/authelia_smtp_password.txt- SMTP-Zugang fuer
michideheld@gmx.de
Beim Smoke-Test muss authelia validate-config erfolgreich sein; der SMTP-Startup-Check darf den Start nicht blockieren.
nextcloud
nextcloud ist bewusst kein AIO-Stack, sondern ein klassischer App-/PostgreSQL-/Redis-Stack.
Vor dem Start muessen vorhanden sein:
/mnt/user/appdata/secrets/nextcloud_admin_user.txt/mnt/user/appdata/secrets/nextcloud_admin_password.txt/mnt/user/appdata/secrets/nextcloud_postgres_password.txt
Zusaetzlich muss der Nutzdatenpfad /mnt/user/documents/nextcloud-data erreichbar sein.
Borg-Dumps
Die Dump-Erzeugung ist host-seitig gedacht, nicht als Borg-UI-Inline-Hook.
Relevant:
- Dump-Ziel:
/mnt/user/backups/borg/dumps/latest - Skript:
ops/borg-ui/scripts/pre-backup-dumps.sh
Hermes Agent
Hermes nutzt einen lokalen Build und hostseitige Runtime-Daten.
Vor dem Start muessen vorhanden sein:
/mnt/user/appdata/hermes-agent/data/mnt/user/appdata/hermes-agent/ssh/mnt/user/appdata/secrets/hermes_runner_id_ed25519- die hostseitige Hermes
.envmit Provider-/API-/Home-Assistant-Tokens
Smoke-Test: hermes-gateway healthcheck ist gruen, hermes.kaleschke.info leitet fuer anonyme Requests zu Authelia weiter.
Gitea
Wenn weder externer Mirror noch lokaler Clone verfuegbar sind, ist services/gitea/data selbst Teil des kritischen Wiederanlaufs.
11. Offene Vorbereitungs-To-dos
- externer Repo-Zugang fuer den Ernstfall absichern
- Unraid-USB-/Flash-Backup pruefen
- Borg-Passphrase extern sicher hinterlegen
- Komodo Stack-ENV-Werte zentral ausserhalb von Komodo dokumentieren
- regelmaessige automatisierte Restore-Smoke-Tests fuer Vaultwarden, Gitea und Paperless etablieren
komodo-mongo-Dump nach Major-Upgrades gezielt kontrollieren
12. Kurzform fuer den Ernstfall
Wenn es schnell gehen muss:
- Unraid und Shares sauber wiederherstellen
- Repo-Zugang sichern
- Secrets und Stack-ENV-Werte pruefen
- Stacks in der festgelegten Reihenfolge hochfahren
- Kritische Apps testen
- Nur bei echtem Datenbedarf gezielt aus Borg wiederherstellen
Dieses Dokument soll Ruhe in den Ablauf bringen, nicht Hektik erzeugen.