231 lines
19 KiB
Markdown
231 lines
19 KiB
Markdown
# Repository Map
|
|
|
|
Stand: 2026-05-04
|
|
|
|
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 |
|
|
| `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 und Smoke-Tests je Dienst |
|
|
| `docs/ROLLBACK.md` | Rueckweg 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 |
|
|
| `ops/grafana-influxdb/provisioning/datasources/influxdb.yml` | Grafana Datasource Provisioning fuer InfluxDB 3 Core |
|
|
| `ops/borg-ui/scripts/pre-backup-dumps.sh` | Host-seitiges Dump-Skript fuer PostgreSQL, Mealie, Immich und Komodo Mongo |
|
|
| `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 |
|
|
| `ops/grafana-influxdb/stack.env.example` | `INFLUXDB_BIND_IP` Default `127.0.0.1`; auf Unraid 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 |
|
|
| Homepage | `apps/homepage/docker-compose.yml` | `homepage` -> `ghcr.io/gethomepage/homepage:latest@sha256:...` | `home.kaleschke.info` | `frontend_net` | keine | Docker-Socket read-only fuer Widgets; viele `HOMEPAGE_VAR_*` Env-Keys |
|
|
| 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 |
|
|
| Authelia | `security/authelia/docker-compose.yml` | `authelia` -> `authelia/authelia:latest@sha256:...` | `auth.kaleschke.info` | `frontend_net`, `backend_net` | keine | PostgreSQL 17 Storage, 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 17 | `infra/postgresql17/docker-compose.yml` | `postgresql17` -> `postgres:17.9@sha256:...` | keine | `backend_net` | keine | shared DB-Cluster |
|
|
| Redis | `infra/redis/docker-compose.yml` | `Redis` -> `redis:7-alpine` | keine | `backend_net` | keine | shared Cache, 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`, `8082:80/tcp` | Unbound in `dns_net`; direkte Ports sind 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 |
|
|
|---|---|---|---|---|---|---|
|
|
| Backrest | `ops/backrest/docker-compose.yml` | `backrest` -> `ghcr.io/garethgeorge/backrest:latest@sha256:...` | `backrest.kaleschke.info` | `frontend_net`, `backend_net` | keine | breite Backup-Mounts, SSH/Repo-Creds im Appdata |
|
|
| 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:latest@sha256:...` | `code.kaleschke.info` | `frontend_net` | keine | Passwort-Datei, Workspace-Mounts |
|
|
| Filebrowser | `ops/filebrowser/docker-compose.yml` | `filebrowser` -> `filebrowser/filebrowser:latest@sha256:...` | `files.kaleschke.info` | `frontend_net` | keine | Appdata-Mount, Admin-UI hinter Authelia |
|
|
| Glances | `ops/glances/docker-compose.yml` | `glances` -> `nicolargo/glances:latest-full@sha256:...` | `glances.kaleschke.info` | `frontend_net` | keine | Rootfs/Docker-Socket fuer Monitoring |
|
|
| Grafana/InfluxDB | `ops/grafana-influxdb/docker-compose.yml` | `grafana`, `influxdb3-core` | `grafana.kaleschke.info` | `frontend_net`, `grafana_influx_internal`, `grafana_influx_lan` | `influxdb3-core`: `${INFLUXDB_BIND_IP:-127.0.0.1}:8181:8181` | InfluxDB LAN-only fuer Home Assistant; Grafana datasource token; beide Container laufen aktuell als `user: "0"` |
|
|
| 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:latest@sha256:...` | `speedtest.kaleschke.info` | `frontend_net` | keine | App key/admin env, SQLite/config path |
|
|
| Uptime Kuma | `ops/uptime-kuma/docker-compose.yml` | `UptimeKuma` -> `louislam/uptime-kuma:1@sha256:...` | `uptime.kaleschke.info` | `frontend_net` | keine | Monitor-State in Appdata |
|
|
|
|
### 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 |
|
|
| `backrest.kaleschke.info` | Backrest | Traefik + Authelia |
|
|
| `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 |
|
|
| `glances.kaleschke.info` | Glances | Traefik + Authelia |
|
|
| `grafana.kaleschke.info` | Grafana | Traefik + Authelia |
|
|
| `hermes.kaleschke.info` | Hermes Dashboard | Traefik + Authelia |
|
|
| `home.kaleschke.info` | Homepage | Traefik + Authelia; faellt in Authelia unter die 1FA-Wildcard-Regel |
|
|
| `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 |
|
|
| `mealie.kaleschke.info` | Mealie | Traefik |
|
|
| `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 |
|
|
| `uptime.kaleschke.info` | Uptime Kuma | 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 17, Redis, 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 | Mealie und Mealie Postgres |
|
|
| `nextcloud_internal` | Compose-intern | Nextcloud, Nextcloud Postgres, Nextcloud Redis |
|
|
| `grafana_influx_internal` | Compose-intern, `internal: true` | Grafana und InfluxDB |
|
|
| `grafana_influx_lan` | Compose-intern bridge | InfluxDB Host-Port-Publishing fuer LAN Writer |
|
|
| `komodo_net` | Compose-intern, `internal: true` | Komodo Core, Mongo, Periphery |
|
|
| `hermes_net` | Compose-intern bridge | Hermes Gateway/Dashboard |
|
|
| `host` | Host-Netz | Tailscale; Plex historisch ausserhalb Repo |
|
|
|
|
## 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 17 | `/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`, `model-cache` |
|
|
| Mealie | `/mnt/user/appdata/mealie/data`, `/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/postgres`, `/mnt/user/appdata/nextcloud/redis` |
|
|
| Homepage | `/mnt/user/appdata/homepage`, `/mnt/user/appdata/homepage/images`, Docker socket read-only |
|
|
| 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` |
|
|
| Backrest | `/mnt/user/appdata/backrest/*`, broad `/mnt/user/...` source mounts, remote repo mount |
|
|
| 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`, Homepage production mount |
|
|
| Filebrowser | `/mnt/user/appdata`, Filebrowser database/config paths |
|
|
| Glances | `/`, Docker socket, `/etc/os-release` |
|
|
| Scrutiny | `/mnt/user/appdata/scrutiny/*`, `/run/udev`, selected `/dev/...` disks |
|
|
| Speedtest | `/mnt/user/appdata/speedtest-tracker/config` |
|
|
| Uptime Kuma | `/mnt/user/appdata/uptime-kuma` |
|
|
| Grafana/InfluxDB | `/mnt/user/appdata/grafana`, Grafana provisioning, `/mnt/user/appdata/influxdb3/data`, `/mnt/user/appdata/influxdb3/plugins` |
|
|
| 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 17 | `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 |
|
|
| Homepage | viele `HOMEPAGE_VAR_*` Stack ENV Keys fuer Tokens/Logins |
|
|
| Speedtest | `APP_KEY`, `ADMIN_PASSWORD` als Stack ENV |
|
|
| Nextcloud | Admin User, Admin Password, Postgres Password via Secret-Dateien |
|
|
| Komodo | `KOMODO_SECRET_KEY`, `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 |
|
|
| Grafana/InfluxDB | Grafana Admin Password, InfluxDB Admin Token JSON, Grafana Datasource Token |
|
|
|
|
## 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` |
|
|
|
|
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.
|
|
- 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.
|
|
- `apps/mealie` nutzt in Compose `mealie_internal`; Architektur-Doku nennt teils `mealie_mealie_internal`. Laufzeitnamen koennen durch Compose-Projektpraefixe abweichen.
|
|
- `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; Redis-Caches bleiben bewusst ohne Digest-Pin.
|
|
- `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.
|
|
- `grafana` und `influxdb3-core` laufen 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-Media-Server` ist als historischer Host-Sonderfall dokumentiert, aber nicht als Repo-Compose-Stack enthalten.
|
|
- BentoPDF kann je nach Live-Stand vorbereitet statt produktiv sein; Hermes Dashboard ist produktiv unter `hermes.kaleschke.info`.
|