furtka-apps/apps/jellyfin/docker-compose.yaml
Daniel Maksymilian Syrnicki fcf2f22a47
Some checks are pending
CI / validate (push) Waiting to run
CI / shellcheck (push) Waiting to run
feat(jellyfin): add media-server app using new path-type setting
First app to use the core-26.10-alpha `path` setting type. User picks
their existing media folder (MEDIA_PATH=/mnt/media) in the install
form; core installer validates the path server-side; compose mounts
it read-only at /media. Docker-managed volumes hold /config and
/cache; admin account is created from the first browser visit to
:8096. No HW transcoding yet — that's a later schema extension.

Also bumps the vendored manifest schema in scripts/vendor/ to match
core 26.10-alpha — catches up both the missing `open_url` field (gap
since 26.6-alpha) and the new `path` setting type. No changes needed
to validate-catalog.py itself.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 11:40:29 +02:00

38 lines
1.3 KiB
YAML

# Furtka Jellyfin — media server.
#
# Two Docker-managed volumes (config, cache) for app state + one
# user-supplied host path (MEDIA_PATH) mounted read-only for the media
# library. Admin account bootstraps from the first browser visit to
# :8096 — that's why this app has no manifest.settings for admin creds.
#
# MEDIA_PATH is a `path`-type setting (furtka/manifest.py ≥ 26.10-alpha
# schema). The install form asks for it, the installer validates that
# the directory exists and isn't a system path, and docker-compose
# substitutes the value below at `docker compose up` time.
#
# TODO(image-pin): `:latest` is shaky for production — pin to a digest
# (`jellyfin/jellyfin@sha256:...`) or a stable tag once we've verified
# one against the upstream registry. MVP drift risk accepted.
#
# No HW transcoding yet — /dev/dri passthrough is a separate, later
# schema extension. 1080p software transcode + Direct Play over LAN
# are fine for the Medion-Haswell target.
services:
jellyfin:
image: jellyfin/jellyfin:latest
restart: unless-stopped
ports:
- "8096:8096"
environment:
- TZ=Europe/Berlin
volumes:
- furtka_jellyfin_config:/config
- furtka_jellyfin_cache:/cache
- ${MEDIA_PATH}:/media:ro
volumes:
furtka_jellyfin_config:
external: true
furtka_jellyfin_cache:
external: true