Media server for streaming movies, TV shows, and music.

Overview

Jellyfin is a free software media system that provides streaming media from a dedicated server. Replaces Plex.

Access: https://kijkdoos.janvv.nl Container: CT 125 IP: 192.168.144.100 Port: 8096

Source Code

Docker Compose & Install Script: github.com/opajanvv/homelab-docker/tree/main/jellyfin Local copy: ~/dev/homelab-docker/jellyfin/

Deployment

# Clone LXC template
pct clone 902 125 --hostname jellyfin --full
pct set 125 --cores 2 --memory 2048
pct set 125 -net0 name=eth0,bridge=vmbr0,firewall=1,gw=192.168.144.1,ip=192.168.144.100/23
pct set 125 -mp0 /lxcdata/jellyfin,mp=/data
pct set 125 -mp2 /ssd_pool/media,mp=/media,ro=1
pct set 125 -mp1 /home/jan/homelab-docker,mp=/opt/homelab-docker
pct set 125 -features nesting=1,keyctl=1
pct set 125 -onboot 1

# Add AppArmor workaround
cat >> /etc/pve/lxc/125.conf << 'EOF'
lxc.apparmor.profile: unconfined
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
EOF

# Deploy
pct start 125
pct exec 125 -- bash -c 'systemctl enable --now docker'
# Configs available via bind mount (no git clone needed)
pct exec 125 -- bash -c 'cd /opt/homelab-docker/jellyfin && chmod +x install.sh && ./install.sh'

Configuration

Data Locations:

  • /lxcdata/jellyfin/config/ - Jellyfin configuration (host path, mounted at /data/config/ in LXC)
  • /lxcdata/jellyfin/cache/ - Transcode cache (host path, mounted at /data/cache/ in LXC)
  • /ssd_pool/media/ - Media library (host path, mounted read-only at /media/ in LXC)
  • /opt/homelab-docker/jellyfin/ - Docker Compose config (inside container)
  • ~/dev/homelab-docker/jellyfin/ - Local working directory (laptop)

Media Setup: Media files live on the host at /ssd_pool/media/. Organize as:

/ssd_pool/media/
├── films/
├── series/
└── videos/

Access

  • Web UI: https://kijkdoos.janvv.nl
  • Direct: http://192.168.144.100:8096

First Setup: Create admin account, add media libraries

Backup

What to backup:

  • /lxcdata/jellyfin/config/ - Configuration, user data, metadata
  • /ssd_pool/media/ - Media files (separate storage, back up separately)

Backup command:

rsync -av /lxcdata/jellyfin/config/ /backup/homelab/jellyfin-config/

Media backup: Media lives on /ssd_pool/media/ (not inside lxcdata). Back up separately according to your media storage strategy.

Maintenance

Update:

pct exec 125 -- bash -c 'cd /opt/homelab-docker/jellyfin && docker compose pull && docker compose up -d'

View logs:

pct exec 125 -- bash -c 'cd /opt/homelab-docker/jellyfin && docker compose logs -f'

Restart:

pct exec 125 -- bash -c 'cd /opt/homelab-docker/jellyfin && docker compose restart'

Common Tasks

Add media library: Web UI → Dashboard → Media → Library → Add Media Library Scan for new files: Web UI → Dashboard → Media Library → Scan Transcode settings: Web UI → Dashboard → Playback → Transcoding

Related