# Codex-Prompt: Jellyfin entfernen, Plex bleibt > **Status (Stand 2026-05-30):** Auftrag ausgefuehrt. Jellyfin wurde 2026-05-25 aus Repo, Komodo, Traefik-Routing, Authelia-ACL und Appdata-Live-Pfad entfernt (Service-Removal-Checkliste in `docs/WORKFLOW.md`, MIGRATION_LOG-Eintrag dort). Datei bleibt im Repo als **Codex-Removal-Pattern** fuer kuenftige Stack-Removals (z.B. Hermes nach Review-Deadline 2026-07-25 oder bei BentoPDF/paperless-gpt-Folgeentscheidung). Inhaltlich nicht mehr aendern — als Vorlage referenzieren und pro Anwendung neu instanzieren. Stand: 2026-05-23 Ausloeser: Operator-Entscheidung "Plex bleibt, Jellyfin weg". Bezug: `docs/archive/2026-05/STRATEGISCHE_BEWERTUNG_2026-05-23.md` Block 9 Quick Wins. Du hast Vollzugriff auf `G:\Gitea_Clone\homelab-infra`, Gitea-Push, Komodo, und SSH auf Unraid `Kallilabcore`. ## Lies zuerst 1. `CLAUDE.md` 2. `HOMELAB_ARCHITECTURE_MASTER_V2.md` Abschnitt 7.4 und 7.8 3. `docs/WORKFLOW.md` 4. `docs/ROLLBACK.md` 5. `apps/jellyfin/docker-compose.yml` 6. `security/authelia/configuration.yml` (Access-Control-Block) 7. `docs/SERVICE_CATALOG.md`, `docs/REPO_MAP.md`, `docs/MIGRATION_LOG.md` ## Ziel Jellyfin ist vollstaendig aus dem Repo, Komodo, Traefik-Routing und Authelia-ACL entfernt. Plex laeuft unveraendert weiter. Medien-/Foto-Mounts unter `/mnt/user/media` und `/mnt/user/photos` bleiben unberuehrt. Domain `jellyfin.kaleschke.info` antwortet nicht mehr ueber Traefik. ## Wichtige Vorabinformation - `/mnt/user/appdata/jellyfin/{config,cache}` ist **nicht** im Borg-Scope (`ops/borg-ui/all-important-sources.txt`). Watch-History, User-Settings und Metadaten-Cache sind danach weg. Das ist akzeptabel, weil Plex die Nutzungsdaten ohnehin separat fuehrt. - Plex teilt sich `/mnt/user/media:ro` und `/mnt/user/photos:ro` mit Jellyfin — Datenpfad bleibt unangetastet. - Authelia-Eintrag `jellyfin.kaleschke.info` steht unter `policy: bypass` in `security/authelia/configuration.yml` Zeile 42. Die `configuration.yml` ist Repo-Baseline und muss laut `docs/AI_CONTEXT.md` manuell auf den Host gemerged werden. - Jellyfin hat **keinen** Eintrag in `monitoring/blackbox/blackbox.yml`, `ops/glance/config/glance.yml`, `apps/homepage/docker-compose.yml`. Die Homepage-Service-Cards liegen hostseitig unter `/mnt/user/appdata/homepage/config/services.yaml` — dort moeglicherweise ein Eintrag, vor Ort pruefen. ## Reihenfolge ### P0 — Plex-Tauglichkeit verifizieren (vor jeglichem Loeschen) Smoke-Test auf dem Host: ```bash curl -fsS -o /dev/null -w "%{http_code}\n" http://192.168.178.58:32400/identity docker exec plex test -d /data/Filme || echo "Filme nicht erreichbar" docker exec plex test -d /photos || echo "Photos nicht erreichbar" ``` Akzeptanzkriterium: Plex antwortet mit `200`, beide Medien-Pfade sind im Plex-Container sichtbar, Plex zeigt in seiner Web-UI alle erwarteten Bibliotheken. **Wenn nicht erfuellt: abbrechen und Operator fragen.** ### P1 — Jellyfin Stack in Komodo stoppen (nicht loeschen) In Komodo Web-UI Stack `jellyfin` `Stop` ausfuehren (nicht `Destroy`). Damit ist der Container weg, Stack-Definition und Workspace bleiben — Rollback per `Start` moeglich. Akzeptanzkriterium: ```bash docker ps -a --filter name=jellyfin --format "{{.Names}}\t{{.Status}}" ``` zeigt entweder keine Zeile oder `Exited`. ### P2 — Authelia ACL um Jellyfin-Bypass bereinigen Datei: `security/authelia/configuration.yml` ```diff - domain: - immich.kaleschke.info - paperless.kaleschke.info - mealie.kaleschke.info - vault.kaleschke.info - ntfy.kaleschke.info - git.kaleschke.info - - jellyfin.kaleschke.info policy: bypass ``` Kein anderer Authelia-Eintrag referenziert Jellyfin. Wildcard `*.kaleschke.info` mit `policy: one_factor` greift fuer geloeschte Domains nicht, weil Traefik die Route nicht mehr kennt. **Manueller Host-Sync danach Pflicht** (`docs/AI_CONTEXT.md`, Workflow): die geaenderte `configuration.yml` muss auf `/mnt/user/appdata/authelia/config/configuration.yml` gemerged werden (OIDC-/Secret-Block hostseitig erhalten). Danach `docker exec authelia authelia validate-config -c /config/configuration.yml` und Stack-Restart. ### P3 — Compose-Stack aus Repo entfernen ```bash git rm -r apps/jellyfin/ ``` Akzeptanzkriterium: `apps/jellyfin/` existiert nicht mehr; `git status --short` zeigt `D apps/jellyfin/docker-compose.yml`. ### P4 — Doku synchronisieren **`HOMELAB_ARCHITECTURE_MASTER_V2.md`:** - Abschnitt 3.2 Diagramm: `jellyfin` aus oeffentliche-Apps-Zeile entfernen. - Abschnitt 4.1 "Oeffentlich ueber Traefik": Zeile `- jellyfin — jellyfin.kaleschke.info` entfernen. - Abschnitt 7.4 Tabelle "Produktive Apps": Zeile `jellyfin` entfernen. - Abschnitt 7.8 "Entfernte Container": neue Zeile ```text | `jellyfin` | 2026-05-23 | doppelter Medienserver neben Plex; Plex bleibt einziger Medienserver | ``` **`docs/SERVICE_CATALOG.md`:** - Block "Public / User Apps": Jellyfin-Zeile entfernen. **`docs/REPO_MAP.md`:** - Abschnitt "Apps"-Tabelle: Jellyfin-Zeile entfernen. - Abschnitt "Traefik Hosts": `jellyfin.kaleschke.info`-Zeile entfernen. - Abschnitt "Volumes und Datenpfade": Jellyfin-Zeile entfernen. **`docs/MIGRATION_LOG.md`:** neuen Eintrag anhaengen ```text ### Jellyfin entfernt (2026-05-23) - Operator-Entscheidung: Plex bleibt einziger Medienserver. - Compose-Stack `apps/jellyfin/` aus Repo entfernt. - Authelia-ACL bereinigt (`jellyfin.kaleschke.info` aus `bypass`-Liste raus), Host-Config gemerged. - Komodo-Stack `jellyfin` gestoppt; Stack-Eintrag und Webhook bei Abschluss von Schritt P7 entfernt. - Appdata unter `/mnt/user/appdata/jellyfin/` nach `/mnt/user/appdata/_archive/jellyfin-removed-2026-05-23/` verschoben (siehe Schritt P5). - DNS-Eintrag `jellyfin.kaleschke.info` in Cloudflare belassen, kann beim naechsten DNS-Cleanup mit entfernt werden. ``` ### P5 — Appdata archivieren statt loeschen Auf dem Host: ```bash mkdir -p /mnt/user/appdata/_archive mv /mnt/user/appdata/jellyfin /mnt/user/appdata/_archive/jellyfin-removed-2026-05-23 ``` Akzeptanzkriterium: `/mnt/user/appdata/jellyfin` existiert nicht mehr, `/mnt/user/appdata/_archive/jellyfin-removed-2026-05-23` enthaelt `config/` und `cache/`. **Nicht endgueltig loeschen** vor mindestens 14 Tagen Plex-Stabilitaet. ### P6 — Policy-Check + Commit ```powershell pwsh ops/policy-checks/check_repo.ps1 ``` Akzeptanzkriterium: 0 Critical, keine neuen Warnings (vorher: 4 dokumentierte Warnings, soll danach gleich bleiben). Commit: ```bash git add -A git commit -m "Remove Jellyfin stack; Plex remains sole media server" git push origin master ``` ### P7 — Komodo-Stack-Eintrag und Webhook entfernen Nach erfolgreichem Push und gruener Komodo-Reaktion auf restliche Stacks: - In Komodo: Stack `jellyfin` `Destroy` (Workspace `/mnt/user/services/stacks/jellyfin/` entfernen). - In Gitea: Webhook-Eintrag fuer Komodo-Stack-ID `jellyfin` entfernen. Akzeptanzkriterium: `ls /mnt/user/services/stacks/ | grep jellyfin` ist leer; Gitea-Webhook-Liste fuer `Micha/homelab-infra` enthaelt keinen Jellyfin-Eintrag mehr. ### P8 — Smoke-Test final ```bash curl -fsS -o /dev/null -w "%{http_code}\n" https://jellyfin.kaleschke.info/ docker ps --filter name=jellyfin --format "{{.Names}}" ss -ltnp | grep 8096 || echo "Port 8096 frei" ``` Erwartung: - `https://jellyfin.kaleschke.info/` antwortet `404` (Traefik kennt die Route nicht mehr) oder Cert-Fehler je nach Cache. - Kein laufender `jellyfin`-Container. - Port `8096` nicht belegt (Jellyfin nutzte nur Container-Port, sollte sowieso frei sein). - Authelia-Login fuer Admin-Domains (`uptime`, `files`, `scrutiny`) funktioniert weiterhin — Bypass-Liste-Aenderung darf 2FA-Domains nicht angreifen. ## Rollback (bis Schritt P5 einschliesslich) - Git: `git revert ` und push. Komodo deployt Jellyfin neu, sobald Stack in Komodo wieder existiert. - Appdata: `mv /mnt/user/appdata/_archive/jellyfin-removed-2026-05-23 /mnt/user/appdata/jellyfin`. - Authelia-ACL: Bypass-Eintrag wieder rein, Host-Sync, Authelia-Restart. Ab Schritt P7 (Komodo Destroy + Webhook weg) ist Rollback nur per Neuanlegen des Komodo-Stacks moeglich. ## Regeln (aus CLAUDE.md, nicht verhandelbar) - Secrets nie im Klartext ausgeben. - Keine Aenderungen direkt in Komodo, nur ueber Git → Push → Komodo. **Ausnahme:** Schritt P1 (`Stop`) und P7 (`Destroy`) sind explizit Komodo-Aktionen nach erfolgreichem Repo-Stand. - Kein `push --force`, kein blindes Loeschen unter `/mnt/user/{appdata,documents,photos,services,backups}` — Appdata wird in `_archive/` verschoben, nicht entfernt. - Working-Tree-Status nur aus `git status --short` ableiten, nie aus `git diff` ueber Linux-Mount. - Traefik dynamic config wird nicht von Komodo deployed — fuer diesen Auftrag nicht relevant, weil Jellyfin nur per Docker-Labels gerouteted war. - Nicht anfassen: Plex-Stack, Medien-/Foto-Mounts, alle anderen Apps. - Wenn zwei Reparaturversuche scheitern: stoppen, `docs/GITOPS_DRIFT_RUNBOOK.md` Pflichtmatrix, Operator fragen. ## Arbeitsmodus pro Schritt Lesen → minimal aendern → `ops/policy-checks/check_repo.ps1` lokal (nur P6) → Commit → Push → Komodo-Reaktion + Smoke-Test → Eintrag in `docs/MIGRATION_LOG.md`. ## Fertig Wenn alle 8 Schritte abgehakt sind: kurze Erfolgsmeldung an Operator mit: - Commit-SHA des Removal-Commits - Bestaetigung Plex weiterhin gruen - Bestaetigung Authelia validate-config gruen - Bestaetigung Komodo-Stack und Webhook entfernt - Pfad zum Appdata-Archiv und Erinnerung, dass `_archive/jellyfin-removed-2026-05-23/` nach 14 Tagen Plex-Stabilitaet entfernt werden darf