Skip to main content

Installation Guide

This guide provides comprehensive installation instructions for Jellyfin Server across different platforms and deployment scenarios.
For a quick start, see the Quickstart Guide. This guide covers production-ready installations.

Prerequisites

Before installing Jellyfin Server, ensure you have:
  • .NET 9.0 SDK - Required for building from source
  • FFmpeg - Required for media transcoding and processing
  • Minimum 2GB RAM - Recommended 4GB+ for larger libraries
  • Sufficient storage - For media, metadata, and transcoding cache

Installation Methods

Docker is the recommended method for most deployments.

Basic Docker Installation

1

Install Docker

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

Pull Jellyfin Image

docker pull jellyfin/jellyfin:latest
For a specific version:
docker pull jellyfin/jellyfin:10.9.0
3

Create Directories

mkdir -p /opt/jellyfin/config
mkdir -p /opt/jellyfin/cache
4

Run Container

docker run -d \
  --name jellyfin \
  --user 1000:1000 \
  --net=host \
  --volume /opt/jellyfin/config:/config \
  --volume /opt/jellyfin/cache:/cache \
  --mount type=bind,source=/path/to/media,target=/media \
  --restart=unless-stopped \
  jellyfin/jellyfin:latest
Replace /path/to/media with your actual media directory path.
Create a docker-compose.yml file:
docker-compose.yml
version: '3.8'

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: 1000:1000
    network_mode: host
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /path/to/media:/media
      - /path/to/media2:/media2:ro  # Optional, read-only
    restart: unless-stopped
    environment:
      - JELLYFIN_PublishedServerUrl=http://example.com
    # Optional: Hardware acceleration
    devices:
      - /dev/dri:/dev/dri  # For Intel QuickSync
      # - /dev/nvidia0:/dev/nvidia0  # For NVIDIA
Start the services:
docker-compose up -d
View logs:
docker-compose logs -f jellyfin

Hardware Acceleration with Docker

services:
  jellyfin:
    devices:
      - /dev/dri:/dev/dri
    group_add:
      - "109"  # render group ID

Post-Installation Configuration

Directory Structure

Jellyfin creates the following directories:
Jellyfin Data Directory/
├── config/           # Configuration files
├── cache/            # Temporary cache files
├── data/             # Database and metadata
├── log/              # Log files
└── transcodes/       # Transcoding temporary files

Default Ports

PortProtocolPurpose
8096HTTPWeb interface and API
8920HTTPSSecure web interface (if configured)
1900UDPService discovery (DLNA)
7359UDPClient discovery

Firewall Configuration

sudo ufw allow 8096/tcp
sudo ufw allow 8920/tcp
sudo ufw allow 1900/udp
sudo ufw allow 7359/udp

Verification

Verify your installation:

Check Service Status

sudo systemctl status jellyfin

Test API

curl http://localhost:8096/System/Info/Public
Expected response:
{
  "LocalAddress": "http://localhost:8096",
  "ServerName": "Jellyfin Server",
  "Version": "10.9.0",
  "ProductName": "Jellyfin Server",
  "OperatingSystem": "Linux",
  "StartupWizardCompleted": false
}

Access Web Interface

Open your browser:
http://localhost:8096
You should see the Jellyfin setup wizard.

Troubleshooting

Check logs:
# Linux
sudo journalctl -u jellyfin -n 100

# Docker
docker logs jellyfin

# Manual installation
cat /var/lib/jellyfin/log/log_*.txt
Ensure the Jellyfin user has access to media directories:
sudo usermod -aG your-media-group jellyfin
sudo chmod -R 755 /path/to/media
Verify FFmpeg installation:
ffmpeg -version
which ffmpeg
If not found, install using platform-specific instructions above.
Change the listening port:
# Command line
./jellyfin --port 8097

# Environment variable
export JELLYFIN_PublishedServerUrl=http://localhost:8097
Check database file permissions:
ls -la /var/lib/jellyfin/data/jellyfin.db
sudo chown jellyfin:jellyfin /var/lib/jellyfin/data/jellyfin.db

Upgrading

Docker

# Pull latest image
docker pull jellyfin/jellyfin:latest

# Stop and remove old container
docker stop jellyfin
docker rm jellyfin

# Start new container with same volumes
docker run -d \
  --name jellyfin \
  --volume /opt/jellyfin/config:/config \
  --volume /opt/jellyfin/cache:/cache \
  --mount type=bind,source=/path/to/media,target=/media \
  --restart=unless-stopped \
  jellyfin/jellyfin:latest

# Or with docker-compose
docker-compose pull
docker-compose up -d

From Source

cd jellyfin
git pull
dotnet build --configuration Release
sudo systemctl restart jellyfin
Always backup your configuration and database before upgrading!

Next Steps

Initial Setup

Complete the setup wizard

API Reference

Explore the REST API

Configuration

Configure Jellyfin settings

Plugins

Extend functionality with plugins

Build docs developers (and LLMs) love