Files
homelab-infra/docs/archive/2026-05/CODEX_JELLYFIN_REMOVAL_2026-05-23.md
T
2026-05-31 22:53:10 +02:00

9.4 KiB

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:

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:

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

     - 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

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

    | `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

### 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:

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

pwsh ops/policy-checks/check_repo.ps1

Akzeptanzkriterium: 0 Critical, keine neuen Warnings (vorher: 4 dokumentierte Warnings, soll danach gleich bleiben).

Commit:

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

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 <commit-sha> 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