Files
homelab-infra/docs/SERVICE_CATALOG.md
T
Micha cd650b19ac Close Gitea signup, dedup posture-check alerts, extend Borg scope
Operational hardening across several services after live incident
analysis between 2026-05-18 and 2026-05-20:

- Gitea: disable public registration and OpenID signup/signin to
  stop the external POST / 5xx bursts that triggered availability
  alerts. New repo-wide policy requires every productive
  Micha/homelab-infra Komodo stack to ship with an active
  Gitea->Komodo webhook on the current stack ID (documented in
  CLAUDE.md, AI_CONTEXT.md, WORKFLOW.md).
- posture-check: extract the Disk1 fstype check into its own
  function so the documented Disk1 NTFS exception no longer raises
  ntfy warnings, skip POSIX inode checks on NTFS, and dedup ntfy
  alerts via a fingerprint state file with ALERT_REPEAT_SECONDS
  (default 24h). Repeat-spam on the same cause now suppressed.
- docker-critical-events: parse the event JSON for container name,
  action, exit code and signal; drop `die exit=0` events (clean
  stops); ship a structured ntfy message instead of the raw event
  line.
- Borg UI: mount /mnt/user/services into the backup container as
  /local/services:ro and include homelab-infra, stacks and
  posture-check in all-important-sources.txt. RESTORE_MATRIX and
  DISASTER_RECOVERY updated accordingly.
- Unraid user scripts: document the new
  homelab-operations-report-daily cron job and the SMTP password
  file it expects on the host.
- MIGRATION_LOG: capture the four live events from this window -
  Gitea 5xx burst + signup closure, Komodo webhook reconciliation,
  posture-check host-version verification, Borg scope extension,
  and Traefik 5xx alert detuning.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 11:05:35 +02:00

22 KiB

Service Catalog

Stand: 2026-05-04

Dieser Katalog beschreibt produktive und repo-vorbereitete Dienste aus Sicht von Betrieb, Restore und KI-Kontext. Er basiert auf dem Repo-Sollzustand. Vor produktiven Eingriffen immer den Live-Zustand in Komodo/Docker pruefen.

Secret-Werte sind nicht enthalten. Es werden nur Secret-Namen, Env-Key-Namen und Pfade genannt.

Core / Ingress / DNS

