🇩🇪 DE 🇬🇧 EN
NexoraHost / Docs home
Popular searches:Minecraft won't startCreate Minecraft serverFiveM txAdminInstall WordPressSet up subdomainVPS GermanySSL errorOpen port 25565Discord bot hostingDNS troubleshooting

Jellyfin – Installation and Setup

Jellyfin is a free, open-source media server that lets you stream your own movies, series and music – without any subscription fees. You retain full control over your data, as everything runs locally on your NexoraHost VPS or root server. This guide walks you through the complete installation and basic setup.

Note: Detailed subpages on hardware transcoding, reverse proxy and advanced settings can be found in the left navigation.

Why self-host Jellyfin?

Requirements

Step 1: Install Docker

Docker is the cleanest method, as all dependencies are isolated in the container:

# Install Docker (Ubuntu/Debian)
sudo apt update
sudo apt install docker.io docker-compose -y

# Enable Docker on system startup
sudo systemctl enable --now docker

# Add current user to the Docker group (saves sudo on every command)
sudo usermod -aG docker $USER

After adding to the group, log out and log back in.

Step 2: Prepare folder structure

A clean folder structure makes backups and updates easier:

# Main directory for Jellyfin
mkdir -p ~/jellyfin/{config,cache,media}

# Subfolders for different media types (optional, but recommended)
mkdir -p ~/jellyfin/media/{Movies,Series,Music,Photos}

The subfolders help Jellyfin automatically recognize and organize your media.

Step 3: Start Jellyfin with Docker-Compose

Docker-Compose makes the configuration clearer than a long Docker command. Create the file:

nano ~/jellyfin/docker-compose.yml

Add the following content:

version: '3.8'
services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    ports:
      - 8096:8096        # HTTP (Web interface)
      - 8920:8920        # HTTPS (optional, when SSL is configured)
    volumes:
      - ./config:/config
      - ./cache:/cache
      - ./media:/media:ro  # :ro = read-only, protects against accidental deletion
    restart: unless-stopped

Start the container:

cd ~/jellyfin
docker-compose up -d

Step 4: Set up Jellyfin in the browser

  1. Open http://your-server-ip:8096 in your browser
  2. The setup wizard starts automatically
  3. Choose language: English or your preferred language
  4. Create user: Set a username and a secure password. This account will be your admin account

Step 5: Add media libraries

  1. Click Libraries → Add Media Library
  2. Select the content type:
    • Movies: For feature films – expects a folder with movie files
    • Series: For TV shows – expects a folder structure like SeriesName/Season 01/Episode01.mkv
    • Music: For music files – automatically recognizes albums and artists
    • Photos: For photo collections
  3. Enter a display name (e.g. "My Movies")
  4. Select the folder – here /media/Movies (the path in the container, not on the host)
  5. Repeat the process for additional libraries (Series, Music, etc.)

Step 6: Configure metadata

Jellyfin automatically downloads covers, descriptions and ratings from the internet. Configure the sources:

  1. Go to Dashboard → Libraries → [Your Library] → Manage
  2. Under "Metadata Downloaders" you can prioritize the sources:
    • TheMovieDb: For movies and series (default, very good)
    • TheAudioDb: For music
    • OMDb: For additional ratings
  3. Click Save and then Scan Library

Step 7: Hardware transcoding (optional, but recommended)

Transcoding converts videos in real time to a format that your end device can play. Without a GPU, the CPU has to do the work – with GPU support it runs more smoothly:

# Add Intel QuickSync support to Docker-Compose
# In docker-compose.yml under "volumes:" add:
    devices:
      - /dev/dri:/dev/dri

In Jellyfin under Dashboard → Playback → Transcoding, select the appropriate hardware (e.g. Intel QuickSync or VA-API).

Step 8: Secure external access with SSL

So you can securely access Jellyfin from outside, a reverse proxy with Nginx and Let's Encrypt is recommended:

# Install Nginx
sudo apt install nginx certbot python3-certbot-nginx -y

# Create Nginx configuration
sudo nano /etc/nginx/sites-available/jellyfin
server {
    listen 80;
    server_name jellyfin.your-domain.com;

    location / {
        proxy_pass http://localhost:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
# Enable the site
sudo ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

# Get SSL certificate
sudo certbot --nginx -d jellyfin.your-domain.com

Step 9: Apps and clients

Jellyfin offers official apps for almost all platforms:

Simply enter your server URL in the app (e.g. https://jellyfin.your-domain.com) and log in.

Step 10: Updates and maintenance

# Pull latest version and restart container
cd ~/jellyfin
docker-compose pull
docker-compose up -d

# Clean up old Docker images
docker image prune -f

Common problems

Media not recognized:

Playback stutters:

No access from outside:

Detailed guides on plugins, live TV and advanced settings can be found in the articles in the left navigation.

NexoraHost

Need hosting?

Game servers, VPS & webspace at Maincubes FRA01 – 1 Tbit/s DDoS, 99.9% uptime SLA.

nexorahost.com · Maincubes FRA01 · 1 Tbit/s DDoS · 99,9 % Uptime