The three notes from 2026-05-23 had been sitting untracked in docs/ for a week. Variante A from today's review: keep them in docs/ with explicit status banners and reference them from REPO_MAP.md, so they stop being silent roommates and become discoverable. - docs/STRATEGISCHE_BEWERTUNG_2026-05-23.md: historical baseline that kicked off the 2026-05-25 audit cycle. Permanent audit anchor and "where we stood on 2026-05-23" snapshot. Do not edit further. - docs/CODEX_KONSOLIDIERUNG_2026-05-23.md: first Codex prompt for the audit cycle, content worked through; kept as a Codex-prompt template for future consolidation sweeps. - docs/CODEX_JELLYFIN_REMOVAL_2026-05-23.md: Codex removal pattern, task executed 2026-05-25; kept as a template for future stack removals (Hermes review 2026-07-25, possibly BentoPDF / paperless-gpt follow-ups). REPO_MAP.md "Wichtige Dokumente" now lists all three with one-line purpose plus the F-19 prep doc committed earlier today. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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/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
CLAUDE.mdHOMELAB_ARCHITECTURE_MASTER_V2.mdAbschnitt 7.4 und 7.8docs/WORKFLOW.mddocs/ROLLBACK.mdapps/jellyfin/docker-compose.ymlsecurity/authelia/configuration.yml(Access-Control-Block)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:round/mnt/user/photos:romit Jellyfin — Datenpfad bleibt unangetastet. - Authelia-Eintrag
jellyfin.kaleschke.infosteht unterpolicy: bypassinsecurity/authelia/configuration.ymlZeile 42. Dieconfiguration.ymlist Repo-Baseline und muss lautdocs/AI_CONTEXT.mdmanuell 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:
jellyfinaus oeffentliche-Apps-Zeile entfernen. -
Abschnitt 4.1 "Oeffentlich ueber Traefik": Zeile
- jellyfin — jellyfin.kaleschke.infoentfernen. -
Abschnitt 7.4 Tabelle "Produktive Apps": Zeile
jellyfinentfernen. -
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
jellyfinDestroy(Workspace/mnt/user/services/stacks/jellyfin/entfernen). - In Gitea: Webhook-Eintrag fuer Komodo-Stack-ID
jellyfinentfernen.
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/antwortet404(Traefik kennt die Route nicht mehr) oder Cert-Fehler je nach Cache.- Kein laufender
jellyfin-Container. - Port
8096nicht 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 --shortableiten, nie ausgit diffueber 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.mdPflichtmatrix, 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