How to Install Jellyfin on Ubuntu

Install Jellyfin on Ubuntu

Setting up your own media server has never been more appealing, especially when you want full control over your digital content without monthly subscription fees. Jellyfin stands out as the perfect solution for Ubuntu users who want a free, open-source alternative to Plex or Emby. In this comprehensive guide, I’ll walk you through every step of installing Jellyfin on Ubuntu, from initial setup to advanced configuration.

Table of Contents

What is Jellyfin and Why Choose It?

Jellyfin is a completely free and open-source media server that transforms your Ubuntu system into a powerful streaming hub. Unlike its commercial competitors, Jellyfin doesn’t have premium features locked behind paywalls or impose restrictions on the number of users or devices.

The software organizes your personal media collection – movies, TV shows, music, photos, and more – making it accessible from any device on your network. What makes Jellyfin particularly attractive is its commitment to privacy: there’s no tracking, no premium subscriptions, and no data collection. Your content stays yours.

Since its fork from Emby in 2018, Jellyfin has rapidly evolved with active community development, regular updates, and extensive hardware transcoding support. It’s perfect for users who value freedom, customization, and complete control over their media streaming experience.

Prerequisites and System Requirements

Hardware Requirements

Before diving into the installation, let’s ensure your Ubuntu system meets Jellyfin’s requirements. The good news is that Jellyfin is surprisingly lightweight for basic usage:

  • CPU: Any modern processor (Intel/AMD x64, ARM)
  • RAM: Minimum 512MB, recommended 2GB or more
  • Storage: At least 1GB for the application, plus space for your media
  • Network: Ethernet connection recommended for optimal streaming

For hardware transcoding, you’ll need compatible graphics hardware like Intel Quick Sync, NVIDIA NVENC, or AMD VCE. However, software transcoding works on any system, though it’s more CPU-intensive.

Supported Ubuntu Versions

Jellyfin officially supports all current Long Term Support (LTS) Ubuntu versions and recent standard releases:

  • Ubuntu 24.04 LTS (Noble)
  • Ubuntu 22.04 LTS (Jammy)
  • Ubuntu 20.04 LTS (Focal)
  • Most recent Ubuntu derivatives (Linux Mint, KDE Neon, etc.)

Network Requirements

For optimal performance, ensure your network can handle your streaming needs. A gigabit connection is ideal for 4K content, while 100Mbps works fine for 1080p streaming. Plan your network bandwidth based on simultaneous users and transcoding requirements.

Preparing Your Ubuntu System

Updating System Packages

Starting with a fresh system update is crucial for security and compatibility. Open your terminal and run the following commands:

sudo apt update && sudo apt upgrade -y

This command combination updates your package index and upgrades all installed packages to their latest versions. The -y flag automatically confirms the upgrades, streamlining the process.

Installing Required Dependencies

Jellyfin’s installation process requires several packages that might not be present on minimal Ubuntu installations. Install them with:

sudo apt install lsb-release curl apt-transport-https software-properties-common gnupg -y

These dependencies serve specific purposes:

  • lsb-release: Provides system information for repository configuration
  • curl: Downloads files and repository keys
  • apt-transport-https: Enables HTTPS repository connections
  • software-properties-common: Manages additional software repositories
  • gnupg: Handles cryptographic signatures for package verification

Checking System Architecture

Jellyfin needs to know your system architecture to provide the correct packages. You can check this with:

dpkg --print-architecture

This typically returns amd64 for 64-bit Intel/AMD systems or arm64 for ARM-based systems like Raspberry Pi 4.

Method 1: Installing Jellyfin Using the Official Installation Script

Understanding the Installation Script

The Jellyfin team provides an automated installation script that handles the entire setup process. This script automatically detects your Ubuntu version, adds the appropriate repository, and installs all necessary components.

Running the Quick Install Command

For the fastest installation, simply run this single command:

curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

This command downloads and executes the official installation script directly. The script automatically handles repository setup, GPG key installation, and package installation.

Verifying Script Integrity

If you prefer to verify the script’s integrity before execution (recommended for production systems), use this approach:

