11 KiB
AI Context
Stand: 2026-05-04
Diese Datei ist fuer KI-Agenten gedacht, die das Homelab-Repo schnell verstehen muessen. Sie ersetzt nicht die Detaildokumente, sondern fasst Zielbild, Betriebsmodell und Risiken zusammen.
Kurzfassung
Dieses Repository beschreibt ein Unraid-basiertes Homelab namens Kallilabcore. Der Betrieb folgt GitOps: Gitea origin/master ist die Quelle der Wahrheit, der lokale Clone ist Arbeitskopie, Komodo deployed aus Gitea, Docker Runtime und Host sind Ergebnis, nicht Bearbeitungsort.
Traefik ist der zentrale Web-Einstieg fuer HTTP(S). Admin-/Ops-UIs liegen entweder hinter Authelia/secure headers oder sind als Ausnahme dokumentiert. Secrets liegen ausserhalb des Repos auf dem Host, meistens unter /mnt/user/appdata/secrets/.
Zielbild des Homelabs
- stabile Compose-first Infrastruktur
- keine produktiven Dockerman-/Ad-hoc-Container als Dauerzustand
- Traefik als einziger oeffentlicher Web-Eingang
- GitOps ueber Gitea + Komodo
- klare Trennung von Web-Netz, Backend-Netz und app-internen Netzen
- saubere Backup-/Restore-Faehigkeit ueber Borg, Dumps und dokumentierte Pfade
- keine stillen Host-Hotfixes ohne Repo-/Doku-Abgleich
Architekturblocke
Ingress / Netzwerk
traefiknimmt 80/443 entgegen.- Docker-Labels definieren Service-Routing.
traefik/dynamic/*bleibt nur fuer Middlewares, TLS und Dashboards.- Neue Service-Routen gehoeren nicht in den File-Provider.
DNS / Remote
- AdGuard Home beantwortet LAN-DNS und nutzt Unbound als Upstream.
- Tailscale stellt Remote-Zugang bereit und nutzt
network_mode: host.
GitOps
- Gitea hostet das Repo unter
git.kaleschke.info. - Komodo ist Stack-Manager und Deploy-Consumer.
- Komodo Periphery braucht Docker-Socket und
/mnt/user/servicesMount, um Stacks reproduzierbar zu deployen. - Neue produktive Komodo-Stacks aus
Micha/homelab-inframuessen einen aktiven Gitea->Komodo-Webhook auf die aktuelle Stack-ID haben; Ausnahmen wie deaktivierte/pausierte Stacks muessen dokumentiert werden. - Der
komodo-Self-Stack ist eine dokumentierte Ausnahme ohne aktiven Gitea-Webhook; Bootstrap/Recovery laeuft ueberdocs/SERVICES_RECOVERY.md.
Identity / Security
- Authelia stellt ForwardAuth fuer viele Admin-UIs bereit.
- Authelia nutzt GMX SMTP fuer Identity-/2FA-Benachrichtigungen; Passwort liegt als Host-Secret
authelia_smtp_password.txt. - Vaultwarden ist ein separater Passwort-Tresor.
- Komodo ist bewusst nicht pauschal hinter Authelia, weil UI, API, Webhooks und Periphery-WebSocket sonst leicht gebrochen werden koennen.
- Komodo-Compose, Komodo-Secrets und Komodo-Runtime nur gemeinsam mit dem Betreiber aendern;
KOMODO_WEBHOOK_SECRETist bewusst getrennt vonKOMODO_SECRET_KEY. Gitea-Webhooks nicht pauschal vereinheitlichen: einzelne Komodo-Stacks koennen eigene per-Stack-Webhook-Secrets haben.
Apps
Wichtige Apps sind Paperless, Immich, Mealie, Mail Archiver, Nextcloud, ntfy, Vaultwarden und Gitea. Admin-/Ops-Tools sind u. a. Glance, Komodo, Borg UI, Filebrowser, code-server, Glances, Scrutiny, Speedtest, Monitoring Grafana und Hermes Agent.
Hermes Agent — Architektur und Ops-Monitor
Hermes laeuft nach Model C (siehe ops/hermes-agent/README.md):
hermes-gatewayals Docker-Container auf dem Unraid-Host, intern aufhermes_net:8642- Terminal-Befehle werden via SSH auf eine dedizierte Linux-VM ausgefuehrt
- VM-IP:
192.168.178.143, SSH-User:hermes - Repo-Clone auf der VM:
/srv/hermes-workspace/homelab-infra/
Fuer KI-Agenten wichtig: Das Hermes-Terminal laeuft auf der VM, nicht auf dem Unraid-Host.
/mnt/user/...-Pfade sind von der VM aus nicht direkt erreichbar.
Docker-CLI ist auf der VM nicht installiert — fuer Homelab-Checks wird check_health.py verwendet.
Ops-Monitor (homelab-ops-monitor):
- Skill:
ops/hermes-agent/skills/homelab-ops-monitor.md - Script:
ops/hermes-agent/scripts/check_health.py— prueft Services via HTTP, keine externen Deps - Wissensbasis:
ops/hermes-agent/services.json— maschinenlesbare Ableitung ausdocs/SERVICE_CATALOG.md - Check-Strategie: HTTP GET fuer URL-basierte Services, interne Services (DBs, Redis) als
"internal"markiert - ntfy-Topic fuer Alerts:
homelab-alertsaufhttps://ntfy.kaleschke.info
Nach Aenderungen an services.json oder check_health.py: git pull auf der VM ausfuehren.
- Mail Archiver ist ein Hybrid-Dienst mit
frontend_netfuer IMAP/Traefik undbackend_netfuer PostgreSQL; die Web-UI liegt hinter Authelia und behaelt zusaetzlich App-eigene Auth.
Monitoring / Metriken
- Zielzustand ist ein zentraler Stack
monitoring/unterhttps://monitoring.kaleschke.info. monitoring-grafanaist die zentrale UI fuer Prometheus, Loki und InfluxDB 3 Core.monitoring-prometheussammelt Infrastruktur-Metriken;monitoring-loki+monitoring-promtailsammeln Docker-Logs.monitoring-influxdb3-coreist nicht public und nicht imfrontend_net.- Home Assistant schreibt ueber LAN-only Port 8181 nach InfluxDB, gebunden ueber
INFLUXDB_BIND_IP. - Ein
401 Unauthorizedvon InfluxDB ohne Token ist beim Reachability-Test ein Erfolgssignal. - Die frueheren Altstaende
ops/lokiundops/grafana-influxdbwurden aus dem aktiven Repo entfernt; fuer Monitoring immermonitoring/verwenden, Rollback nur ueber Git-Historie. - Uptime Kuma ist entfernt; HTTP-Verfuegbarkeit laeuft ueber Blackbox Exporter, Prometheus-Alerts und
Homelab / Availabilityin Monitoring Grafana.
Deployment-Logik
Normalfall:
- lokaler Clone synchronisieren
- betroffene Dokumente und Compose-Datei lesen
- minimal aendern
- lokal validieren
- committen und pushen
- Komodo-Webhook / Deploy beobachten
- Runtime testen
- Doku aktualisieren
Wichtig: Komodo-Web-Editor ist nicht der Bearbeitungsort. Wenn Komodo und Git voneinander abweichen, zuerst Git und Komodo Workspace pruefen, nicht live herumprobieren.
Beim Anlegen neuer produktiver Stacks ist der Gitea->Komodo-Webhook Pflicht. Nach dem Anlegen muss ein Test-Push oder Test-Delivery zeigen, dass Gitea die aktuelle Komodo-Stack-ID erreicht.
Netzwerkmodell
| Netzwerk | Bedeutung |
|---|---|
frontend_net |
Web-/Proxy-Netz fuer Traefik-geroutete Dienste und Dienste mit Internetbedarf |
backend_net |
internes Netz fuer shared PostgreSQL, Redis und Backends |
dns_net |
AdGuard + Unbound |
| app-interne Netze | Isolation von App + DB/Cache, z. B. Immich, Mealie, Nextcloud, Monitoring |
host |
nur dokumentierte Sonderfaelle wie Tailscale/Plex |
Regeln:
- Datenbanken nie ins
frontend_net. - Admin-UIs nur mit Traefik + Middleware oder dokumentierter Ausnahme.
- Direkte Host-Ports sind Ausnahme, nicht Default.
- Runtime-Netznamen koennen Compose-Projektpraefixe bekommen, z. B.
monitoring_monitoring_influx_lan.
Security-Modell
- Secrets nie ins Git.
- Werte niemals zitieren, auch nicht aus
.env, Stack ENV, Logs oder Screenshots. - Secret-Dateien bevorzugt unter
/mnt/user/appdata/secrets/. _FILE-Varianten bevorzugen, falls Image sie unterstuetzt.- Wenn
_FILEnicht unterstuetzt wird, Komodo Stack Environment Variables verwenden. - Docker-Socket,
privileged: true, Host-Netz und breite Mounts sind nur mit dokumentierter Begruendung akzeptabel.
Bekannte Ausnahmen:
- Traefik: 80/443
- Gitea: SSH 222
- AdGuard: DNS 53 direkt; Admin 8082 ist bewusst ohne Traefik/2FA, aber auf Tailscale-IP
100.80.98.33begrenzt - Tailscale: Host-Netz,
NET_ADMIN,NET_RAW,/dev/net/tun - Scrutiny: privileged
- Komodo: Docker-Socket, native Auth
- InfluxDB: LAN-only 8181 fuer Home Assistant Writer
monitoring-influxdb3-core:user: "0"als dokumentierte Host-Appdata-Permissions-Ausnahme- Traefik dynamic config: manueller Host-Sync
Backup- und Restore-Modell
Borg sichert kritische Appdaten, Secrets, Traefik-State und Dump-Artefakte. Datenbank-Restore soll bevorzugt ueber Dumps laufen, nicht ueber rohe Live-DB-Verzeichnisse.
Wichtige Pfade:
/mnt/user/appdata/mnt/user/appdata/secrets/mnt/user/services/mnt/user/documents/mnt/user/photos/mnt/user/backups/borg/dumps/latest
Dump-Skript:
ops/borg-ui/scripts/pre-backup-dumps.sh- soll auf dem Unraid Host laufen
- soll nicht als Borg-UI Inline-Hook behandelt werden, solange die Architektur nicht bewusst geaendert wird
Disaster Recovery folgt einer Bootstrap-Reihenfolge:
- Traefik, AdGuard, Tailscale
- PostgreSQL, Authelia, Redis, Gitea
- Komodo
- kritische Apps
- restliche Apps/Ops inklusive Hermes Agent
Typische Arbeitsweise im Repo
- Fuer Fragen zuerst
HOMELAB_ARCHITECTURE_MASTER_V2.mdlesen. - Fuer operative Aenderungen
docs/WORKFLOW.mdlesen. - Fuer Service-Details
docs/SERVICE_CATALOG.mdund die Compose-Datei lesen. - Fuer Drift
docs/GITOPS_DRIFT_RUNBOOK.mdnutzen. - Fuer Rollback
docs/ROLLBACK.mdnutzen. - Fuer Restore
docs/DISASTER_RECOVERY.mdunddocs/RESTORE_MATRIX.mdnutzen.
KI-Agenten sollen konservativ arbeiten: keine indirekten Live-Aenderungen, keine Deployments, keine Commits, keine Host-Schreibbefehle, wenn der Benutzer nur Analyse oder Doku verlangt.
Bekannte Risiken und Altlasten
- Traefik dynamic config muss manuell auf den Host synchronisiert werden; Komodo deployed diese Dateien nicht automatisch.
backend_netund app-interne Netze muessen bei Runtime-Problemen live geprueft werden, weil Compose-Projektpraefixe Netznamen veraendern koennen.- Authelia
configuration.ymlist Repo-Baseline fuer nicht geheime Einstellungen, wird aber nicht automatisch von Komodo auf den Host kopiert; die produktive Host-Datei kann OIDC-/Secret-Konfiguration enthalten. Bei Auth-Aenderungen Repo-Baseline, Host-Config und Compose-Middlewares pruefen und nicht blind ueberschreiben. - Authelia nutzt PostgreSQL, aber bewusst kein Redis-Session-Backend; Redis ist kein Authelia-Bootstrap-Blocker.
- Authelia-Notifier ist SMTP; bei Auth-Aenderungen Host-Config backupen,
authelia validate-configausfuehren und erst danach neu starten. paperless-ngxnutzt fuer DB/Redis bewusst Stack ENV statt_FILE.glance-docker-socket-proxy,glancesundkomodo-peripherynutzen Docker-/Socket-Zugriff; Zugriff bewusst behandeln.borg-uiundfilebrowserhaben breite Mounts; bei Hardening nicht ad hoc, sondern gezielt vorgehen.scrutinyist privilegiert und hat Device-Mounts.Plex-Media-Serverist im Architekturziel als Host-Sonderfall dokumentiert, aber nicht als Repo-Compose-Stack enthalten.- Echte
stack.env- und.env-Dateien gehoeren nicht ins Repo; fuer Hermes liegt nurops/hermes-agent/stack.env.exampleim Git. - Einige Images nutzen mutable Tag plus Digest. Das friert den aktuellen Digest ein, ist aber kein automatisches Upgrade-Modell.
- Stateful Images werden bevorzugt als Minor-/Patch-Tag plus Digest gepinnt; Redis-Caches bleiben bewusst ungedigestet.
Arbeitsregel bei Unsicherheit
Nicht raten. Erst diese Reihenfolge:
- Repo-Doku lesen
- Compose-Datei lesen
- Git-Stand pruefen
- Komodo Workspace pruefen
- Docker Runtime pruefen
- Host-Listener / echten Request pruefen
- genau eine abweichende Ebene benennen
Wenn zwei Reparaturversuche scheitern: keine weiteren Schreibbefehle, Pflichtmatrix aus docs/GITOPS_DRIFT_RUNBOOK.md ausfuellen.