diff --git a/HOMELAB_ARCHITECTURE_MASTER_V2.md b/HOMELAB_ARCHITECTURE_MASTER_V2.md index 71a2b33..8a63533 100644 --- a/HOMELAB_ARCHITECTURE_MASTER_V2.md +++ b/HOMELAB_ARCHITECTURE_MASTER_V2.md @@ -105,7 +105,7 @@ Internet traefik (80/443) │ └── frontend_net - ├── öffentliche Apps (vaultwarden, mealie, paperless, immich, gitea, ntfy, mail-archiver, nextcloud, jellyfin) + ├── öffentliche Apps (vaultwarden, mealie, paperless, immich, gitea, ntfy, mail-archiver, nextcloud) ├── geschützte UIs mit Middleware (homepage, glance, paperless-gpt, uptime-kuma, filebrowser, scrutiny, code-server, borg-ui, glances, speedtest, bentopdf, grafana) ├── Admin-UI mit nativer Auth (komodo) └── Dienste mit Internetbedarf ohne öffentliche UI (ddns-updater) @@ -149,7 +149,6 @@ Diese Dienste sind über echte `*.kaleschke.info`-Domains erreichbar: - `gitea` (Web) — git.kaleschke.info - `immich_server` — immich.kaleschke.info - `nextcloud` — cloud.kaleschke.info -- `jellyfin` — jellyfin.kaleschke.info ### 4.2 Nicht öffentlich / nur Tailscale oder Traefik + Middleware Diese Dienste sind **keine Public Apps**: @@ -279,7 +278,6 @@ Legende Status: | `immich_server` | ✅ | `immich_default`, `frontend_net` | Traefik | aktiv via `immich.kaleschke.info` | — | | `immich_machine_learning` | ✅ | `immich_default` | intern | bleibt intern | — | | `nextcloud` | ✅ | `frontend_net`, `nextcloud_internal` | Traefik | aktiv via `cloud.kaleschke.info`, nativer Nextcloud-Login, WebDAV/CardDAV faehig | CalDAV/CardDAV-Redirect via Traefik-Labels | -| `jellyfin` | ✅ | `frontend_net` | Traefik | aktiv via `jellyfin.kaleschke.info`, native Jellyfin-Auth, Media-/Photos-Mounts read-only | — | | `plex` | ✅ | `host` | Plex native / Host-Netz | Compose-Stack unter `host-services/plex/`; Host-Netz bleibt fuer Discovery / Plex GDM dokumentierte Ausnahme | — | ### 7.5 Admin / Operations @@ -336,6 +334,7 @@ Legende Status: | `PortainerCE` | 2026-03-29 | abgeschaltet; Komodo ist alleiniger Stack-Manager | | `beszel` | nicht dokumentiert | bereits entfernt; nicht mehr Teil des Zielbilds | | `beszel-agent` | nicht dokumentiert | bereits entfernt; nicht mehr Teil des Zielbilds | +| `jellyfin` | 2026-05-25 | doppelter Medienserver neben Plex; Plex bleibt einziger Medienserver | --- diff --git a/apps/jellyfin/docker-compose.yml b/apps/jellyfin/docker-compose.yml deleted file mode 100644 index 61109e5..0000000 --- a/apps/jellyfin/docker-compose.yml +++ /dev/null @@ -1,32 +0,0 @@ -services: - jellyfin: - image: jellyfin/jellyfin:10.11.8@sha256:1694ff069f0c9dafb283c36765175606866769f5d72f2ed56b6a0f1be922fc37 - container_name: jellyfin - restart: unless-stopped - environment: - TZ: Europe/Berlin - JELLYFIN_PublishedServerUrl: https://jellyfin.kaleschke.info - dns: - - 1.1.1.1 - volumes: - - /mnt/user/appdata/jellyfin/config:/config - - /mnt/user/appdata/jellyfin/cache:/cache - - /mnt/user/media:/media:ro - - /mnt/user/photos:/photos:ro - networks: - - frontend_net - security_opt: - - no-new-privileges:true - labels: - - traefik.enable=true - - traefik.docker.network=frontend_net - - traefik.http.routers.jellyfin.rule=Host(`jellyfin.kaleschke.info`) - - traefik.http.routers.jellyfin.entrypoints=websecure - - traefik.http.routers.jellyfin.tls=true - - traefik.http.routers.jellyfin.tls.certresolver=le - - traefik.http.routers.jellyfin.middlewares=secure-headers@file - - traefik.http.services.jellyfin.loadbalancer.server.port=8096 - -networks: - frontend_net: - external: true diff --git a/docs/MIGRATION_LOG.md b/docs/MIGRATION_LOG.md index 9cf74ca..c43930b 100644 --- a/docs/MIGRATION_LOG.md +++ b/docs/MIGRATION_LOG.md @@ -20,6 +20,10 @@ Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ab - Erwartete Host-Secret-Datei `/mnt/user/appdata/secrets/borg_repo_passphrase.txt` aus der bestehenden Borg-UI-Repo-Konfiguration erzeugt, mit `root:root` und Modus `600` gesichert und per `borg info` gegen das Hetzner-Borg-Repo verifiziert. Analoge Offline-Hinterlegung bleibt bewusste Operator-Aufgabe; Secret-Wert wurde nicht ausgegeben oder dokumentiert. +### 2026-05-25 - Jellyfin aus Zielbild entfernt + +- Plex-Smoke-Test erfolgreich (`/identity` HTTP 200, Container healthy, `/data/movies` und `/photos` sichtbar). Jellyfin wird repo-seitig entfernt, aus Authelia-Baseline und Zielbild-Doku ausgetragen und nach erfolgreichem Push live gestoppt/archiviert; Plex bleibt einziger Medienserver. + ### 2026-05-25 - Externer Repo-Mirror eingerichtet - Gitea erlaubt fuer Repo-Migrationen und Mirror-Targets gezielt `github.com` und nutzt explizite externe DNS-Resolver. `Micha/homelab-infra` spiegelt nun als privater GitHub-Push-Mirror nach `michaelkaleschke-spec/homelab-infra`; erster manueller Sync erfolgreich, Gitea `push_mirror.last_error` leer. Token-Werte bleiben ausschliesslich in Gitea/GitHub und werden nicht dokumentiert. diff --git a/docs/REPO_MAP.md b/docs/REPO_MAP.md index 610ade3..12e6170 100644 --- a/docs/REPO_MAP.md +++ b/docs/REPO_MAP.md @@ -75,7 +75,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | 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:v1.12.3@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` | -| Jellyfin | `apps/jellyfin/docker-compose.yml` | `jellyfin` -> `jellyfin/jellyfin:10.11.8@sha256:...` | `jellyfin.kaleschke.info` | `frontend_net` | keine | native Jellyfin-Auth; `/mnt/user/media` und `/mnt/user/photos` read-only | | 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 | @@ -143,7 +142,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | `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 | -| `jellyfin.kaleschke.info` | Jellyfin | 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 | @@ -192,7 +190,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | 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` | -| Jellyfin | `/mnt/user/appdata/jellyfin/config`, `/mnt/user/appdata/jellyfin/cache`, `/mnt/user/media`, `/mnt/user/photos` | | Plex | `/mnt/user/appdata/plex/config`, `/mnt/user/appdata/plex/transcode`, `/mnt/user/media`, `/mnt/user/photos` | | Homepage | `/mnt/user/appdata/homepage`, `/mnt/user/appdata/homepage/images`, Docker socket read-only | | ntfy | `/mnt/user/appdata/ntfy` | diff --git a/docs/SERVICE_CATALOG.md b/docs/SERVICE_CATALOG.md index f305c6f..1c1995e 100644 --- a/docs/SERVICE_CATALOG.md +++ b/docs/SERVICE_CATALOG.md @@ -47,7 +47,6 @@ Secret-Werte sind nicht enthalten. Es werden nur Secret-Namen, Env-Key-Namen und | `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 | -| `jellyfin` | Medienserver | `apps/jellyfin/docker-compose.yml` | `https://jellyfin.kaleschke.info` | Traefik, `frontend_net` | `/mnt/user/appdata/jellyfin/config`, `/mnt/user/appdata/jellyfin/cache`, `/mnt/user/media`, `/mnt/user/photos` | Tier 2, Appdata + Medienpfade im Borg-/Share-Scope | ja | native Jellyfin-Auth; Medien- und Fotomounts read-only; keine direkten Host-Ports | | `plex` | Medienserver mit LAN-/Client-Discovery | `host-services/plex/docker-compose.yml` | Plex native / LAN / Remote je Plex-Konfiguration | Host-Netz | `/mnt/user/appdata/plex/config`, `/mnt/user/appdata/plex/transcode`, `/mnt/user/media`, `/mnt/user/photos` | Tier 2, Appdata + Medienpfade im Borg-/Share-Scope | nein | Repo-Compose-Stack; `network_mode: host` bleibt dokumentierte Discovery-Ausnahme, kein Traefik-Stack | | `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 | diff --git a/ops/policy-checks/exceptions.json b/ops/policy-checks/exceptions.json index d55f8e0..9d08177 100644 --- a/ops/policy-checks/exceptions.json +++ b/ops/policy-checks/exceptions.json @@ -4,7 +4,6 @@ "gitea", "immich-server", "immich_server", - "jellyfin", "komodo-core", "mealie", "nextcloud", diff --git a/security/authelia/configuration.yml b/security/authelia/configuration.yml index 2b7e3a7..88b3cc8 100644 --- a/security/authelia/configuration.yml +++ b/security/authelia/configuration.yml @@ -39,7 +39,6 @@ access_control: - vault.kaleschke.info - ntfy.kaleschke.info - git.kaleschke.info - - jellyfin.kaleschke.info policy: bypass # Admin-Dienste - 2FA erforderlich