Service Zweck Autoritativer Pfad URL / Zugang Abhaengigkeiten Datenpfade Backup / Restore Traefik Besonderheiten / TODOs
traefik zentraler Reverse Proxy, TLS, Docker-Label-Routing traefik/docker-compose.yml, traefik/dynamic/* https://traefik.kaleschke.info Docker socket, Cloudflare DNS API, frontend_net, backend_net /mnt/user/appdata/traefik/dynamic, /mnt/user/appdata/traefik/letsencrypt Tier 1, Share/Borg ja, eigene Dashboard-Route mit Authelia Host-Ports 80/443 sind zentrale Ausnahme; dynamic configs werden nicht automatisch von Komodo deployed
adguard DNS-Server / LAN DNS host-services/Adguard/docker-compose.yml LAN-Port 53, Admin 8082 dns_net, frontend_net, Unbound /mnt/user/appdata/adguard/conf, /mnt/user/appdata/adguard/work Tier 1, config relevant nein Direkte Ports 53 und 8082 dokumentierte Ausnahme; Admin-Port spaeter ggf. absichern
unbound Upstream DNS Resolver fuer AdGuard apps/unbound/docker-compose.yml intern dns_net /mnt/user/appdata/unbound/config rebuildbar / config relevant nein intern isoliert
tailscale VPN/Remote-Zugang host-services/tailscale/docker-compose.yml Tailscale Host-Netz /mnt/user/appdata/tailscale Tier 1, State relevant nein network_mode: host, NET_ADMIN, NET_RAW und /dev/net/tun sind dokumentierte VPN-Ausnahmen
gitea Git-Server / origin fuer GitOps core/gitea/docker-compose.yml https://git.kaleschke.info, SSH 222 Traefik, frontend_net /mnt/user/services/gitea/data Tier 1, gitea.sqlite.dump + Share ja SSH-Port 222 direkte Host-Port-Ausnahme; ohne externen Mirror im DR kritisch

Security / Identity

Service Zweck Autoritativer Pfad URL / Zugang Abhaengigkeiten Datenpfade Backup / Restore Traefik Besonderheiten / TODOs
authelia ForwardAuth / zentrale Auth fuer Admin-UIs security/authelia/docker-compose.yml, security/authelia/configuration.yml https://auth.kaleschke.info PostgreSQL 17, Traefik, GMX SMTP /mnt/user/appdata/authelia/config, Authelia Secret-Dateien Tier 1, config + DB + secrets ja Bewusst ohne Redis-Session-Backend; SMTP-Notifier via GMX und authelia_smtp_password.txt; explizite DNS-Server fuer SMTP/NTP; Repo-Baseline muss manuell in die Host-Config gemerged werden, OIDC/Secrets bleiben hostseitig; Access-Control und Compose-Middleware bei Aenderungen abgleichen
vaultwarden Passwort-Tresor security/vaultwarden/docker-compose.yml https://vault.kaleschke.info Traefik, frontend_net /mnt/user/appdata/vaultwarden Tier 1, vaultwarden.sqlite.dump + Share ja ADMIN_TOKEN_FILE; keine direkten Ports

Shared Infrastructure

Service Zweck Autoritativer Pfad URL / Zugang Abhaengigkeiten Datenpfade Backup / Restore Traefik Besonderheiten / TODOs
postgresql17 shared PostgreSQL Cluster infra/postgresql17/docker-compose.yml intern backend_net /mnt/user/appdata/postgresql17, postgres_password.txt Tier 1; Dumps unter /mnt/user/backups/borg/dumps/latest nein keine Host-Ports; raw DB nicht primaerer Restore-Weg
Redis shared Redis Cache infra/redis/docker-compose.yml intern backend_net /mnt/user/appdata/redis, redis_password.txt transiente Daten, bewusst nicht kritisch nein Passwort-Datei; optional named volume offen
ddns-updater Cloudflare/DDNS Aktualisierung infra/ddns-updater/docker-compose.yml intern Internetzugang, frontend_net /mnt/user/appdata/ddns-updater rebuildbar nein bleibt bewusst in frontend_net, weil backend_net internal ist

Public / User Apps

Service Zweck Autoritativer Pfad URL / Zugang Abhaengigkeiten Datenpfade Backup / Restore Traefik Besonderheiten / TODOs
paperless-ngx Dokumentenmanagement apps/paperless/docker-compose.yml https://paperless.kaleschke.info PostgreSQL 17, Redis, Traefik /mnt/user/appdata/paperless-ngx/data, /mnt/user/documents/paperless, /mnt/user/documents/scans_inbox Tier 2, Borg + postgresql17-paperless.dump ja DB/Redis Secrets bleiben bewusst Stack ENV
paperless-gpt KI-Ergaenzung fuer Paperless apps/paperless-gpt/docker-compose.yml https://paperless-gpt.kaleschke.info Paperless API, LLM/Ollama, Traefik /mnt/user/appdata/paperless-gpt/data, /mnt/user/appdata/paperless-gpt/prompts Tier 2 ja + Authelia API Token als Stack ENV; OCR/LLM-Konfig bei Aenderungen pruefen
immich_server Foto-/Video-App apps/immich/docker-compose.yml https://immich.kaleschke.info Immich Postgres, Immich Redis, ML, Traefik /mnt/user/photos/immich, /mnt/user/photos/family_archive Tier 2, Borg + immich.dump ja native App-Auth; externes Fotoarchiv gemountet
immich_postgres Immich-Datenbank apps/immich/docker-compose.yml intern immich_default /mnt/user/appdata/immich_postgres, immich_postgres_password.txt Dump immich.dump nein nie ins frontend_net
immich_redis Immich Cache apps/immich/docker-compose.yml intern immich_default kein kritischer Pfad dokumentiert rebuildbar nein Architektur nennt anonymes Volume -> named volume als offenes Thema
immich_machine_learning Immich ML apps/immich/docker-compose.yml intern immich_default model-cache rebuildbar nein intern-only
mealie Rezeptverwaltung apps/mealie/docker-compose.yml https://mealie.kaleschke.info mealie-postgres, Traefik /mnt/user/appdata/mealie/data Tier 2, Borg + mealie.dump ja App + DB in internem Netz getrennt
mealie-postgres Mealie-Datenbank apps/mealie/docker-compose.yml intern mealie_internal /mnt/user/appdata/mealie/postgres, mealie_postgres_password.txt Dump mealie.dump nein interne DB
mail-archiver Mail-Archivierung apps/mail-archiver/docker-compose.yml https://mail.kaleschke.info PostgreSQL 17, Internet/IMAP, Traefik, Authelia /mnt/user/appdata/mailarchiver/data-protection-keys Tier 2, postgresql17-mailarchiver.dump ja + Authelia Hybrid-Dienst: frontend_net fuer Internet, backend_net fuer DB; App-eigene Auth bleibt zusaetzliche Schutzschicht
nextcloud Datei-/Cloud-Dienst apps/nextcloud/docker-compose.yml https://cloud.kaleschke.info eigene PostgreSQL, eigene Redis, Traefik /mnt/user/appdata/nextcloud/html, /mnt/user/documents/nextcloud-data Tier 2, nextcloud.dump + Share ja native App-Auth ohne zentrale ForwardAuth; WebDAV/CardDAV beachten
nextcloud-postgres Nextcloud-Datenbank apps/nextcloud/docker-compose.yml intern nextcloud_internal /mnt/user/appdata/nextcloud/postgres, nextcloud_postgres_password.txt nextcloud.dump, raw DB nicht primaerer Restore-Weg nein interne DB
nextcloud-redis Nextcloud Cache/Locking apps/nextcloud/docker-compose.yml intern nextcloud_internal /mnt/user/appdata/nextcloud/redis Teil von Nextcloud-Restore nein interne Redis
ntfy Push-Benachrichtigungen apps/ntfy/docker-compose.yml https://ntfy.kaleschke.info Traefik, upstream mobile push /mnt/user/appdata/ntfy Tier 2 ja NTFY_BEHIND_PROXY=true; Problem-Alerts gehen gebuendelt an homelab-alerts, optionale Erfolgsmeldungen an homelab-info
bentopdf PDF-Tooling / Ersatz fuer Stirling-PDF apps/bentopdf/docker-compose.yml https://pdf.kaleschke.info Traefik + Authelia keine kritische Persistenz im Compose Tier 3, rebuildbar ja + Authelia COOP/COEP per Middleware; fachliche Abnahme/Live-Status pruefen

Operations / Monitoring / Admin

Service Zweck Autoritativer Pfad URL / Zugang Abhaengigkeiten Datenpfade Backup / Restore Traefik Besonderheiten / TODOs
homepage Start-Dashboard apps/homepage/docker-compose.yml https://home.kaleschke.info Traefik, viele API Tokens /mnt/user/appdata/homepage, /mnt/user/appdata/homepage/images Tier 2 ja + Authelia laut Compose Authelia schuetzt die Domain ueber die 1FA-Wildcard-Regel; Docker socket im Recovery entfernt, Docker-Widgets erst wieder via dokumentierter Ausnahme oder Socket-Proxy
glance Homelab-Uebersicht / Status-Dashboard ops/glance/docker-compose.yml, ops/glance/config/glance.yml https://glance.kaleschke.info Traefik + Authelia, interne HTTP-Checks, Immich API, AdGuard API, Speedtest API, interner Docker-Socket-Proxy Repo-Konfiguration; keine kritische Persistenz Tier 3, rebuildbar ja + Authelia Zeigt aktive Dienste, Immich-Community-Widget, Internet-/DNS-/VPN-Monitore, AdGuard-DNS-Stats, Speedtest-Livewerte, Docker-Containergruppen, Server-Stats, Zeitfortschritt, Bookmarks und eine Infrastruktur-Seite; Docker-API nur ueber glance-docker-socket-proxy auf internem Netz
komodo-core GitOps UI/API/Stack-Manager ops/komodo/docker-compose.yml https://komodo.kaleschke.info Mongo, Gitea, Traefik /mnt/user/appdata/komodo/core, komodo_keys Tier 1 ja, native Auth keine pauschale Authelia-ForwardAuth; Gitea DNS override
komodo-mongo Komodo Datenbank ops/komodo/docker-compose.yml intern komodo_net /mnt/user/appdata/komodo/mongo, komodo_mongo_password.txt Tier 1, komodo-mongo.archive.gz nein Dump am 2026-05-04 bestaetigt; nach Major-Upgrades pruefen
komodo-periphery Komodo Host-Agent ops/komodo/docker-compose.yml intern Core -> Periphery Docker socket, /mnt/user/services, frontend_net, komodo_net /mnt/user/appdata/komodo/periphery, komodo_keys Tier 1 nein Docker-Socket-Ausnahme; /mnt/user/services Mount fuer Stack-Workspaces
borg-ui Borg Backup-/Restore UI ops/borg-ui/docker-compose.yml https://borg.kaleschke.info Traefik + Authelia, Borg repo credentials /mnt/user/appdata/borg-ui/data, /mnt/user/backups/borg/dumps, Restore-Ziel Tier 3 / Backup kritisch, borg-ui.sqlite ja + Authelia breite Mounts bewusst; /local/secrets im DR-Scope; Nextcloud-Daten werden read-only nach /local/nextcloud/data eingebunden
uptime-kuma Monitoring / Uptime Checks ops/uptime-kuma/docker-compose.yml https://uptime.kaleschke.info Traefik + Authelia /mnt/user/appdata/uptime-kuma Tier 3, uptime-kuma.sqlite.dump ja + Authelia Monitore nach Restore pruefen
glances System-/Container-Monitoring ops/glances/docker-compose.yml https://glances.kaleschke.info Docker socket, rootfs, Traefik + Authelia kein kritischer Zustand Tier 3, rebuildbar ja + Authelia Dokumentierte Host-Observability-Ausnahme: pid: host, /:/rootfs:ro, /var/run/docker.sock:/var/run/docker.sock:ro, /etc/os-release:/etc/os-release:ro; keine Appdaten ausserhalb /mnt/user/...
scrutiny Laufwerks-/SMART-Monitoring ops/scrutiny/docker-compose.yml https://scrutiny.kaleschke.info Device mounts, Traefik + Authelia /mnt/user/appdata/scrutiny/config, /mnt/user/appdata/scrutiny/influxdb Tier 3, Metrics nicht kritisch ja + Authelia Dokumentierte Host-Observability-Ausnahme: privileged: true, /run/udev:/run/udev:ro, /dev/sdb:/dev/sdb, /dev/sdc:/dev/sdc, /dev/nvme0n1:/dev/nvme0n1; keine Appdaten ausserhalb /mnt/user/...
speedtest-tracker Speedtest-Monitoring ops/speedtest/docker-compose.yml https://speedtest.kaleschke.info Traefik + Authelia /mnt/user/appdata/speedtest-tracker/config Tier 3, speedtest-tracker.sqlite.dump ja + Authelia APP_KEY, ADMIN_PASSWORD Stack ENV
filebrowser Datei-Browser fuer Documents/Photos/Projekte ops/filebrowser/docker-compose.yml https://files.kaleschke.info Traefik + Authelia /mnt/user/appdata/filebrowser/*, /mnt/user/documents, /mnt/user/photos, /mnt/user/projekte Tier 3, filebrowser.bolt.dump + Share ja + Authelia Breiter Appdata-Mount entfernt; Secrets und Traefik-Dynamic-Config sind nicht mehr ueber Filebrowser gemountet
code-server Web-Editor / Operations Workspace ops/code-server/docker-compose.yml https://code.kaleschke.info Traefik + Authelia /mnt/user/appdata/code-server, /mnt/user/services/dev Tier 3 ja + Authelia Passwort ueber LSIO FILE__PASSWORD; Workspaces beachten
grafana abgeloester Altstand fuer Grafana/InfluxDB ops/grafana-influxdb/docker-compose.yml https://grafana.kaleschke.info Traefik + Authelia, InfluxDB 3 Core /mnt/user/appdata/grafana, Grafana provisioning Tier 3, grafana.sqlite ja + Authelia Nicht parallel zum neuen monitoring/-Zielstack betreiben; bleibt vorerst als Rollback-/Migrationsreferenz
influxdb3-core abgeloester Altstand fuer Home-Assistant-Langzeitdaten ops/grafana-influxdb/docker-compose.yml LAN 8181 je INFLUXDB_BIND_IP, keine Public URL Grafana, Home Assistant Writer /mnt/user/appdata/influxdb3/data, /mnt/user/appdata/influxdb3/plugins Tier 3 nein Nach erfolgreicher Migration durch monitoring-influxdb3-core ersetzen; alten Datenpfad nicht blind loeschen
monitoring-grafana zentrale Observability-UI fuer Metriken, Logs und InfluxDB monitoring/docker-compose.yml https://monitoring.kaleschke.info Traefik + Authelia, Prometheus, Loki, InfluxDB 3 Core named volume grafana_data, Provisioning unter monitoring/grafana/provisioning, Dashboards unter monitoring/grafana/dashboards Tier 3, named volume ja + Authelia Admin-Passwort ueber monitoring_grafana_admin_password.txt; Zielbestand: Homelab / Availability, Homelab / Host Overview, Homelab / Containers + Logs, Traefik Official Standalone Dashboard; Dashboard-Importer ist optionales bootstrap-Profil fuer Traefik
monitoring-prometheus Metrik-Speicher fuer Homelab-Monitoring monitoring/docker-compose.yml, monitoring/prometheus/prometheus.yml, monitoring/prometheus/alerts.yml intern http://prometheus:9090 monitoring_net, node-exporter, cAdvisor, Traefik-Metrics, Blackbox Exporter, Alertmanager named volume prometheus_data Tier 3, transiente Metriken mit 30 Tagen Retention nein Scrapes: Prometheus, node-exporter, cAdvisor, Traefik :8082, blackbox-http; Prometheus-Regeln senden an Alertmanager und von dort nach ntfy
monitoring-alertmanager Alert-Routing fuer Prometheus-Regeln monitoring/docker-compose.yml, monitoring/alertmanager/alertmanager.yml intern :9093 Prometheus, ntfy Bridge named volume alertmanager_data Tier 3 nein sendet firing und resolved Alerts an monitoring-alertmanager-ntfy-bridge
monitoring-alertmanager-ntfy-bridge Alertmanager-Webhook nach ntfy Push monitoring/docker-compose.yml, monitoring/alertmanager-ntfy-bridge/bridge.py intern :8080 Alertmanager, https://ntfy.kaleschke.info/homelab-alerts kein kritischer Zustand rebuildbar nein formatiert Alertmanager JSON als ntfy Titel, Nachricht, Priority und Tags; keine Secrets
monitoring-blackbox-exporter HTTP-Erreichbarkeitspruefungen fuer Uptime-Kuma-Abloesung monitoring/docker-compose.yml, monitoring/blackbox/blackbox.yml intern :9115 Prometheus, externe HTTPS-Ziele kein kritischer Zustand rebuildbar nein Uptime Kuma erst nach sieben Tagen Parallelbetrieb und Grafana-Alerting-Paritaet stoppen
monitoring-loki Logspeicher fuer Monitoring-Stack monitoring/docker-compose.yml, monitoring/loki/loki-config.yml intern http://loki:3100 monitoring_net, Promtail, Grafana named volume loki_data Tier 3, transiente Logs mit 30 Tagen Retention nein Von bestehendem ops/loki getrennt; Doppelbetrieb bewusst pruefen
monitoring-promtail Docker-Log-Collector fuer Monitoring-Loki monitoring/docker-compose.yml, monitoring/promtail/promtail-config.yml intern Docker socket read-only, Docker json-file Logs, Loki named volume promtail_positions rebuildbar nein Dokumentierte Host-Observability-Ausnahme: /var/run/docker.sock:/var/run/docker.sock:ro und /var/lib/docker/containers:ro; keine Appdaten, nur Log-Discovery
monitoring-node-exporter Host-Metriken fuer Prometheus monitoring/docker-compose.yml intern :9100 Host /proc, /sys, / read-only, Prometheus kein kritischer Zustand rebuildbar nein Host-Observability-Ausnahme mit read-only Rootfs/Proc/Sys-Mounts
monitoring-cadvisor Container-Metriken fuer Prometheus monitoring/docker-compose.yml intern :8080 Docker/Host read-only Mounts, Prometheus kein kritischer Zustand rebuildbar nein Host-Observability-Ausnahme fuer Container-Metriken; keine direkten Ports
monitoring-influxdb3-core InfluxDB 3 Core fuer Home-Assistant-/Ecowitt-Langzeitdaten monitoring/docker-compose.yml LAN 8181 je INFLUXDB_BIND_IP, keine Public URL Monitoring-Grafana, Home Assistant Writer /mnt/user/appdata/influxdb3/data, /mnt/user/appdata/influxdb3/plugins Tier 3 nein LAN-only Host-Port-Ausnahme; user: "0" ist fuer den lokalen Object-Store-Pfad dokumentiert; uebernimmt den bisherigen InfluxDB-Daten-/Token-Katalog; 401 Unauthorized beim Curl ohne Token ist erwarteter Reachability-Test
loki abgeloester Altstand fuer Container-Logs ops/loki/docker-compose.yml, ops/loki/config/loki-config.yml intern http://loki:3100, keine Public URL backend_net, Grafana /mnt/user/appdata/loki/config, /mnt/user/appdata/loki/data Tier 3, transiente Logs mit 30 Tagen Retention nein Durch monitoring-loki ersetzen; nicht parallel betreiben, ausser bewusst zur Migration
alloy abgeloester Altstand fuer Docker-Log-Collection ops/loki/docker-compose.yml, ops/loki/config/config.alloy intern Docker socket read-only, Loki, backend_net /mnt/user/appdata/alloy/config, /mnt/user/appdata/alloy/data rebuildbar nein Durch monitoring-promtail ersetzen; Socket-Ausnahme bleibt nur fuer aktive Collector relevant
hermes-gateway Hermes Agent Gateway/API intern ops/hermes-agent/docker-compose.yml intern 8642 auf hermes_net SSH Runner (VM 192.168.178.143), LLM Provider, optional Home Assistant /mnt/user/appdata/hermes-agent/data, SSH key path Tier 3, Borg/Share nein NAS-Stack bleibt deaktiviert, solange die separate Hermes-VM/Runner-Seite nicht wiederhergestellt ist; kein Docker-Socket
hermes-dashboard Hermes Dashboard ops/hermes-agent/docker-compose.yml https://hermes.kaleschke.info via ${HERMES_DASHBOARD_HOST} hermes-gateway, Traefik + Authelia shared read-only data mount Tier 3, Borg/Share ja + Authelia Compose-Profil dashboard; aktuell VM-seitig offen, nicht Teil des NAS-Finalstarts

Host Operations

Service Zweck Autoritativer Pfad URL / Zugang Abhaengigkeiten Datenpfade Backup / Restore Traefik Besonderheiten / TODOs
posture-check Host-Posture-Audit fuer Filesystem, Mover-Drift, NVMe-SMART und Fuellstand services/posture-check/posture-check.sh Unraid User-Script / Cron / Borg Pre-Hook findmnt, df, nvme, optional curl fuer ntfy /mnt/user/services/posture-check/last.json Repo-Skript + letzter JSON-Status nein Muss auf dem Unraid-Host bei Boot, stuendlich und vor Borg laufen; ALLOW_DISK1_NTFS=1 ist die dokumentierte Uebergangsausnahme bis Disk1-Migration Phase 2 und erzeugt fuer ntfs3/fuseblk keine ntfy-Warnung; Warning/Critical alarmieren via ntfy nur bei neuer Ursache oder nach ALERT_REPEAT_SECONDS
docker-critical-events Live-Alarmierung fuer Docker die/oom/kill Events services/posture-check/docker-critical-events.sh Unraid User-Script / Hintergrundprozess Docker CLI, ntfy /mnt/user/services/posture-check/docker-critical-events-last.log Repo-Skript + letzter Event-Log nein Optional als Unraid User-Script at array start starten; sendet nach homelab-alerts

Backup- und Restore-Hinweise

  • Tier-1-Dienste stehen in docs/RESTORE_MATRIX.md und docs/DISASTER_RECOVERY.md.
  • Dump-Erzeugung erfolgt host-seitig ueber ops/borg-ui/scripts/pre-backup-dumps.sh.
  • Dump-Ziel: /mnt/user/backups/borg/dumps/latest.
  • Raw Live-DB-Pfade sind meist nicht der primaere Restore-Weg; bevorzugt werden Dumps plus Appdaten.
  • Borg UI nimmt bewusst /local/secrets in den DR-Scope auf.

Logging-Resilienz

  • Docker-Rohlogs bleiben die erste Fallback-Ebene: docker logs <container> funktioniert unabhaengig von Loki/Grafana.
  • Loki-Chunks liegen unter /mnt/user/appdata/loki/data und koennen durch Neustart des internen Loki-Stacks wieder genutzt werden.
  • Host-Logs wie /var/log/syslog und dmesg bleiben die Quelle fuer Kernel-, OOM- und Docker-Daemon-Ereignisse.
  • Critical-Events werden zusaetzlich ueber ntfy extern sichtbar, wenn services/posture-check/docker-critical-events.sh als Host-Watcher laeuft.
  • Docker json-file Logs werden auf Unraid nativ ueber /boot/config/docker.cfg begrenzt. Aktiver Host-Stand: DOCKER_LOG_ROTATION="yes", DOCKER_LOG_SIZE="50m", DOCKER_LOG_FILES="1". Keine zusaetzliche /etc/docker/daemon.json setzen, weil sie mit Unraids Docker-Startflags kollidieren kann.

Bekannte offene Fragen

  • Authelia Repo-Baseline, Host-Config und Compose-Middlewares sollten bei Auth-Aenderungen explizit abgeglichen werden.
  • Filebrowser-Mounts sind breit und bewusst, aber bei zukuenftigen Hardening-Sprints Kandidaten.
  • Scrutiny bleibt privilegiert; nur mit klarer Begruendung aendern.
  • BentoPDF ersetzt Stirling-PDF produktiv. Hermes ist VM-seitig offen und auf dem NAS bewusst nicht gestartet.