24 KiB
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/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.mddocs/WORKFLOW.mddocs/REPO_MAP.mddocs/SERVICE_CATALOG.mddocs/RESTORE_MATRIX.mddocs/GITOPS_DRIFT_RUNBOOK.mddocs/NEXT_SPRINT_TODO_2026-05-16.mdops/borg-ui/scripts/pre-backup-dumps.shops/borg-ui/docker-compose.ymlops/borg-ui/all-important-sources.txtops/filebrowser/docker-compose.ymlsecurity/authelia/configuration.ymlcore/gitea/docker-compose.ymlapps/jellyfin/docker-compose.ymlhost-services/plex/docker-compose.ymlops/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_SECONDSdocker-critical-events.sh: JSON-Parsing,die exit=0gefiltert, strukturierte ntfy-Messageborg-ui:/mnt/user/servicesals/local/services:rogemountet,all-important-sources.txtergaenzt- Unraid User Scripts dokumentiert (daily report)
MIGRATION_LOG.md,RESTORE_MATRIX.md,DISASTER_RECOVERY.mdaktualisiert
- Gitea:
- 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 originausfuehren. 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.mdlieferte leer — d. h. keine inhaltlichen Diffs. - Aktion: Bitte am Windows-Host in GitHub Desktop
git status --shortausfuehren. 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):
.gitattributesmit* text=auto eol=lfhaerten, 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.gitignoreintern, aber das.serena/-Verzeichnis selbst ist nicht in der Repo-.gitignore.- Aktion (klein):
.serena/in.gitignoreaufnehmen, 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.gitignoreaufnehmen. Vorschlag: aufnehmen, weilops/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.mdAbschnitt 7 (Container-Zielbild),docs/SERVICE_CATALOG.mdunddocs/REPO_MAP.mdum Jellyfin und Plex erweitern. Plex-Doku im Master umschreiben: nicht mehr "historisch ausserhalb Repo", sondern "Compose-Stack mitnetwork_mode: hostals 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/Scriptsaufraeumen — 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/NEXT_SPRINT_TODO_2026-05-16.md sind diese Stacks noch nicht voll versioniert gepinnt:
ddns-updater—latest...@sha256glances—latest-full@sha256scrutiny—latest-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-Konsistenz — dump_sqlite_container fuer Gitea/Vaultwarden/Uptime-Kuma/Speedtest/Filebrowser + pg_dump Nextcloud |
offen | ✅ erledigt | ops/borg-ui/scripts/pre-backup-dumps.sh Z. 97–139 (dump_sqlite_container), Z. 253–258 (Nextcloud pg_dump), Z. 261–264 (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. 23–25). |
(2) Filebrowser entschaerfen — /mnt/user/appdata:/srv/appdata weg, gezielte RW-Subpfade |
offen | ✅ erledigt | ops/filebrowser/docker-compose.yml Z. 11–16. 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. 17–25. Exakt die geplanten Parameter sind aktiv. |
(4) Gitea Webhook-Allowlist — ALLOWED_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.shdeckt 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.txtenthaelt 27 Eintraege inkl. neuerservices/homelab-infra,services/stacks,services/posture-checkundsecrets. - Restore-Validierungen: Laut
docs/RESTORE_MATRIX.mdsind am 2026-05-07 Mini-Restores fuergitea,vaultwardenundpaperlessvalidiert worden — dokumentierter Stand. - Live offen: Wann lief der letzte Borg-Lauf? Sind alle Dumps unter
/mnt/user/backups/borg/dumps/latestfrischer 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/undmonitoring/prometheus/,monitoring/loki/,monitoring/promtail/,monitoring/alertmanager/,monitoring/blackbox/vollstaendig vorhanden. - Alte Stacks
ops/grafana-influxdb/undops/loki/bewusst noch im Repo (dokumentierter Altstand, Rollback-Referenz). - Live offen: Ist
monitoringschon als Komodo-Stack deployed? Laufen die Container? Sind die Secret-Dateienmonitoring_grafana_admin_password.txt,monitoring_grafana_influxdb_token.txt,influxdb3_admin_token.jsonauf 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:
- Gitea = Quelle der Wahrheit — kein lokaler Commit ohne Push 🟡 (heute:
cd650b1ungepusht) - Hardening-Sprint im Repo abgeschlossen 🟢
- Backup-Konsistenz live verifiziert (Borg laeuft, Dumps frisch) ❓ Live
- Monitoring-Stack live, alte Altstaende gestoppt 🟡
- Doku synchron mit Repo (Jellyfin/Plex, leere Verzeichnisse, ...) 🟠
- Policy-Check 0 Critical 🟢 (4 Warnings sind dokumentierte Ausnahmen)
- Restore-Lab gepflegt (
mail-archiverals 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/NEXT_SPRINT_TODO_2026-05-16.md der naechste produktive Schritt |
1–2 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 | 1–2 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/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>/deployaktiv last_statusder 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:
- Du fuehrst Abschnitt 9 aus und pastierst die Outputs zurueck.
- 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.