Files
homelab-infra/docs/AI_CONTEXT.md
T
Micha 197454931f Ignore local env files and template Hermes stack env
Ignore local env files and template Hermes stack env
2026-05-04 19:54:28 +02:00

7.4 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

  • traefik nimmt 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/services Mount, um Stacks reproduzierbar zu deployen.

Identity / Security

  • Authelia stellt ForwardAuth fuer viele Admin-UIs bereit.
  • 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.

Apps

Wichtige Apps sind Paperless, Immich, Mealie, Mail Archiver, Nextcloud, ntfy, Vaultwarden und Gitea. Admin-/Ops-Tools sind u. a. Homepage, Komodo, Borg UI, Backrest, Uptime Kuma, Filebrowser, code-server, Glances, Scrutiny, Speedtest, Grafana und Hermes Agent.

Monitoring / Metriken

  • Grafana laeuft unter grafana.kaleschke.info hinter Traefik + Authelia.
  • InfluxDB 3 Core ist nicht public und nicht im frontend_net.
  • Home Assistant schreibt ueber LAN-only Port 8181 nach InfluxDB, gebunden ueber INFLUXDB_BIND_IP.
  • Ein 401 Unauthorized von InfluxDB ohne Token ist beim Reachability-Test ein Erfolgssignal.

Deployment-Logik

Normalfall:

  1. lokaler Clone synchronisieren
  2. betroffene Dokumente und Compose-Datei lesen
  3. minimal aendern
  4. lokal validieren
  5. committen und pushen
  6. Komodo-Webhook / Deploy beobachten
  7. Runtime testen
  8. 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.

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, Grafana/Influx
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. grafana_grafana_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 _FILE nicht 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 und Admin 8082
  • Tailscale: Host-Netz
  • Scrutiny: privileged
  • Komodo: Docker-Socket, native Auth
  • InfluxDB: LAN-only 8181 fuer Home Assistant Writer
  • 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:

  1. Traefik, AdGuard, Tailscale
  2. PostgreSQL, Authelia, Redis, Gitea
  3. Komodo
  4. kritische Apps
  5. restliche Apps/Ops

Typische Arbeitsweise im Repo

  • Fuer Fragen zuerst HOMELAB_ARCHITECTURE_MASTER_V2.md lesen.
  • Fuer operative Aenderungen docs/WORKFLOW.md lesen.
  • Fuer Service-Details docs/SERVICE_CATALOG.md und die Compose-Datei lesen.
  • Fuer Drift docs/GITOPS_DRIFT_RUNBOOK.md nutzen.
  • Fuer Rollback docs/ROLLBACK.md nutzen.
  • Fuer Restore docs/DISASTER_RECOVERY.md und docs/RESTORE_MATRIX.md nutzen.

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_net und app-interne Netze muessen bei Runtime-Problemen live geprueft werden, weil Compose-Projektpraefixe Netznamen veraendern koennen.
  • Authelia Template und Compose-Middlewares koennen auseinanderlaufen; bei Auth-Aenderungen beide Seiten pruefen.
  • Authelia nutzt PostgreSQL, aber bewusst kein Redis-Session-Backend; Redis ist kein Authelia-Bootstrap-Blocker.
  • paperless-ngx nutzt fuer DB/Redis bewusst Stack ENV statt _FILE.
  • homepage, glances und komodo-periphery nutzen Docker-Socket-Mounts; Zugriff bewusst behandeln.
  • backrest, borg-ui und filebrowser haben breite Mounts; bei Hardening nicht ad hoc, sondern gezielt vorgehen.
  • scrutiny ist privilegiert und hat Device-Mounts.
  • Plex-Media-Server ist 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 nur ops/hermes-agent/stack.env.example im Git.
  • Einige Images nutzen mutable Tag plus Digest. Das friert den aktuellen Digest ein, ist aber kein automatisches Upgrade-Modell.

Arbeitsregel bei Unsicherheit

Nicht raten. Erst diese Reihenfolge:

  1. Repo-Doku lesen
  2. Compose-Datei lesen
  3. Git-Stand pruefen
  4. Komodo Workspace pruefen
  5. Docker Runtime pruefen
  6. Host-Listener / echten Request pruefen
  7. genau eine abweichende Ebene benennen

Wenn zwei Reparaturversuche scheitern: keine weiteren Schreibbefehle, Pflichtmatrix aus docs/GITOPS_DRIFT_RUNBOOK.md ausfuellen.