Jellyfin logoMedia Server

Jellyfin

A free and open-source media server for streaming movies, music, and photos as a Plex alternative.

Review notes

Supports hardware transcoding with GPU. Mount media directories separately and configure libraries before inviting users.

Deployment guide

Run a single Docker container, mount media directories, and configure transcoding if needed.

  1. Create media storage directories (movies, music, photos) on the host.
  2. Run the Jellyfin container with volume mounts for media and config.
  3. Open the web UI, create an admin account, and configure media libraries.
  4. Enable hardware transcoding in Settings if a GPU is available.
  5. Put an HTTPS reverse proxy in front for internet access.
Backup:Back up the config directory containing the database and metadata. Media files need separate backup.

Copy and run on your server

Use each block separately: save the compose file, or copy the bash script to create it and start the container.

docker-compose.ymlyaml
services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /path/to/media:/media:ro
    ports:
      - "8096:8096"
    environment:
      JELLYFIN_PublishedServerUrl: "http://SERVER_IP:8096"
    restart: unless-stopped
setup.shbash
#!/usr/bin/env bash
set -euo pipefail

sudo mkdir -p /opt/jellyfin
sudo chown "$USER":"$USER" /opt/jellyfin
cd /opt/jellyfin

cat > docker-compose.yml <<'COMPOSE'
services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /path/to/media:/media:ro
    ports:
      - "8096:8096"
    environment:
      JELLYFIN_PublishedServerUrl: "http://SERVER_IP:8096"
    restart: unless-stopped
COMPOSE

docker compose up -d
echo "Jellyfin is running on http://SERVER_IP:8096"

Stack

C#Docker