Files
homelab-infra/docs/REPO_MAP.md
T

25 KiB

Repository Map

Stand: 2026-05-31

Diese Datei ist eine technische Landkarte des Repositories. Sie wurde aus Markdown-Dokumenten, docker-compose.yml-Dateien, Env-Beispielen, Traefik-Dynamic-Configs, Komodo/Periphery-Dateien und Skripten abgeleitet. Sie beschreibt den Repo-Sollzustand, nicht zwingend den Live-Zustand auf dem Host.

Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennamen, Secret-Namen und Pfade.

Ordnerstruktur

Pfad Zweck
apps/ Produktive Anwendungen und vorbereitete App-Stacks
core/ Basisdienste, aktuell Gitea
docs/ Betriebsdokumentation, Restore, Rollback, GitOps-Regeln
env/ globale nicht geheime Beispiel-Env-Dateien
host-services/ Host-nahe Dienste mit direkten Ports oder Host-Netz
infra/ technische Infrastruktur wie PostgreSQL, Redis, DDNS
ops/ Operations-, Backup-, Monitoring- und Admin-Tools
services/ Host-seitige Betriebsskripte und Recovery-kritische Service-Hilfen
security/ Identity/Security-Dienste wie Authelia und Vaultwarden
traefik/ Reverse Proxy Compose und dynamic File-Provider-Konfiguration

Wichtige Dokumente

Datei Bedeutung
README.md Einstieg und Kurzueberblick
HOMELAB_ARCHITECTURE_MASTER_V2.md operative Architektur-Quelle fuer Netzwerk, Zugriff und Ausnahmen
docs/WORKFLOW.md GitOps-/No-Drift-Arbeitsregeln
docs/GITOPS_DRIFT_RUNBOOK.md Pflichtmatrix fuer Git/Gitea/Komodo/Docker/Host-Drift
docs/DISASTER_RECOVERY.md Wiederanlauf nach Host-/Systemausfall
docs/RESTORE_MATRIX.md Restore-Quellen, Dump-Artefakte und Smoke-Tests je Dienst
docs/SERVICES_RECOVERY.md Recovery-kritische /mnt/user/services-Pfade, Gitea-Mirror und Komodo-Bootstrap
docs/STORAGE_LAYOUT.md verbindliche Storage-/Share-/Pfad-Konstitution
docs/HARDWARE_INVENTORY.md Hardware-, Disk-, SMART-, USV- und Strom-Inventar
docs/NETWORK_INVENTORY.md Router, DNS, Tailscale, Portfreigaben und Netztrennung
docs/EXTERNAL_DEPENDENCIES.md Externe Provider, Konten, Ausfall-Szenarien und kritische Off-Repo-Abhaengigkeiten
docs/CAPACITY_AND_LIFECYCLE.md Capacity-Schwellen, Wachstum, Upgrade-Trigger und Restore-Zeitziele
docs/FAMILY_ONBOARDING.md Familienorientierte Nutzungsdoku ohne Operator-Details
docs/FAMILY_VIEW_DASHBOARD.md Spezifikation fuer das Grafana Family-View-Dashboard (Doku-only, kein JSON)
docs/RESTORE_DRILL_ROUTINE.md Quartalsweise Restore-Drill-Routine, Tier-Belegung, DR-Sanity-Check
docs/IMMICH_RESTORE_TEST.md Operator-Overview Immich-Restore-Test, Erstlauf 2026-05-27 erfolgreich
docs/RENOVATE.md Self-hosted Renovate gegen Gitea (Setup + Wartung)
docs/FRITZBOX_PORT_CORRECTION_PLAN.md Vorbereitungs-Doku fuer FRITZ!Box-Portfreigaben-Korrektur (kein Router-Eingriff)
docs/OFFSITE_BACKUP_OPTIONS.md Entscheidungsvorlage zweites Offsite-Backup-Ziel (rsync.net vs. BorgBase EU2 vs. Cold-Platte)
docs/AUDIT_2026-05-25_TODO.md Operative Arbeitsliste aus dem Audit vom 2026-05-25; Authelia-2FA bewusst geparkt
docs/STRATEGISCHE_BEWERTUNG_2026-05-23.md Historische Baseline-Bewertung; hat den Audit-Zyklus 2026-05-25 angestossen
docs/CODEX_KONSOLIDIERUNG_2026-05-23.md Codex-Erstprompt zum Audit-Zyklus, abgearbeitet; Vorlage fuer kuenftige Sweeps
docs/CODEX_JELLYFIN_REMOVAL_2026-05-23.md Codex-Removal-Pattern, Jellyfin-Removal 2026-05-25 ausgefuehrt; Vorlage fuer kuenftige Stack-Removals
ops/policy-checks/mem-limits-baseline.md F-19 Vorbereitungs-Plan fuer Container-Mem-Limits; bewusst nicht vor 7 Tagen Peak-Beobachtung
docs/ALERTING_MAP.md ntfy Topic-Konvention und Sender-Mapping fuer Homelab-Alerts
docs/ROLLBACK.md Rueckweg bei Fehlern im GitOps-Betrieb
docs/SECRETS_MAP.md Secret-Namen, Pfade und Einbindungsarten ohne Werte
docs/HOME_ASSISTANT_INFLUXDB_ECOWITT.md Home Assistant -> InfluxDB 3 -> Grafana Ablauf
docs/AI_CONTEXT.md Gesamtverstaendnis fuer KI-Agenten
docs/SERVICE_CATALOG.md produktiver Service-Katalog

