Skip to content

Jellyfin

Open-source media server — a free alternative running alongside Plex on Titan, sharing the same NVIDIA GPU for hardware transcoding and the same read-only media library mounts.

docker-compose.yml

networks:
  proxy:
    external: true

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    runtime: nvidia
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all
      - LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/nvidia/current
    volumes:
      - /ssd/docker/appdata/jellyfin/config:/config
      - /ssd/docker/appdata/jellyfin/cache:/cache
      - /megaraid/mediastore/Movies:/movies:ro
      - /megaraid/mediastore/StandUp:/standup:ro
      - /megaraid/mediastore/TV:/tv:ro
    networks:
      proxy:
        ipv4_address: 172.19.0.250
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.http.routers.jellyfin.rule=Host(`subdomain.domain.co.uk`)
      - traefik.http.routers.jellyfin.entrypoints=websecure-int
      - traefik.http.routers.jellyfin.tls.certresolver=production
      - traefik.http.routers.jellyfin.tls.domains[0].main=*.domain.co.uk
      - traefik.http.services.jellyfin.loadbalancer.server.port=8096

Unlike Plex, Jellyfin is only routed on websecure-int — it's reachable on the internal network and over VPN, but not exposed externally.

Hardware transcoding is configured the same way as Plex (runtime: nvidia plus the same NVIDIA_VISIBLE_DEVICES / NVIDIA_DRIVER_CAPABILITIES / LD_LIBRARY_PATH environment variables) — see that page's "Plex Hardware Transcoding" notes, which apply identically here.