Jellyfin transforms an Ubuntu machine into a centralized media server, allowing you to stream movies, TV shows, music, and photos to nearly any device on your network. By installing Jellyfin, you retain full control over your media library without subscription fees or third-party tracking, and you can expand functionality with plugins and remote access options.
System Preparation and Requirements
Jellyfin requires an Ubuntu system (20.04, 22.04, or 24.04 recommended), a reliable internet connection, and administrative access. Ensuring your system is up-to-date prevents compatibility issues and applies critical security patches before server deployment.
sudo apt update && sudo apt upgrade -y
curl, apt-transport-https, ca-certificates, and software-properties-common. These utilities are required for securely downloading packages and managing repositories.sudo apt install curl apt-transport-https ca-certificates software-properties-common -y
Join readers who trust AllThings.How
Add us as a preferred source on Google so our practical guides show up first next time you search.
Add to Google Preferences →Adding the Jellyfin Repository and GPG Key
Official Ubuntu repositories do not include Jellyfin, so you must add the Jellyfin repository and its GPG key. This ensures that your server downloads authentic Jellyfin packages and receives updates directly from the maintainers.
curl -fsSL https://repo.jellyfin.org/ubuntu/jellyfin_team.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/jellyfin.gpg
noble with your Ubuntu codename if necessary (e.g., jammy for 22.04):echo "deb [signed-by=/usr/share/keyrings/jellyfin.gpg] https://repo.jellyfin.org/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
sudo apt update
Installing and Starting Jellyfin
jellyfin-ffmpeg for media transcoding.sudo apt install jellyfin -y
sudo systemctl enable jellyfin
sudo systemctl start jellyfin
sudo systemctl status jellyfin
Configuring Firewall and Network Access
Jellyfin uses port 8096 by default for HTTP traffic. If you have a firewall enabled (such as UFW), you must allow traffic on this port to access the web interface from other devices.
sudo ufw allow 8096/tcp
If you use a different firewall, such as firewalld, add the port accordingly:
sudo firewall-cmd --permanent --add-port=8096/tcp
sudo firewall-cmd --reload
Initial Web Interface Setup
Once the server is running, configure Jellyfin through its web interface. This setup process includes creating an administrator account, specifying media library locations, and choosing metadata preferences.
http://your_server_ip:8096
Replace your_server_ip with the actual IP address of your Ubuntu server. The Jellyfin setup wizard will appear.
Assigning Media Directory Permissions
Jellyfin must have read and execute permissions on your media directories. If your media is stored outside your home directory (e.g., on an external drive or network share), adjust permissions using setfacl for fine-grained control.
sudo apt install acl
/media/mymediadrive with your actual media path:sudo setfacl -R -m u:jellyfin:rx /media/mymediadrive
If you need to assign permissions to individual subfolders or files, use:
sudo setfacl -m u:jellyfin:rx /media/mymediadrive/specific-folder
Reverse Proxy and HTTPS (Optional for Remote Access)
To securely access Jellyfin from outside your local network, deploy a reverse proxy using Nginx or Apache and obtain a TLS certificate from Let’s Encrypt. This setup encrypts your traffic and enables access via a custom domain.
Nginx Reverse Proxy Example
sudo apt install nginx
sudo nano /etc/nginx/conf.d/jellyfin.conf
Add a server block referencing your domain. Replace jellyfin.example.com with your actual domain name:
server {
listen 80;
server_name jellyfin.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
location /socket {
proxy_pass http://127.0.0.1:8096/socket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Test and reload Nginx:
sudo nginx -t
sudo systemctl reload nginx
Acquire a free TLS certificate with Certbot:
sudo apt install python3-certbot-nginx
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com
Apache Reverse Proxy Example
sudo apt install apache2
sudo a2enmod proxy proxy_http headers proxy_wstunnel
sudo nano /etc/apache2/sites-available/jellyfin.conf
Insert the following configuration (replace domain as needed):
<VirtualHost *:80>
ServerName jellyfin.example.com
ProxyPass / http://localhost:8096/
ProxyPassReverse / http://localhost:8096/
</VirtualHost>
Enable the site and restart Apache:
sudo a2ensite jellyfin.conf
sudo systemctl restart apache2
Obtain a TLS certificate for Apache:
sudo apt install python3-certbot-apache
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com
Jellyfin on Ubuntu delivers a robust, private streaming solution for your home or small office, with flexible configuration options and strong community support. Regularly update your server and Jellyfin installation to maintain security and access the latest features.






