How to Install Jellyfin in 2026: Docker Setup Guide (5 Minutes, Zero to Streaming)

How to Install Jellyfin in 2026: Docker Setup Guide (5 Minutes, Zero to Streaming)

How to Install a Jellyfin Server in 2026: Complete Guide

Jellyfin is the leading free, open-source media server in 2026. No subscriptions, no accounts, no telemetry just your media, your rules. This guide covers the fastest and most reliable installation method: Docker Compose on Linux, with optional sections for Windows and bare-metal Linux.


Prerequisites

Before you start, make sure you have:

  • A machine running Ubuntu 22.04 / Debian 12 (or Windows 10/11 for the Windows section)
  • Docker Engine and Docker Compose plugin installed
  • At least 4 GB RAM and a 64-bit CPU
  • Your media files accessible on the host (e.g., /mnt/media)

Install Docker (Linux)

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Verify:

docker --version
docker compose version

Docker is the officially recommended deployment method. It isolates Jellyfin, makes updates trivial, and works identically on any Linux host.

Project structure

~/jellyfin/
  docker-compose.yml
  config/          ← Jellyfin config & metadata (use SSD)
  cache/           ← Transcoding cache
mkdir -p ~/jellyfin && cd ~/jellyfin

docker-compose.yml

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: "1000:1000"
    network_mode: host
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media:/media:ro
    restart: unless-stopped
    environment:
      - JELLYFIN_PublishedServerUrl=http://YOUR_SERVER_IP:8096

Note: network_mode: host is recommended on Linux for best performance and automatic device discovery. On Windows/macOS, replace it with ports: - "8096:8096".

Start Jellyfin

docker compose up -d

Jellyfin is now running at http://YOUR_SERVER_IP:8096. Open it in your browser to complete the setup wizard.


Method 2: Docker Compose with Hardware Transcoding (Intel QSV)

If your server has an Intel CPU with integrated graphics (N100, i3/i5/i7 12th gen+), enable hardware transcoding for smooth 4K streams at minimal CPU cost.

Check your GPU is available

ls /dev/dri
# Should show: card0  renderD128

Updated docker-compose.yml

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: "1000:1000"
    network_mode: host
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media:/media:ro
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    group_add:
      - "109"  # render group check with: getent group render
    restart: unless-stopped

Enable QSV in Jellyfin

  1. Open Dashboard → Playback → Transcoding
  2. Set Hardware acceleration to Intel QuickSync (QSV)
  3. Enable HEVC, H.264, VP9, AV1 (decode)
  4. Enable Hardware Tone Mapping (for HDR → SDR)
  5. Save and restart the container

NVIDIA NVENC

For NVIDIA GPUs, add the NVIDIA runtime:

    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility

Then select NVIDIA NVENC in the transcoding settings.


Method 3: Full Stack with Caddy Reverse Proxy

For remote access with automatic HTTPS, add Caddy to your Compose file.

services:
  caddy:
    image: caddy:2-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
    restart: unless-stopped

  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media:/media:ro
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    restart: unless-stopped

volumes:
  caddy_data:

Caddyfile:

jellyfin.yourdomain.com {
    reverse_proxy jellyfin:8096
}

Point your domain DNS A record to your server IP, then:

docker compose up -d

Caddy automatically obtains and renews a Let's Encrypt SSL certificate.


Method 4: Native Linux Installation (APT)

If you prefer running Jellyfin directly on the host without Docker:

JellyWatchTry JellyWatch — Your Jellyfin companion, everywhere.
# Add the Jellyfin repository
curl -fsSL https://repo.jellyfin.org/install-debuntu.sh | sudo bash

# Enable and start
sudo systemctl enable --now jellyfin

# Check status
sudo systemctl status jellyfin

Access at http://localhost:8096.

Tip: For hardware transcoding on bare metal, add the jellyfin user to the render and video groups:

sudo usermod -aG render,video jellyfin
sudo systemctl restart jellyfin

Method 5: Windows Installation

  1. Download the Windows installer from jellyfin.org/downloads
  2. Run the .exe Jellyfin installs as a Windows Service
  3. Access at http://localhost:8096

For hardware transcoding on Windows, select DXVA2 or D3D11VA in the transcoding settings.

Note: Linux/Docker delivers better hardware transcoding performance and stability than Windows. Use Windows only if it is your only option.


First-Run Setup Wizard

Once Jellyfin is running, open http://YOUR_IP:8096 and follow the wizard:

1. Create your admin account

Choose a strong username and password. This is your server admin never share it.

2. Add your media libraries

Click Add Media Library for each content type:

Content typeExample path
Movies/media/movies
TV Shows/media/tv
Music/media/music
Photos/media/photos

Naming conventions matter. Jellyfin matches metadata from TMDB/TVDB based on filenames:

/media/movies/
  The Dark Knight (2008)/
    The Dark Knight (2008).mkv

/media/tv/
  Breaking Bad/
    Season 01/
      Breaking Bad - S01E01.mkv

3. Configure metadata language

Set your preferred metadata language in Dashboard → Libraries → [Library] → Metadata language.

4. Enable hardware transcoding

Dashboard → Playback → Transcoding → select your GPU type.


Post-Installation Checklist

TaskWhy
Enable hardware transcodingSmooth 4K, low CPU
Set up a reverse proxy (Caddy/Nginx)HTTPS for remote access
Configure Fail2BanBlock brute-force logins
Install Intro Skipper pluginNetflix-style skip buttons
Install Playback Reporting pluginUsage statistics
Set up automated backupsProtect your config
Install JellyWatch on AndroidMonitor from your phone

Updating Jellyfin

Docker

docker compose pull
docker compose up -d

APT

sudo apt update && sudo apt upgrade jellyfin

Always back up /config before a major version upgrade. Jellyfin 10.11 introduced a database migration that is irreversible.


Troubleshooting

ProblemFix
Cannot access port 8096Check firewall: sudo ufw allow 8096/tcp
Hardware transcoding not workingVerify /dev/dri is mapped and group permissions are correct
Library scan stuckCheck file permissions Jellyfin user must be able to read media
Metadata wrongUse the Identify feature to manually match TMDB/TVDB ID
High CPU at idleDisable chapter image extraction or reschedule background tasks

Monitor Your Jellyfin Server

Once your server is live, you need visibility into what is happening active streams, CPU usage, transcoding load, and failed logins.

JellyWatch is the dedicated Android admin app for Jellyfin:

  • Real-time session monitoring
  • Transcoding diagnostics (why is this stream buffering?)
  • CPU, RAM, and storage alerts
  • Push notifications for new sessions and server events
  • Radarr, Sonarr, and Jellyseerr integration
  • Android home screen widget

Your Jellyfin server is live now keep it under control. Download JellyWatch on Google Play the essential Android companion for every Jellyfin admin.

Questions? Join the community on Discord or the Jellyfin Forum.

Comments

No comments yet. Be the first to share your thoughts.

Leave a comment

Never displayed publicly.
0 / 2000 · Supports limited Markdown: **bold**, *italic*, `code`, [link](url), lists, > quote.