Files
homelab-infra/docs/archive/2026-05/AUDIT_2026-05-23.md
T
2026-05-31 22:53:10 +02:00

24 KiB
Raw Blame History

Homelab Audit - 2026-05-23

Stand: 2026-05-23, repo-basiert. Erstellt nach docs/WORKFLOW.md und docs/GITOPS_DRIFT_RUNBOOK.md. Quellebasis: origin/master plus lokaler Clone, ohne Schreibbefehle, ohne Deploy.

Dieser Audit ist eine punktuelle Sollzustands-Bewertung, kein Live-Status. Die Live-Verifikations-Schritte stehen am Ende in Abschnitt 9; alle dortigen Outputs ersetzen Vermutungen durch Messwerte.

0. Executive Summary

Ampel-Bewertung pro Bereich:

Bereich Ampel Kernaussage
GitOps-Konsistenz (lokal/Gitea) 🟡 Lokaler Clone ist 1 Commit voraus auf master (cd650b1, Haertungs-Commit). Bis zum Push existiert dieser Stand nur lokal, nicht in Gitea — bei einem Clone-Verlust ist er weg.
GitOps-Konsistenz (Working Tree) 🟢* Keine echten Inhaltsaenderungen offen. Die 47 "modified files" aus git status im Linux-Mount sind voraussichtlich CRLF/LF-Mount-Artefakte (durch git diff -w --stat auf Stichprobe bestaetigt leer). Bitte am Windows-Host gegenpruefen.
Hardening-Sprint (Mai 2026) 🟢 Alle vier Post-Restore-Sprint-Items sind im Repo umgesetzt (Filebrowser-Mounts, Authelia Argon2id, Gitea Webhook-Allowlist, Backup-Dump-Konsistenz).
Backup/Restore-Readiness 🟢 pre-backup-dumps.sh deckt alle relevanten SQLite/PostgreSQL/Mongo-Quellen ab. Borg-UI-Scope umfasst /mnt/user/services, homelab-infra, stacks, posture-check. Live-Frische ist offen (Abschnitt 9).
Monitoring-Migration 🟡 monitoring/ Stack im Repo komplett, aber Live-Deploy laut docs/archive/2026-05/NEXT_SPRINT_TODO_2026-05-16.md noch ausstehend. Alte Stacks ops/grafana-influxdb und ops/loki sollen erst nach Live-Smoke-Test gestoppt werden.
Doku-Drift Repo vs. Master-Doku 🟠 apps/jellyfin/, host-services/plex/ und einige andere existieren produktiv als Compose-Stacks, sind aber in HOMELAB_ARCHITECTURE_MASTER_V2.md, docs/SERVICE_CATALOG.md und docs/REPO_MAP.md nicht aufgefuehrt. Authelia-ACL kennt jellyfin.kaleschke.info als bypass, im Masterdoku-Hostkatalog steht es nicht.
Repo-Hygiene 🟡 8 leere Verzeichnisse im Working Tree (siehe 4.3). .serena/ ist untracked und nicht in .gitignore. Drei ops/windows-reinstall/*.ps1 sind untracked.
Bekannte Ausnahmen 🟢 Alle Ausnahmen aus HOMELAB_ARCHITECTURE_MASTER_V2.md Abschnitt 10 sind weiterhin dokumentiert und durch den Policy-Check abgedeckt (0 Critical, 4 Warnings, 9 Info alles dokumentierte Ausnahmen).

Kernfazit: Das Homelab ist sehr nah an der "Endstufe". Es gibt keine kritischen Befunde. Die einzige Pflichtaktion vor dem naechsten geplanten Schritt ist der Push des lokalen Commits cd650b1 nach Gitea, damit origin/master wieder die Quelle der Wahrheit ist. Danach sind nur noch zwei priorisierte Pakete offen: Monitoring-Stack live finalisieren und Doku auf den Stand der neuen Stacks (Jellyfin/Plex/...) nachziehen.


1. Methodik und Quellen

Diese Audit-Quellen wurden gelesen (repo-seitig):

  • HOMELAB_ARCHITECTURE_MASTER_V2.md
  • docs/WORKFLOW.md
  • docs/REPO_MAP.md
  • docs/SERVICE_CATALOG.md
  • docs/RESTORE_MATRIX.md
  • docs/GITOPS_DRIFT_RUNBOOK.md
  • docs/archive/2026-05/NEXT_SPRINT_TODO_2026-05-16.md
  • ops/borg-ui/scripts/pre-backup-dumps.sh
  • ops/borg-ui/docker-compose.yml
  • ops/borg-ui/all-important-sources.txt
  • ops/filebrowser/docker-compose.yml
  • security/authelia/configuration.yml
  • core/gitea/docker-compose.yml
  • apps/jellyfin/docker-compose.yml
  • host-services/plex/docker-compose.yml
  • ops/policy-checks/last-report.md

Schreibbefehle: keine. Deploys: keine. Containerlaufzeit, Komodo-Webhook-Status, Borg-Lauf-Frische und Host-Listener wurden bewusst nicht angetastet — dafuer steht der Live-Daten-Block in Abschnitt 9.


2. Schicht A — GitOps und Konsistenz

2.1 Lokaler Clone vs. origin/master

## master...origin/master [ahead 1]
HEAD          = cd650b19ac057a1b74ac63503e5dba50eaf5b8ea
origin/master = af231dd4e835b19005cc0842509199d480af00d9
  • Befund: Lokaler Clone ist 1 Commit voraus.
  • Commit: cd650b1 Close Gitea signup, dedup posture-check alerts, extend Borg scope (Sat May 23 11:01:24 2026 +0200).
  • Inhalt (laut Commit-Message und betroffenen Dateien):
    • Gitea: DISABLE_REGISTRATION=true, ENABLE_OPENID_SIGNIN=false, ENABLE_OPENID_SIGNUP=false
    • Repo-Pflicht-Doku ergaenzt: Komodo-Stack-Webhook-Pflicht in CLAUDE.md, AI_CONTEXT.md, WORKFLOW.md
    • posture-check.sh: Disk1-NTFS-Funktion ausgelagert, Inode-Check auf NTFS uebersprungen, ntfy-Dedup via Fingerprint-State + ALERT_REPEAT_SECONDS
    • docker-critical-events.sh: JSON-Parsing, die exit=0 gefiltert, strukturierte ntfy-Message
    • borg-ui: /mnt/user/services als /local/services:ro gemountet, all-important-sources.txt ergaenzt
    • Unraid User Scripts dokumentiert (daily report)
    • MIGRATION_LOG.md, RESTORE_MATRIX.md, DISASTER_RECOVERY.md aktualisiert
  • Risiko: Bei Verlust des Windows-Clones (Reinstall, Diskcrash) ist dieser Stand verloren, weil er nicht in Gitea liegt. Komodo deployt ausserdem aus Gitea und kennt diese Aenderungen noch nicht.
  • Empfohlene Aktion (Pflicht vor weiterer Arbeit): In GitHub Desktop Push origin ausfuehren. Danach Komodo-Reaktion fuer die betroffenen Stacks (gitea, borg-ui) pruefen und Smoke-Tests laufen lassen.

2.2 Working-Tree-Status

$ git status --short
 M CLAUDE.md
 M HOMELAB_ARCHITECTURE_MASTER_V2.md
 M apps/homepage/docker-compose.yml
 ...
(47 Dateien als modified gemeldet, plus 4 Untracked)
  • Bewertung: Die 47 "modified files" sind mit hoher Wahrscheinlichkeit Mount-Artefakte durch CRLF/LF zwischen Windows-Clone und Linux-Mount. Stichprobe git diff -w --stat CLAUDE.md HOMELAB_ARCHITECTURE_MASTER_V2.md lieferte leer — d. h. keine inhaltlichen Diffs.
  • Aktion: Bitte am Windows-Host in GitHub Desktop git status --short ausfuehren. Wenn dort der Tree leer ist (nur die 4 Untracked), gibt es keinen echten Working-Tree-Drift. Wenn dort echte Diffs erscheinen, hier bitte zurueckmelden — dann ist das ein eigener Befund.
  • Optional (nicht Pflicht): .gitattributes mit * text=auto eol=lf haerten, damit dieser Mount-Effekt fuer KI-Audits aus dem Weg geht. Das ist ein eigener kleiner Commit, kein Audit-Output.

2.3 Untracked Files

?? .serena/
?? ops/windows-reinstall/backup-delta-after-2026-05-07.ps1
?? ops/windows-reinstall/cleanup-dualboot-bcd.ps1
?? ops/windows-reinstall/repair-disk0-boot-to-new-windows.ps1
  • .serena/ ist das Working-Directory des Serena Code-Search-Tools. Hat eigene .gitignore intern, aber das .serena/-Verzeichnis selbst ist nicht in der Repo-.gitignore.
  • Aktion (klein): .serena/ in .gitignore aufnehmen, damit es nicht versehentlich committet wird.
  • Die drei PowerShell-Scripts unter ops/windows-reinstall/ sind Windows-Reinstall-Helfer. Entscheidung offen: ins Repo aufnehmen (mit Kontextkommentar warum sie dort liegen) oder lokal halten und in .gitignore aufnehmen. Vorschlag: aufnehmen, weil ops/ der dokumentierte Ort fuer Ops-Skripte ist.

2.4 Letzte Commit-Historie (Top 10)

cd650b1 Close Gitea signup, dedup posture-check alerts, extend Borg scope    [LOKAL, NICHT GEPUSHT]
af231dd Fix zero-count noise pattern handling
428223d Mark posture report scripts executable
b6d3ed4 Tune homelab availability alerts
9e7bebb Add daily operations report with hardened log-noise filtering
b7cbbe5 Fix Jellyfin external DNS
71ac18b Fix Jellyfin native auth routing
90f270b Fix Jellyfin config permissions
e28f8da Add Jellyfin media server stack
edfec5b Add Plex media server stack
  • Die letzten Tage waren sichtbar: Jellyfin/Plex hinzugefuegt, Availability-Alerts feinjustiert, Posture-Check-Skripte produktiv gemacht, dann der grosse Haertungs-Commit gestern (2026-05-23 11:01).

2.5 Compose-Inventar vs. Doku

Repo hat folgende Compose-Stacks, die in den Doku-Quellen (HOMELAB_ARCHITECTURE_MASTER_V2.md, docs/SERVICE_CATALOG.md, docs/REPO_MAP.md) nicht oder nur teilweise aufgefuehrt sind:

Stack Status im Repo Status in Master-Doku
apps/jellyfin/docker-compose.yml produktiv vorhanden, gepinnt jellyfin:10.11.8@sha256:..., Traefik jellyfin.kaleschke.info, secure-headers@file, native Auth, /mnt/user/media:ro + /mnt/user/photos:ro fehlt in 7.4 Apps; Authelia-ACL kennt aber bereits jellyfin.kaleschke.info als bypass — Doku hinkt hinterher
host-services/plex/docker-compose.yml produktiv vorhanden, gepinnt plexinc/pms-docker:1.43.1.10611-1e34174b1@sha256:..., network_mode: host, /mnt/user/media:ro + /mnt/user/photos:ro Master-Doku sagt explizit "Plex-Media-Server ist historischer Host-Sonderfall, nicht als Repo-Compose-Stack enthalten" — das stimmt nicht mehr, Plex ist jetzt ein Repo-Compose-Stack
host-services/docker/ leeres Verzeichnis nicht erwaehnt
infra/dns/ leeres Verzeichnis nicht erwaehnt
ops/Semaphore/ Skripten/Playbooks aber kein Compose nicht erwaehnt
ops/backrest/ leeres Verzeichnis (Stack laut Master-Doku am 2026-05-15 entfernt) korrekt als entfernt dokumentiert; Verzeichnis sollte leer bleiben oder weg
apps/firefly/, apps/firefly-fints/ leere Verzeichnisse nicht erwaehnt
apps/stirling-pdf/ leeres Verzeichnis (durch bentopdf abgeloest) korrekt als abgeloest dokumentiert
  • Aktion (Doku-Synchronisierung): HOMELAB_ARCHITECTURE_MASTER_V2.md Abschnitt 7 (Container-Zielbild), docs/SERVICE_CATALOG.md und docs/REPO_MAP.md um Jellyfin und Plex erweitern. Plex-Doku im Master umschreiben: nicht mehr "historisch ausserhalb Repo", sondern "Compose-Stack mit network_mode: host als VPN-Discovery-Ausnahme".
  • Aktion (Repo-Hygiene): Die leeren Verzeichnisse apps/firefly, apps/firefly-fints, apps/stirling-pdf, host-services/docker, infra/dns, ops/backrest, ops/grafana-influxdb/scripts, ops/Semaphore/playbooks, ops/Semaphore/Scripts aufraeumen — Master-Doku sagt: "Leere .keep-Platzhalter wurden entfernt; neue Verzeichnisse sollen erst mit konkretem Inhalt ins Repo." Diese Verzeichnisse verletzen diese Regel passiv.

2.6 Image-Pinning

Lt. docs/archive/2026-05/NEXT_SPRINT_TODO_2026-05-16.md sind diese Stacks noch nicht voll versioniert gepinnt:

  • ddns-updaterlatest...@sha256
  • glanceslatest-full@sha256
  • scrutinylatest-omnibus@sha256

Das ist bewusst dokumentiert und kein Audit-Befund.


3. Schicht B — Hardening-Sprint 2026-05 (Sitrep)

Dies war der Sprint, der nach dem 2026-05 Restore explizit gesetzt wurde. Stand im Repo:

Sprint-Item Stand 2026-05-16 (Plan) Stand 2026-05-23 (Repo) Beleg
(1) Backup-Konsistenzdump_sqlite_container fuer Gitea/Vaultwarden/Uptime-Kuma/Speedtest/Filebrowser + pg_dump Nextcloud offen erledigt ops/borg-ui/scripts/pre-backup-dumps.sh Z. 97139 (dump_sqlite_container), Z. 253258 (Nextcloud pg_dump), Z. 261264 (alle SQLite-Container mit Host-Fallback), Z. 267 (Filebrowser BoltDB). Borg-Scope erweitert um /mnt/user/services (Borg-UI Compose Z. 26 + all-important-sources.txt Z. 2325).
(2) Filebrowser entschaerfen/mnt/user/appdata:/srv/appdata weg, gezielte RW-Subpfade offen erledigt ops/filebrowser/docker-compose.yml Z. 1116. Keine Appdata-Mounts mehr. Nur noch /mnt/user/documents, /mnt/user/photos, /mnt/user/projekte als Datenmounts plus eigener /database und /config.
(3) Authelia Argon2id haerten — iterations 3, memory 65536, parallelism 4 offen erledigt security/authelia/configuration.yml Z. 1725. Exakt die geplanten Parameter sind aktiv.
(4) Gitea Webhook-AllowlistALLOWED_HOST_LIST=* einschraenken offen erledigt core/gitea/docker-compose.yml Z. 18: GITEA__webhook__ALLOWED_HOST_LIST=komodo-core,localhost,127.0.0.1,192.168.178.0/24. Zusatz aus heutigem Commit: Public Registration und OpenID-Signup/Signin sind deaktiviert.

Alle vier Items sind im Repo abgeschlossen. Live-Wirksamkeit haengt am Komodo-Deploy aus Gitea — und genau da haengt aktuell der ungepushte Commit cd650b1 davor (siehe 2.1). Solange er nicht in Gitea ist, ist insbesondere die Gitea-Signup-Schliessung im Live-Stand nicht garantiert.

Bewusst nicht angefasste Liste (Operator-Entscheidung 2026-05-16) ist weiterhin gueltig:

  • Hermes — bleibt VM-seitig offen, NAS-Stack bewusst nicht starten
  • Disk1 NTFS — Phase-2-Migration nach Plan
  • Komodo native Auth ohne ForwardAuth
  • Grafana/Influxdb3-core user: "0"
  • Image-Pinning-Vereinheitlichung (:latest@sha256:) fuer ddns-updater/glances/scrutiny

4. Schicht C — "Endstufe?"-Bewertung

4.1 Backup/Restore-Readiness

  • Dump-Coverage: pre-backup-dumps.sh deckt 14 Quellen ab: PostgreSQL-Globals + 3 Shared-DBs + 3 dedizierte Postgres (mealie, immich, nextcloud) + 4 SQLite (gitea, vaultwarden, uptime-kuma, speedtest-tracker) + Filebrowser-BoltDB + Borg-UI + Grafana + Komodo-Mongo. Deckt 1:1 die Restore-Matrix-Eintraege ab.
  • Borg-Scope: all-important-sources.txt enthaelt 27 Eintraege inkl. neuer services/homelab-infra, services/stacks, services/posture-check und secrets.
  • Restore-Validierungen: Laut docs/RESTORE_MATRIX.md sind am 2026-05-07 Mini-Restores fuer gitea, vaultwarden und paperless validiert worden — dokumentierter Stand.
  • Live offen: Wann lief der letzte Borg-Lauf? Sind alle Dumps unter /mnt/user/backups/borg/dumps/latest frischer als 24h? Siehe Live-Checkliste 9.4.

4.2 Monitoring-Migration

  • Repo-Zielzustand monitoring/docker-compose.yml (337 Zeilen Compose) existiert mit Prometheus, Alertmanager, ntfy-Bridge, Blackbox-Exporter, Loki, Promtail, Grafana, node-exporter, cAdvisor, InfluxDB3 Core.
  • Provisioning unter monitoring/grafana/provisioning/ und monitoring/prometheus/, monitoring/loki/, monitoring/promtail/, monitoring/alertmanager/, monitoring/blackbox/ vollstaendig vorhanden.
  • Alte Stacks ops/grafana-influxdb/ und ops/loki/ bewusst noch im Repo (dokumentierter Altstand, Rollback-Referenz).
  • Live offen: Ist monitoring schon als Komodo-Stack deployed? Laufen die Container? Sind die Secret-Dateien monitoring_grafana_admin_password.txt, monitoring_grafana_influxdb_token.txt, influxdb3_admin_token.json auf dem Host? Siehe Live-Checkliste 9.5.

4.3 Repo-Hygiene

Befund Schwere Aktion
8 leere Verzeichnisse (apps/firefly, apps/firefly-fints, apps/stirling-pdf, host-services/docker, infra/dns, ops/backrest, ops/grafana-influxdb/scripts, ops/Semaphore/playbooks, ops/Semaphore/Scripts) klein Aufraeumen, danach committen
.serena/ untracked, nicht in .gitignore klein .serena/ zu .gitignore hinzufuegen
3 ops/windows-reinstall/*.ps1 untracked klein Entscheidung treffen: ins Repo oder ignorieren

4.4 Bekannte dokumentierte Ausnahmen

Aus HOMELAB_ARCHITECTURE_MASTER_V2.md Abschnitt 10 — alle weiterhin gueltig und durch den Policy-Check abgedeckt (ops/policy-checks/last-report.md 0 Critical):

  • Traefik 80/443
  • Tailscale Host-Netz + Capabilities
  • AdGuard Port 53 + 8082 (Admin-Port LAN-only, dokumentiert; offener Punkt im Master: "Traefik-Absicherung ausstehend (Block F)" — bewusst spaeter)
  • Plex Host-Netz (aber Master-Doku-Eintrag jetzt falsch, siehe 2.5)
  • Scrutiny privileged: true
  • Komodo Docker-Socket + keine pauschale Middleware
  • glance-docker-socket-proxy Read-only Socket
  • Gitea SSH 222
  • ddns-updater frontend_net
  • mail-archiver Hybrid-Netze
  • traefik/dynamic/* manueller Host-Sync
  • nextcloud native Auth
  • monitoring-influxdb3-core LAN 8181 + user: "0"
  • monitoring-promtail Docker-Socket read-only

Keine ungeplanten neuen Ausnahmen.

4.5 Endstufen-Definition

"Endstufe" ist erreicht, wenn alle folgenden Punkte gruen sind:

  1. Gitea = Quelle der Wahrheit — kein lokaler Commit ohne Push 🟡 (heute: cd650b1 ungepusht)
  2. Hardening-Sprint im Repo abgeschlossen 🟢
  3. Backup-Konsistenz live verifiziert (Borg laeuft, Dumps frisch) Live
  4. Monitoring-Stack live, alte Altstaende gestoppt 🟡
  5. Doku synchron mit Repo (Jellyfin/Plex, leere Verzeichnisse, ...) 🟠
  6. Policy-Check 0 Critical 🟢 (4 Warnings sind dokumentierte Ausnahmen)
  7. Restore-Lab gepflegt (mail-archiver als naechste Uebung empfohlen) 🟡 dokumentiert offen

Sechs der sieben Punkte sind in Reichweite ohne neue Architekturentscheidungen. Punkt 3 und 4 brauchen Live-Daten (Abschnitt 9). Punkt 1 ist 1 Push entfernt.


5. Priorisierte Restliste

Prio Aktion Begruendung Aufwand
P0 cd650b1 nach Gitea pushen GitOps-Quelle-der-Wahrheit, Voraussetzung fuer alles weitere 30 Sekunden
P0 Live-Daten aus Abschnitt 9 einholen Ohne Live-Frische ist Endstufen-Bewertung unvollstaendig 5 Minuten
P1 Monitoring-Stack live finalisieren (Secrets pruefen, deployen, Smoke-Test, alte Altstaende stoppen) Aus docs/archive/2026-05/NEXT_SPRINT_TODO_2026-05-16.md der naechste produktive Schritt 12 Stunden mit Tests
P2 Doku-Drift schliessen: Jellyfin und Plex in HOMELAB_ARCHITECTURE_MASTER_V2.md 7.4 + 7.1, docs/SERVICE_CATALOG.md, docs/REPO_MAP.md ergaenzen; Plex-Eintrag in Abschnitt 7.7 "noch offene Sonderfaelle" entfernen (ist umgesetzt) Doku ist Source of Truth fuer KI-Audits und Nachfolge 30 Minuten
P2 Home Assistant -> InfluxDB final testen, HA-Dashboard in monitoring-grafana anlegen aus NEXT_SPRINT_TODO 12 Stunden
P3 Repo-Hygiene: 8 leere Verzeichnisse loeschen, .serena/ in .gitignore, Entscheidung zu ops/windows-reinstall/*.ps1 minor, aber dokumentiert 15 Minuten
P3 Naechster Restore-Lab-Lauf: mail-archiver (empfohlen in RESTORE_MATRIX.md) Restore-Routine ueben, bevor sie gebraucht wird 1 Stunde
P4 .gitattributes mit * text=auto eol=lf hinzufuegen, um CRLF/LF-Mount-Effekte bei KI-Audits zu vermeiden klein, kosmetisch fuer kuenftige Audits 5 Minuten
bleibt Hermes VM-Seite, Disk1-NTFS Phase 2, AdGuard Admin-Port hinter Traefik (Block F), Image-Pinning ddns/glances/scrutiny bewusste Operator-Entscheidung, kein Audit-Beduerfnis nicht jetzt

6. Was bewusst NICHT angetastet wurde (Audit-Verzicht)

Konsistent mit der bekannten Nicht-Anfassen-Liste:

  • Hermes (VM-seitig offen)
  • Disk1 NTFS (Phase-2-Migration nach Plan)
  • Komodo native Auth ohne ForwardAuth
  • Grafana / influxdb3-core user: "0" Uebergangsausnahme
  • Image-Pinning-Vereinheitlichung fuer ddns-updater/glances/scrutiny

7. Risiken und Drift-Indikatoren

Risiko Wahrscheinlichkeit Wirkung Migitation
Lokaler Clone-Verlust (Disk, Reinstall) bevor cd650b1 gepusht wurde gering, aber real (Du bist im Reinstall-Kontext, siehe ops/windows-reinstall/!) Verlust von Gitea-Signup-Closure und Posture-Check-Verbesserungen Sofort pushen
Komodo deployt aus Gitea, gitea und borg-ui laufen aktuell ohne die heutigen Verbesserungen mittel Gitea Signup steht noch offen, Borg-Scope umfasst /mnt/user/services noch nicht Push + Komodo-Reaktion pruefen
47 vermeintlich modified files koennten doch echte Diffs sein, wenn der Windows-Host etwas anderes zeigt gering falsche Audit-Aussage Punkt 9.1 auf dem Windows-Host pruefen
Doku-Drift wird groesser, wenn weitere Stacks ohne Doku-Update hinzukommen mittel KI-Audits und Onboarding leiden P2-Doku-Sync nicht aufschieben
Monitoring-Stack-Migration unfertig, alter und neuer Stack koennten parallel werden mittel Doppelte Metric-/Log-Pipeline, Verwirrung bei Diagnose Live-Status klaeren bevor Deploy

8. Sources of Truth — Schnellzugriff

  • Operative Quelle der Wahrheit: Gitea origin/master (https://git.kaleschke.info/Micha/homelab-infra)
  • Architektur-Master: HOMELAB_ARCHITECTURE_MASTER_V2.md
  • Workflow / GitOps-Regeln: docs/WORKFLOW.md
  • Drift-Runbook: docs/GITOPS_DRIFT_RUNBOOK.md
  • Restore-Quellen: docs/RESTORE_MATRIX.md, docs/DISASTER_RECOVERY.md
  • Letzter Policy-Check: ops/policy-checks/last-report.md (0 Critical)
  • Letzte Sprint-Restliste: docs/archive/2026-05/NEXT_SPRINT_TODO_2026-05-16.md

9. Live-Daten-Checkliste — bitte ausfuehren und zurueckspielen

Fuehre die folgenden Bloecke am Unraid-Host (per SSH oder Web-Terminal) und am Windows-Host (Git Bash / PowerShell in G:\Gitea_Clone\homelab-infra) aus und pastiere die Outputs zurueck. Ich integriere sie dann in diesen Report.

9.1 Windows-Host: Echter Working-Tree-Status

cd G:\Gitea_Clone\homelab-infra
git status --short
git log origin/master..HEAD --oneline

Erwartet: Working tree leer (oder nur die 4 Untracked). cd650b1 als einziger lokaler Commit.

9.2 Unraid-Host: Gitea online

curl -sI --max-time 5 https://git.kaleschke.info/ | head -5
docker exec gitea sh -lc 'gitea --version'

Erwartet: HTTP/2 200 (oder ein Auth-Code, der den Erreichbarkeitstest erfuellt). Gitea-Version stimmt mit Image-Tag 1.25.4 ueberein.

9.3 Unraid-Host: Komodo-Webhook-Status

In Komodo UI fuer jeden produktiven Stack aus Micha/homelab-infra pruefen:

  • webhook_enabled: true
  • Gitea-Hook auf http://komodo-core:9120/listener/github/stack/<stack-id>/deploy aktiv
  • last_status der letzten Webhook-Delivery in Gitea (Repository -> Settings -> Webhooks)

Pflicht-Stacks zum Pruefen: traefik, gitea, authelia, vaultwarden, postgresql17, redis, paperless-ngx, immich, nextcloud, mealie, mail-archiver, ntfy, homepage, paperless-gpt, borg-ui, filebrowser, code-server, uptime-kuma, glance, glances, scrutiny, speedtest-tracker, bentopdf, ddns-updater, komodo, jellyfin, plex, adguard, tailscale, monitoring, hermes-agent (sofern produktiv).

Bei Stacks ohne aktiven Webhook bitte den Grund vermerken (dokumentierte Ausnahme oder Nachholbedarf).

9.4 Unraid-Host: Borg-Lauf-Frische und Dump-Coverage

ls -lah /mnt/user/backups/borg/dumps/latest/
stat -c '%y %n' /mnt/user/backups/borg/dumps/latest/*.dump /mnt/user/backups/borg/dumps/latest/*.sql /mnt/user/backups/borg/dumps/latest/*.archive.gz /mnt/user/backups/borg/dumps/latest/*.sqlite 2>/dev/null | sort
docker exec borg-ui borg list --short 2>&1 | tail -10

Erwartet: Alle 14 Artefakte aus 4.1 sind vorhanden, mtime juenger als 24h. Borg-Archive-Liste zeigt regelmaessige Laeufe.

9.5 Unraid-Host: Monitoring-Stack live?

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" | grep monitoring
ls -la /mnt/user/appdata/secrets/ | grep -E 'monitoring|influxdb3'
curl -sI --max-time 5 https://monitoring.kaleschke.info/ | head -5
ss -ltnp 2>/dev/null | grep -E ':8181|:9090|:3100' | head -10

Erwartet: Entweder alle monitoring-* Container laufen (dann ist 4.2 🟢) oder gar nicht (dann ist 4.2 🟡 wie aktuell bewertet). Halb-Zustand ist ein Audit-Befund.

9.6 Unraid-Host: GitOps-Pflichtmatrix Spot-Check fuer einen Stack

Beispiel gitea (weil der heutige Commit ihn betrifft):

cd /mnt/user/services/stacks/gitea
git rev-parse --short HEAD
git status -sb
docker inspect gitea --format '{{.Image}}'
docker exec gitea sh -lc 'env | grep -E "ALLOWED_HOST_LIST|DISABLE_REGISTRATION|ENABLE_OPENID"'

Erwartet: Komodo-Workspace HEAD zeigt entweder auf cd650b1 (wenn Push schon erfolgt + Komodo deployed) oder auf af231dd (vor dem Push). ENV-Vars in der Live-Runtime spiegeln den Commit, der Komodo zuletzt deployed hat.

9.7 Unraid-Host: Host-Listener-Spot-Check

ss -ltnp 2>/dev/null | grep -E ':80|:443|:53|:222|:8082|:8181' | sort

Erwartet exakt die dokumentierten Ausnahmen aus HOMELAB_ARCHITECTURE_MASTER_V2.md Abschnitt 10. Andere Listener = Befund.


10. Nachhalte-Vorschlag

Wenn Du moechtest, halte ich diesen Audit in zwei Schritten zu Ende:

  1. Du fuehrst Abschnitt 9 aus und pastierst die Outputs zurueck.
  2. Ich aktualisiere diesen Report mit den Live-Ergebnissen, ergaenze die Ampel und schliesse die offenen 🟡/🟠 Punkte oder benenne sie als echte Restliste.

Bis dahin gilt der Stand dieses Reports als Repo-Audit, nicht als Endstufen-Zertifikat.