halkyon/deploy/compose.jellyfin.yaml

46 lines
2 KiB
YAML
Raw Normal View History

# The Jellyfin sidecar (decided 2026-10-14): a Jellyfin server beside the instance, which
# people watch and listen to learn from (Halkyon Learn's Watch screen), suggested to them
# by the instance. Switched on in .env, with the domain it answers at:
#
# COMPOSE_FILE=compose.learn.yaml:compose.jellyfin.yaml
# JELLYFIN_DOMAIN=jellyfin.example.org
#
# Its files are the server's, in ./jellyfin (config, cache, media), owned by a user ID
# of its own; or the media in a folder elsewhere on the host that .env names
# (JELLYFIN_MEDIA, readable by all: halkyon.li's /data/media, ADR 0039, D15). The user ID
# is one no person, no other container and not the CI runner uses: processes
# of one user ID can read each other's environment and files. Setting it up, and the
# demo account: sidecars/README.md.
services:
jellyfin:
# v12.2, the version Halkyon Learn's Jellyfin feature is checked with.
image: jellyfin/jellyfin@sha256:357724bf0ae27a672c7cbaa899db2d9abeb13dbd8657ccce750258a4c059d037
restart: unless-stopped
user: "61096:61096"
environment:
JELLYFIN_PublishedServerUrl: https://${JELLYFIN_DOMAIN:?set JELLYFIN_DOMAIN in deploy/.env}
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- ${JELLYFIN_MEDIA:-./jellyfin/media}:/media:ro
# On `edge` alone, beside Caddy and the server's public API, never beside Postgres;
# no published port. A fixed address, for the admin's SSH tunnel (sidecars/README.md).
networks:
edge:
ipv4_address: 172.30.80.10
# Videos stream as stored (the app asks for static=true): nothing is transcoded.
mem_limit: 768m
logging:
driver: journald
caddy:
environment:
JELLYFIN_DOMAIN: ${JELLYFIN_DOMAIN:?set JELLYFIN_DOMAIN in deploy/.env}
volumes:
- ./sidecars/jellyfin.caddy:/etc/caddy/sidecars/jellyfin.caddy:ro
server:
environment:
# The instance suggests this Jellyfin, rather than looking for one.
JELLYFIN_URL: https://${JELLYFIN_DOMAIN:?set JELLYFIN_DOMAIN in deploy/.env}/