Skip to content

Jellyfin, a Self-Hosted Home Media Server

Last updated: May 2022. For advanced users. Solid tech skills required.

Jellyfin vs Plex

Looking for a FOSS alternative to Plex media server? Jellyfin is a self-hosted digital media solution for your Ubuntu server. Enjoy movies, TV shows and music on your media streaming devices. Jellyfin is free, open source, fast and beautiful. And it supports multiple users, Live TV, metadata management, customisation & plugins, various clients, and more.

Jellyfin install

How to install Jellyfin

Jellyfin's installation process is pretty straight forward. More details below.

Show me the step-by-step guide

Log into the server, then run the following commands to add the repository to the apt source list and install the software:

sudo apt install apt-transport-https
sudo apt-get install software-properties-common
sudo add-apt-repository universe
curl -fsSL | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/debian-jellyfin.gpg
sudo echo "deb [arch=$( dpkg --print-architecture )] $( lsb_release -c -s ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
sudo apt update
sudo apt install jellyfin
Show me the 1-minute summary video

Temporary workaround for Ubuntu 22.04

At the time of writing, Jellyfin can't be installed from Ubuntu 22.04 repositories using the instructions outlined above. This is mainly due to the fact that Jellyfin 10.7.7 depends on libssl1, which is no longer supported by Ubuntu 22.04. Instead, install Jellyfin 10.8.0 Beta 3 as a temporary workaround.

Enable the Universe repositories:

sudo add-apt-repository universe
sudo apt update

Download the Jellyfin .deb packages:


Install the required dependencies:

sudo apt install at libsqlite3-0 libfontconfig1 libfreetype6

Install the downloaded .deb packages:

sudo dpkg -i jellyfin-*.deb

Fix missing dependencies:

sudo apt -f install

Restart the Jellyfin service and make sure the status is Active:

sudo systemctl restart jellyfin
sudo systemctl status jellyfin

Jellyfin Ubuntu

Setting up the home media server

After successfully installing Jellyfin, we're going to configure a number of settings such as the auto start on boot, user accounts, language preferences, and so on. More details below.

Show me the step-by-step guide

Auto start

Let's make sure Jellyfin automatically starts every time the server boots:

sudo systemctl daemon-reload
sudo systemctl enable jellyfin

Reboot the server:

sudo reboot

Make sure Jellyfin is up and running (the status should be "Active"):

sudo systemctl status jellyfin

Initial Jellyfin setup

We're going to access Jellyfin's web interface to perform the initial setup. For this, we need to temporarily open port 8096 on the firewall:

sudo ufw allow 8096/tcp

Now browse to (adjust accordingly) and follow the initial setup wizard:

Instructions Description
Preferred display language Select your preferred language, for example English.
Username Provide a username for the Jellyfin administrator. For the purpose of this tutorial, we'll call this administrator jellyfinadmin. Of course, you can choose any name, just make sure to adjust the commands accordingly.
Password Provide a strong, unique password for the Jellyfin administrator.
Add Media Libraries You can add music, movies or TV shows to Jellyfin now, or at any later time from the dashboard. Media should be stored on the file system: the server's storage, an external drive connected to the server or a network storage device directly mounted to the OS.
Select preferred Metadata Language Select your preferred language, for example English.
Allow remote connections to this Jellyfin media server No.

Once the initial setup is done, close the port 8096:

sudo ufw delete allow 8096/tcp
Show me the 2-minute summary video

Jellyfin remote access

Web interface

We are going to set up an Apache Virtual Host as a Reverse Proxy to access Jellyfin's web interface. Read on below for more details on how to set this up.

Show me the step-by-step guide

Create an Apache configuration file:

sudo vi /etc/apache2/sites-available/