Relevante Nicht-Compose-Dateien

Datei Zweck / Hinweis
traefik/dynamic/middlewares.yml zentrale secure-headers und authelia ForwardAuth Middleware; manuelle Host-Sync-Ausnahme
traefik/dynamic/dashboards.yml leer; File-Provider-Platzhalter
traefik/dynamic/tls.yml leer; File-Provider-Platzhalter
security/authelia/configuration.yml versionierte Authelia-Baseline fuer nicht geheime ACL-/Session-/Storage-Einstellungen; manuelle Host-Merge-Pflicht, User-Daten, OIDC-Client-Konfiguration und Secret-Werte bleiben ausserhalb von Git
monitoring/prometheus/prometheus.yml Prometheus Scrape-Konfiguration fuer dedizierten Monitoring-Stack
monitoring/loki/loki-config.yml Loki Filesystem/Retention-Konfiguration fuer dedizierten Monitoring-Stack
monitoring/promtail/promtail-config.yml Promtail Docker-Socket-Discovery fuer dedizierten Monitoring-Stack
monitoring/grafana/provisioning/* Grafana Datasource-/Dashboard-Provisioning fuer Prometheus und Loki
ops/glance/config/glance.yml Glance Dashboard-Konfiguration fuer Homelab-Monitore, Internet-/DNS-/VPN-Widgets, Community-Widgets, Docker-Containergruppen, Zeitfortschritt, Host-Snapshot, Bookmarks und zweite Infrastruktur-Seite
ops/borg-ui/scripts/pre-backup-dumps.sh Host-seitiges Dump-Skript fuer PostgreSQL, SQLite-Container-Dumps und Komodo Mongo
services/posture-check/posture-check.sh Host-seitiger Posture-Check fuer Filesystem, Mover-Drift, NVMe-SMART, Fuellstand, Authelia-Repo<->Host-Drift und ntfy-Alarmierung
services/posture-check/export-prometheus-textfile.sh Host-seitiger Textfile-Exporter fuer Borg-, Critical-Container- und GitOps-Runtime-Image-Drift-Metriken
services/posture-check/docker-critical-events.sh Host-seitiger Docker-Event-Watcher fuer kritische ntfy-Alarme
services/posture-check/posture_check.sh Kompatibilitaets-Wrapper fuer die historische Schreibweise aus STORAGE_LAYOUT.draft.md
services/authelia-diff.sh Vergleicht access_control:-Sektion zwischen Repo-Baseline und Host-Datei; wird vom Posture-Check als Check authelia_config_drift aufgerufen
ops/hermes-agent/config/hermes/config.yaml Hermes Agent Konfiguration mit Env-Platzhaltern
ops/hermes-agent/hermes.env.example Beispiel fuer Hermes .env; echte Datei liegt auf Host-Appdata
ops/hermes-agent/stack.env.example Beispiel fuer Hermes Stack-ENV; echte stack.env bleibt host-/komodoseitig und ist per .gitignore ausgeschlossen
monitoring/stack.env.example INFLUXDB_BIND_IP Default 127.0.0.1; im Zielzustand fuer Home Assistant auf LAN-IP setzen
ops/komodo/stack.env.example Komodo Stack-ENV-Beispiel, Secret-Werte nicht enthalten

Stack-Inventar

Apps

Stack Compose Services / Images Traefik Hosts Networks Ports Abhaengigkeiten
BentoPDF apps/bentopdf/docker-compose.yml bentopdf -> bentopdfteam/bentopdf:2.8.4 pdf.kaleschke.info frontend_net keine Traefik + Authelia; COOP/COEP Middleware
Immich apps/immich/docker-compose.yml immich-server, immich-machine-learning, database, redis immich.kaleschke.info frontend_net, immich_default keine immich-server depends on database, redis
Mail Archiver apps/mail-archiver/docker-compose.yml mail-archiver -> s1t5/mailarchiver@sha256:... mail.kaleschke.info frontend_net, backend_net keine shared PostgreSQL via env connection string; Internet fuer IMAP
Mealie apps/mealie/docker-compose.yml mealie, mealie-postgres mealie.kaleschke.info frontend_net, mealie_internal keine eigene PostgreSQL im internen Netz
Nextcloud apps/nextcloud/docker-compose.yml nextcloud, nextcloud-postgres, nextcloud-redis cloud.kaleschke.info frontend_net, nextcloud_internal keine native Nextcloud-Auth; eigene DB und Redis
ntfy apps/ntfy/docker-compose.yml ntfy -> binwiederhier/ntfy:latest@sha256:... ntfy.kaleschke.info frontend_net keine mobile Push via upstream ntfy.sh
Paperless-ngx apps/paperless/docker-compose.yml paperless -> ghcr.io/paperless-ngx/paperless-ngx:2.20.10 paperless.kaleschke.info frontend_net, backend_net keine shared PostgreSQL + Redis; DB/Redis via Stack ENV
Paperless-GPT apps/paperless-gpt/docker-compose.yml paperless-gpt -> icereed/paperless-gpt:v0.24.0 paperless-gpt.kaleschke.info frontend_net keine Paperless API, Ollama/LLM config
Unbound apps/unbound/docker-compose.yml unbound -> shaanmajid/unbound:latest@sha256:... keine dns_net keine Upstream Resolver fuer AdGuard

Core / Security / Infra

Stack Compose Services / Images Traefik Hosts Networks Ports Abhaengigkeiten
Gitea core/gitea/docker-compose.yml gitea -> docker.gitea.com/gitea:1.25.4@sha256:... git.kaleschke.info frontend_net 222:22/tcp SQLite in /data; SSH-Port ist dokumentierte Ausnahme; github.com ist als Mirror-Ziel erlaubt und externe DNS-Resolver sind gesetzt
Authelia security/authelia/docker-compose.yml authelia -> authelia/authelia:latest@sha256:... auth.kaleschke.info frontend_net, backend_net keine PostgreSQL 18 Storage im historisch benannten postgresql17-Container, Traefik ForwardAuth; bewusst ohne Redis-Session-Backend
Vaultwarden security/vaultwarden/docker-compose.yml vaultwarden -> vaultwarden/server:latest@sha256:... vault.kaleschke.info frontend_net keine Datei-Persistenz, ADMIN_TOKEN_FILE
ddns-updater infra/ddns-updater/docker-compose.yml ddns-updater -> ghcr.io/qdm12/ddns-updater:latest@sha256:... keine frontend_net keine Cloudflare/API-Internetbedarf
PostgreSQL 18 infra/postgresql17/docker-compose.yml postgresql17 -> postgres:18.4@sha256:8ff36f3c66371cba71d20ceedccfc3de9669a68737607888c4ef0af93abe8e39 keine backend_net keine shared DB-Cluster; Service-Name bleibt historisch postgresql17
Redis infra/redis/docker-compose.yml Redis -> redis:8.8.0-alpine@sha256:09160599abd229764c0fb44cb6be640294e1d360a54b19985ab4843dcf2d90f1 keine backend_net keine primaer Paperless-Redis (App-Cache); historisch als "shared" angelegt, faktisch nur von Paperless genutzt; Passwort-Datei

Host Services

Stack Compose Services / Images Hosts Networks Ports / Mode Abhaengigkeiten
AdGuard Home host-services/Adguard/docker-compose.yml adguard -> adguard/adguardhome:v0.107.52 keine Traefik-Route dns_net, frontend_net 53/tcp, 53/udp, 100.80.98.33:8082:80/tcp Unbound in dns_net; DNS-Port 53 ist direkte Ausnahme; Admin 8082 ist auf Tailscale-IP begrenzt
Plex host-services/plex/docker-compose.yml plex -> plexinc/pms-docker:1.43.1.10611-1e34174b1@sha256:... keine Traefik-Route network_mode: host host network Medienserver; Host-Netz bleibt fuer Discovery / Plex GDM dokumentierte Ausnahme
Tailscale host-services/tailscale/docker-compose.yml Tailscale-Docker -> tailscale/tailscale:stable@sha256:... keine network_mode: host host network VPN/Remote-Zugang

Operations

Stack Compose Services / Images Traefik Hosts Networks Ports Abhaengigkeiten
Borg UI ops/borg-ui/docker-compose.yml borg-ui -> ainullcode/borg-ui:latest@sha256:... borg.kaleschke.info frontend_net keine Borg repo, Dump-Scope, Restore-Ziel
code-server ops/code-server/docker-compose.yml code-server -> lscr.io/linuxserver/code-server:4.116.0@sha256:... code.kaleschke.info frontend_net keine Passwort-Datei, Workspace-Mounts
Filebrowser ops/filebrowser/docker-compose.yml filebrowser -> filebrowser/filebrowser:v2.63.2@sha256:... files.kaleschke.info frontend_net keine Documents/Photos/Projekte-Mounts, Admin-UI hinter Authelia
Glance ops/glance/docker-compose.yml glance -> glanceapp/glance:v0.8.4, glance-docker-socket-proxy -> tecnativa/docker-socket-proxy:v0.4.2 glance.kaleschke.info frontend_net, glance_socket_net keine Homelab-Dashboard mit Home- und Infrastructure-Seite, Monitor-, Community-, Docker-, Internet-/DNS-/VPN- und Server-Stats-Widgets; aktives Community-Widget: Immich; Docker-API nur ueber internen Socket-Proxy
Glances ops/glances/docker-compose.yml glances -> nicolargo/glances:latest-full@sha256:... glances.kaleschke.info frontend_net keine Rootfs/Docker-Socket fuer Monitoring
Monitoring monitoring/docker-compose.yml monitoring-prometheus, monitoring-alertmanager, monitoring-alertmanager-ntfy-bridge, monitoring-blackbox-exporter, monitoring-loki, monitoring-promtail, monitoring-grafana, monitoring-node-exporter, monitoring-cadvisor, monitoring-influxdb3-core, optional monitoring-grafana-dashboard-importer monitoring.kaleschke.info frontend_net, monitoring_net, monitoring_influx_lan monitoring-influxdb3-core: ${INFLUXDB_BIND_IP:-127.0.0.1}:8181:8181 zentraler Zielstack fuer Prometheus/Loki/Grafana/InfluxDB; Alertmanager sendet via ntfy-Bridge nach homelab-alerts; Blackbox ersetzt Uptime-Kuma-Checks nach Parallelphase; Promtail nutzt Docker socket read-only; Dashboard-Importer nur via bootstrap-Profil
Hermes Agent ops/hermes-agent/docker-compose.yml hermes-gateway, hermes-dashboard -> local build from Dockerfile hermes.kaleschke.info via ${HERMES_DASHBOARD_HOST} hermes_net, dashboard zusaetzlich frontend_net 8642 nur expose intern SSH runner, Home Assistant optional, LLM provider env; Dashboard hinter Authelia
Komodo ops/komodo/docker-compose.yml komodo-core, komodo-mongo, komodo-periphery komodo.kaleschke.info frontend_net, komodo_net keine Mongo, Docker socket, /mnt/user/services workspace mount, Gitea DNS override
Scrutiny ops/scrutiny/docker-compose.yml scrutiny -> ghcr.io/starosdev/scrutiny:latest-omnibus@sha256:... scrutiny.kaleschke.info frontend_net keine privileged: true, device mounts fuer SMART
Speedtest Tracker ops/speedtest/docker-compose.yml speedtest-tracker -> lscr.io/linuxserver/speedtest-tracker:1.13.12@sha256:... speedtest.kaleschke.info frontend_net keine App key/admin env, SQLite/config path

Traefik

Stack Compose Service / Image Hosts Networks Ports Abhaengigkeiten
Traefik traefik/docker-compose.yml traefik -> traefik:v3.6 traefik.kaleschke.info frontend_net, backend_net 80:80/tcp, 443:443/tcp Docker provider, Cloudflare DNS token secret, dynamic config

Traefik Hosts

Host Service Zugriff
auth.kaleschke.info Authelia Auth provider / bypass fuer eigene Domain
borg.kaleschke.info Borg UI Traefik + Authelia
cloud.kaleschke.info Nextcloud Traefik, native App-Auth
code.kaleschke.info code-server Traefik + Authelia
files.kaleschke.info Filebrowser Traefik + Authelia
git.kaleschke.info Gitea Web Traefik
glance.kaleschke.info Glance Traefik + Authelia
glances.kaleschke.info Glances Traefik + Authelia
hermes.kaleschke.info Hermes Dashboard Traefik + Authelia
immich.kaleschke.info Immich Traefik, native App-Auth
komodo.kaleschke.info Komodo Traefik, native Komodo-Auth; keine pauschale ForwardAuth
mail.kaleschke.info Mail Archiver Traefik + Authelia + App-Auth
mealie.kaleschke.info Mealie Traefik
monitoring.kaleschke.info Monitoring Grafana Traefik + Authelia
ntfy.kaleschke.info ntfy Traefik
paperless.kaleschke.info Paperless-ngx Traefik
paperless-gpt.kaleschke.info Paperless-GPT Traefik + Authelia
pdf.kaleschke.info BentoPDF Traefik + Authelia + COOP/COEP
scrutiny.kaleschke.info Scrutiny Traefik + Authelia
speedtest.kaleschke.info Speedtest Tracker Traefik + Authelia
traefik.kaleschke.info Traefik Dashboard Traefik + Authelia
vault.kaleschke.info Vaultwarden Traefik

Networks

Network Typ / Status Nutzer
frontend_net external bridge Web-/Proxy-Netz fuer Traefik und alle gerouteten UIs
backend_net external/internal laut Architektur PostgreSQL 18 (postgresql17), Redis 8, Authelia, Paperless, Mail Archiver, Traefik
dns_net App-/Host-Netz AdGuard Home und Unbound
immich_default Compose-intern, internal: true Immich Server, ML, Postgres, Redis
mealie_internal Compose-intern; Laufzeitname mit Compose-Projektpraefix typischerweise mealie_mealie_internal Mealie und Mealie Postgres
nextcloud_internal Compose-intern Nextcloud, Nextcloud Postgres, Nextcloud Redis
monitoring_net Compose-/Stack-Netz bridge Prometheus, Loki, Promtail, Monitoring-Grafana, node-exporter, cAdvisor; Traefik fuer Metrics-Scrape
monitoring_influx_lan Compose-intern bridge InfluxDB Host-Port-Publishing fuer LAN Writer im zentralen Monitoring-Stack
glance_socket_net Compose-intern, internal: true Glance und glance-docker-socket-proxy; keine Traefik-Anbindung
komodo_net Compose-intern, internal: true Komodo Core, Mongo, Periphery
hermes_net Compose-intern bridge Hermes Gateway/Dashboard
host Host-Netz Tailscale; Plex als Repo-Compose-Stack unter host-services/plex/

Volumes und Datenpfade

Bereich Wichtige Pfade
Traefik /mnt/user/appdata/traefik/dynamic, /mnt/user/appdata/traefik/letsencrypt, Cloudflare Secret
Gitea /mnt/user/services/gitea/data
Authelia /mnt/user/appdata/authelia/config, Authelia Secret-Dateien
Vaultwarden /mnt/user/appdata/vaultwarden, Admin-Token-Datei
PostgreSQL 18 /mnt/user/appdata/postgresql18, Rollback-Altstand /mnt/user/appdata/postgresql17, postgres_password.txt
Redis /mnt/user/appdata/redis, redis_password.txt
Paperless /mnt/user/appdata/paperless-ngx/data, /mnt/user/documents/paperless, /mnt/user/documents/scans_inbox
Immich /mnt/user/photos/immich, /mnt/user/photos/family_archive, /mnt/user/appdata/immich_postgres_vectorchord, Rollback-Altstand /mnt/user/appdata/immich_postgres, model-cache
Mealie /mnt/user/appdata/mealie/data, /mnt/user/appdata/mealie/postgres18, Rollback-Altstand /mnt/user/appdata/mealie/postgres
Mail Archiver /mnt/user/appdata/mailarchiver/data-protection-keys
Nextcloud /mnt/user/appdata/nextcloud/html, /mnt/user/documents/nextcloud-data, /mnt/user/appdata/nextcloud/postgres18, Rollback-Altstand /mnt/user/appdata/nextcloud/postgres, /mnt/user/appdata/nextcloud/redis
Plex /mnt/user/appdata/plex/config, /mnt/user/appdata/plex/transcode, /mnt/user/media, /mnt/user/photos
ntfy /mnt/user/appdata/ntfy
Paperless-GPT /mnt/user/appdata/paperless-gpt/data, /mnt/user/appdata/paperless-gpt/prompts
AdGuard /mnt/user/appdata/adguard/work, /mnt/user/appdata/adguard/conf
Tailscale /mnt/user/appdata/tailscale
Borg UI /mnt/user/appdata/borg-ui/data, /mnt/user/appdata/borg-ui/cache, /mnt/user/backups/borg/dumps, selected restore/source mounts
code-server /mnt/user/appdata/code-server, /mnt/user/services/dev
Filebrowser /mnt/user/documents, /mnt/user/photos, /mnt/user/projekte, Filebrowser database/config paths
Glance Repo-Konfiguration unter ops/glance/config/glance.yml; keine produktive Datenpersistenz; Docker-Socket nur am internen Proxy
Glances /, Docker socket, /etc/os-release
Scrutiny /mnt/user/appdata/scrutiny/*, /run/udev, selected /dev/... disks
Speedtest /mnt/user/appdata/speedtest-tracker/config
Monitoring named volumes prometheus_data, loki_data, promtail_positions, grafana_data; InfluxDB-Persistenz unter /mnt/user/appdata/influxdb3/data und /mnt/user/appdata/influxdb3/plugins; Provisioning im Repo unter monitoring/grafana/provisioning; Dashboards unter monitoring/grafana/dashboards; historische Altstandsdaten unter /mnt/user/appdata/grafana, /mnt/user/appdata/loki und /mnt/user/appdata/alloy nicht blind loeschen
Hermes Agent /mnt/user/appdata/hermes-agent/data, /mnt/user/appdata/hermes-agent/ssh, SSH private key path
Komodo komodo_keys, /mnt/user/appdata/komodo/core, /mnt/user/appdata/komodo/mongo, /mnt/user/appdata/komodo/periphery, /mnt/user/services

Secrets und Env-Hinweise

Dienst / Stack Secret-/Env-Hinweise ohne Werte
Traefik cloudflare_dns_api_token als Docker Secret / CF_DNS_API_TOKEN_FILE
Authelia JWT, Session, Storage Encryption, Postgres Password via _FILE
Vaultwarden ADMIN_TOKEN_FILE
PostgreSQL 18 POSTGRES_PASSWORD_FILE
Redis Passwort-Datei und Startkommando
Paperless PAPERLESS_DBPASS, PAPERLESS_REDIS als Komodo Stack ENV
Immich IMMICH_DB_PASSWORD Stack ENV; immich_postgres_password.txt fuer Postgres
Mail Archiver MAILARCHIVER_DB_CONNECTION, MAILARCHIVER_AUTH_PASSWORD als Stack ENV
Glance GLANCE_IMMICH_API_KEY, GLANCE_ADGUARD_USERNAME, GLANCE_ADGUARD_PASSWORD, GLANCE_SPEEDTEST_API_KEY als Stack ENV fuer Community-/Live-Widgets
Speedtest APP_KEY, ADMIN_PASSWORD als Stack ENV
Nextcloud Admin User, Admin Password, Postgres Password via Secret-Dateien
Komodo KOMODO_SECRET_KEY, KOMODO_WEBHOOK_SECRET, KOMODO_JWT_SECRET, KOMODO_MONGO_PASSWORD, KOMODO_PERIPHERY_PASSKEY; Mongo Passwort-Datei
Borg UI Borg Credentials, Admin Login, SSH Keys in persistentem Appdata, nicht im Git
Hermes Agent provider keys, API server key, messaging tokens, Home Assistant token in Host .env; SSH private key als Host-Secret
Monitoring monitoring_grafana_admin_password.txt, monitoring_grafana_influxdb_token.txt, influxdb3_admin_token.json fuer zentrale Grafana-/InfluxDB-Funktionen; ersetzt Uptime Kuma fuer HTTP-Verfuegbarkeit

Skripte

Skript Ausfuehrungsort Zweck
ops/borg-ui/scripts/pre-backup-dumps.sh Unraid Host, nicht Borg-UI Inline-Hook erzeugt aktuelle Dumps unter /mnt/user/backups/borg/dumps/latest
services/posture-check/posture-check.sh Unraid Host schreibt /mnt/user/services/posture-check/last.json und alarmiert via ntfy bei Warning/Critical
services/posture-check/export-prometheus-textfile.sh Unraid Host, Cron/Textfile-Collector schreibt Borg-, Critical-Container- und GitOps-Runtime-Image-Drift-Metriken fuer Prometheus
services/posture-check/docker-critical-events.sh Unraid Host beobachtet Docker die/oom/kill Events und alarmiert via homelab-alerts

Das Skript liest Secret-Dateien auf dem Host und schreibt Dump-Artefakte. Bei Analyse niemals Secret-Inhalte ausgeben.

Unsicherheiten / TODOs aus Repo-Sicht

  • Echte stack.env- und .env-Dateien sind per .gitignore ausgeschlossen; nur *.example-Dateien gehoeren ins Repo.
  • Hardware-, Netzwerk- und Provider-Inventare sind initiale Templates und muessen nach einem Host-Audit mit echten Werten gefuellt werden.
  • Authelia-2FA-/OIDC-Aenderungen sind nach Audit 2026-05-25 bewusst geparkt und werden nicht als Sofortmassnahme behandelt.
  • Authelia configuration.yml ist Repo-Baseline fuer nicht geheime Einstellungen, wird aber nicht automatisch von Komodo auf den Host kopiert. Die produktive Host-Datei kann zusaetzliche OIDC-/Secret-Konfiguration enthalten; Aenderungen muessen manuell gemerged und validiert werden.
  • backend_net ist in der Architektur als internal: true beschrieben; einzelne Compose-Dateien referenzieren es external. Live-Netz-Attribute bei Drift-Fragen pruefen.
  • Einige Images bleiben trotz Digest-Pin semantisch auf mutable Tags (latest@sha256, release@sha256). Das ist bewusst dokumentiert, aber bei Updates gesondert pruefen.
  • Stateful Datenhalter sind seit 2026-05-05 bevorzugt mit Minor-/Patch-Tag plus Digest gepinnt; PostgreSQL-17-Datenhalter wurden am 2026-05-31 per Dump/Restore auf PostgreSQL 18 gehoben, Redis-Caches auf Redis 8.8, Immich-Postgres bleibt auf PG14 mit VectorChord.
  • scrutiny bleibt privileged: true; dokumentierte Ausnahme, aber weiterhin pruefenswert.
  • tailscale nutzt Host-Netz, NET_ADMIN, NET_RAW und /dev/net/tun als dokumentierte VPN-Ausnahme.
  • monitoring-influxdb3-core laeuft aktuell als user: "0"; UID/GID-Hardening nur als eigener Sprint.
  • Leere .keep-Platzhalter wurden entfernt; neue Verzeichnisse sollen erst mit konkretem Inhalt ins Repo.
  • plex ist als Repo-Compose-Stack unter host-services/plex/ enthalten; network_mode: host bleibt die dokumentierte Discovery-Ausnahme.
  • BentoPDF kann je nach Live-Stand vorbereitet statt produktiv sein; Hermes Dashboard ist produktiv unter hermes.kaleschke.info.