# Download the script and its checksum
curl -s https://repo.jellyfin.org/install-debuntu.sh -o install-debuntu.sh
curl -s https://repo.jellyfin.org/install-debuntu.sh.sha256sum -o install-debuntu.sh.sha256sum

# Verify integrity
sha256sum -c install-debuntu.sh.sha256sum

# Inspect the script (optional)
less install-debuntu.sh

# Execute if verification passes
sudo bash install-debuntu.sh

An empty output from the verification command means the integrity check passed.

Method 2: Manual Installation Using APT Repository

Adding the Jellyfin Repository

For users who prefer manual control over each installation step, the manual method offers more transparency and customization options.

Installing GPG Keys

Importing the GPG Key

First, import Jellyfin’s GPG key to verify package authenticity:

curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/jellyfin-archive-keyring.gpg >/dev/null

This command securely downloads the GPG key and stores it in the system’s keyring directory.

Configuring Repository Sources

Add the Jellyfin repository to your system’s software sources:

echo "deb [signed-by=/usr/share/keyrings/jellyfin-archive-keyring.gpg arch=$(dpkg --print-architecture)] https://repo.jellyfin.org/ubuntu $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list

This command automatically detects your Ubuntu version and system architecture, ensuring the correct repository configuration.

Installing Jellyfin Package

Update your package index to include the new repository:

sudo apt update

Now install Jellyfin:

sudo apt install jellyfin -y

This command installs Jellyfin along with its dependencies, including the web interface and a customized version of FFmpeg optimized for media transcoding.

Post-Installation Configuration

Starting and Enabling Jellyfin Service

Jellyfin should start automatically after installation, but let’s ensure it’s properly configured:

sudo systemctl enable jellyfin
sudo systemctl start jellyfin

The enable command ensures Jellyfin starts automatically at boot time, while start launches the service immediately.

Checking Service Status

Verify that Jellyfin is running correctly:

systemctl status jellyfin

You should see Active: active (running) in the output, indicating the service is operational.

Configuring Firewall Settings

If Ubuntu’s UFW firewall is enabled, allow traffic to Jellyfin’s default port:

sudo ufw allow 8096/tcp
sudo ufw reload

Check the firewall status:

sudo ufw status

You should see port 8096 listed in the allowed connections.

Setting Up Media Directory Permissions

Understanding Permission Requirements

Jellyfin runs under its own user account (jellyfin) and needs appropriate permissions to access your media files. Incorrect permissions are one of the most common causes of media server issues.

Setting Correct File Permissions

Navigate to your media directory and adjust permissions. For this example, let’s assume your media is stored in /mnt/media:

sudo su
find /mnt/media -type d -exec chmod 755 {} \;
find /mnt/media -type f -exec chmod 644 {} \;
exit

Directory Permissions (755)

The 755 permission gives the owner (you) full access, while allowing the group and others (including the jellyfin user) to read and execute (enter) directories.

File Permissions (644)

The 644 permission allows the owner to read and write files, while giving group and other users (including jellyfin) read-only access.

Alternatively, you can add the jellyfin user to your user group:

sudo usermod -a -G $(whoami) jellyfin
sudo systemctl restart jellyfin

Accessing Jellyfin Web Interface

Finding Your Server’s IP Address

To access Jellyfin’s web interface, you need your Ubuntu system’s IP address:

hostname -I

This returns your system’s IP address, typically something like 192.168.1.100.

Opening the Web Interface

Open your web browser and navigate to:

http://YOUR_IP_ADDRESS:8096

For example: http://192.168.1.100:8096

Default Port Configuration (8096)

Jellyfin uses port 8096 by default for its web interface. This port handles both the setup wizard and regular media streaming. You can change this port later in the advanced settings if needed.

Initial Setup Wizard

Language Selection and Admin User Creation

When you first access Jellyfin, you’ll see the setup wizard. Start by selecting your preferred language, then create an administrator account with a strong username and password. This account has full control over your media server, so choose credentials you’ll remember.

Adding Media Libraries