Add the following content and make sure to adjust the settings to your own setup, such as domain names (, path to SSL keys, IP addresses and so on:

<VirtualHost *:80>

  Redirect permanent /


<VirtualHost *:443>

  ServerSignature Off

  SecRuleEngine Off
  SSLEngine On
  SSLCertificateFile  /etc/dehydrated/certs/
  SSLCertificateKeyFile /etc/dehydrated/certs/
  DocumentRoot /var/www

  <Location />
    Order deny,allow
    Deny from all
    Allow from
    Allow from
    Allow from

  ProxyPreserveHost On
  ProxyPass "/socket" "ws://"
  ProxyPassReverse "/socket" "ws://"
  ProxyPass "/" ""
  ProxyPassReverse "/" ""

  ErrorLog ${APACHE_LOG_DIR}/
  CustomLog ${APACHE_LOG_DIR}/ combined


Once the content is added, save and close the file (:wq!).

Note how we enable SSL encryption for Jellyfin with the instruction SSLEngine On, and use the SSL certificate /etc/dehydrated/certs/ as well as the private SSL key /etc/dehydrated/certs/, which were created earlier on.

Also note how we disabled ModSecurity in the Apache configuration file with the instruction SecRuleEngine Off, as Jellyfin and ModSecurity don't play well together.

Next, enable the Apache Virtual Host and reload Apache:

sudo a2ensite
sudo systemctl reload apache2

Configure Pi-Hole to resolve the Jellyfin server address. Browse to and log into Pi-Hole's web interface (adjust accordingly). Navigate to the menu entry Local DNS Records and add the following domain/IP combination (adjust accordingly):


You can now browse to and log in as jellyfinadmin (adjust accordingly) or any valid Jellyfin user.

Show me the 1-minute summary video

Jellyfin app

Multimedia applications

Jellyfin supports various clients for Desktop, TV or mobile devices. Choose your preferred ones and follow install instructions provided on Jellyfin's website.

What is a media server

Add users

Jellyfin differenciates between two user types:

  • Administrators have full access and can add, edit and remove media as well as users. In addition, administrators can maintain and update Jellyfin. In our example, the administrator jellyfinadmin was created during the installation process. Other administrators can be added.

  • Users have limited access to Jellyfin. Features are individually configurable for each user.

Show me the step-by-step guide

Instructions Description
Jellyfin login Browse to and log in as administrator, e.g. jellyfinadmin (adjust accordingly).
Settings Navigate to Menu ‣ Dashboard ‣ Users ‣ Add User.
Add user Provide a user name, as well as a strong, unique password. Then click on Save. Also define which libraries this user can access.
Define user rights Optionally define further settings, such as:
• Administrator rights
• Live TV access
• Transcoding
• Restricted Internet speed
• Permission to delete media
• Remote control
• Account locking
• Library & device access
• Parental control
• Pin code

Show me the 1-minute summary video

Admins & users need a VPN access

All users must be connected to the server via VPN to access Jellyfin.

Best home media server


Jellyfin supports both embedded and external subtitles. The Open Subtitle plugin enables Jellyfin to download subtitles automatically. Instructions on how to add external subtitles to Jellyfin are outlined below.

Show me the step-by-step guide

Instructions Description
Login Browse to and log in as administrator, e.g. jellyfinadmin (adjust accordingly).
Install Jellyfin plugins Navigate to Menu ‣ Dashboard ‣ Plugins ‣ Catalog ‣ Open Subtitles and click on Install.
Restart Navigate to Menu ‣ Dashboard and click on Restart.
Configure plugin The Open Subtitle plugin doesn't require an account to download subtitles. Optionally, create an account on Then navigate to Menu ‣ Dashboard ‣ Plugins ‣ Open Subtitles ‣ Settings and provide your Open Subtitle user credentials.
Settings Navigate to Menu ‣ Libraries ‣ Movies or TV Shows ‣ Manage Library and define further settings in the section Subtitle Downloads:

• Download languages
• Subtitle downloader
• Filter subtitles based on file name & audio
• Location to store subtitles
Download subtitles Jellyfin automatically schedules a task to regularly download missing subtitles. To force the download, navigate to Menu ‣ Dashboard ‣ Scheduled Tasks and click on Download missing subtitles.

Show me the 3-minute summary video

Best Linux media server


Upgrades to new Jellyfin releases are automatically handled by Ubuntu server's package manager. To perform a manual upgrade, follow the instructions below.

Show me the step-by-step guide

Log into the server and run the following command:

sudo apt update && sudo apt upgrade

Then restart Jellyfin and make sure it's up and running (the status should be "Active"):

sudo systemctl restart jellyfin
sudo systemctl status jellyfin

How to set up a media server


For further details, refer to Jellyfin's documentation or request support from the Jellyfin community.