The next crucial step is adding your media libraries. Click “Add Media Library” and:

  1. Select content type: Movies, TV Shows, Music, Photos, etc.
  2. Add folders: Browse to your media directories (like /mnt/media/movies)
  3. Configure metadata: Choose preferred metadata sources for artwork and information
  4. Set language preferences: Select languages for metadata and subtitles

Configuring Metadata Downloaders

Jellyfin automatically downloads movie posters, descriptions, cast information, and other metadata from various sources. The default settings work well for most users, but you can customize:

  • The Movie Database (TMDb): Excellent for movies and TV shows
  • MusicBrainz: Perfect for music metadata
  • Image sources: Control which artwork sources to use

Remote Access Settings

For security, consider your remote access needs carefully:

  • Local network only: Safest option for home use
  • Remote access: Requires careful security configuration
  • DLNA: Enable for compatibility with smart TVs and media players

Troubleshooting Common Issues

Service Won’t Start

If Jellyfin fails to start, check the service logs:

journalctl -u jellyfin -f

Common causes include:

  • Port 8096 already in use by another service
  • Insufficient disk space
  • Corrupted configuration files

Permission Errors

Permission issues typically manifest as empty libraries or “access denied” errors. Double-check that:

  • Media directories have correct permissions (755 for directories, 644 for files)
  • The jellyfin user can access parent directories
  • Storage devices are properly mounted

Network Access Problems

If you can’t access the web interface:

  • Verify the service is running with systemctl status jellyfin
  • Check firewall settings with sudo ufw status
  • Ensure you’re using the correct IP address and port
  • Try accessing from the local machine first: http://localhost:8096

Security Best Practices

Securing Remote Access

If you plan to access Jellyfin from outside your home network:

  1. Use a VPN: The safest option for remote access
  2. Enable HTTPS: Encrypt data transmission
  3. Change default ports: Reduce automated attack exposure
  4. Use strong passwords: Enable two-factor authentication if available
  5. Regular updates: Keep Jellyfin updated with security patches

Using HTTPS/SSL

Configure SSL certificates for encrypted connections:

sudo apt install certbot
sudo certbot certonly --standalone -d yourdomain.com

Then configure Jellyfin to use the certificates in the network settings.

VPN Configuration

Consider setting up a VPN server like WireGuard or OpenVPN for secure remote access to your Jellyfin server without exposing it directly to the internet.

Performance Optimization Tips

To get the best performance from your Jellyfin installation:

  1. Enable hardware transcoding if you have compatible hardware (Intel Quick Sync, NVIDIA, AMD)
  2. Use SSD storage for the Jellyfin database and configuration files
  3. Organize media properly with consistent naming conventions
  4. Monitor resource usage with htop or similar tools
  5. Configure transcoding settings based on your hardware capabilities
  6. Use wired connections for both server and clients when possible

Consider upgrading your hardware if you frequently transcode multiple streams simultaneously. A dedicated GPU can significantly improve transcoding performance for multiple users.

Frequently Asked Questions

1. Can I install Jellyfin on Ubuntu Server without a desktop environment?

Yes, Jellyfin works perfectly on Ubuntu Server. The installation process is identical, and you’ll access the web interface from another device on your network. The headless setup is actually preferred for dedicated media servers.

2. How much storage space does Jellyfin itself require?

Jellyfin requires approximately 500MB to 1GB for the application and its dependencies. However, the database and metadata can grow significantly depending on your library size – budget an additional 1-5GB for a large media collection.

3. Can I run Jellyfin alongside Plex on the same Ubuntu system?

Yes, but you’ll need to change the default ports for one of the services to avoid conflicts. Jellyfin uses port 8096 by default, while Plex uses 32400, so they can coexist without issues.

4. What’s the difference between the installation script and manual method?

The installation script is faster and automatically handles all steps, while the manual method gives you more control and understanding of each component. Both methods result in identical installations.

5. How do I update Jellyfin to the latest version?

Since you installed Jellyfin through the official repository, updates happen through the normal Ubuntu package management system. Simply run sudo apt update && sudo apt upgrade to get the latest version when available.

Marshall Anthony is a professional Linux DevOps writer with a passion for technology and innovation. With over 8 years of experience in the industry, he has become a go-to expert for anyone looking to learn more about Linux.

Related Posts