How to Install Jellyfin with Docker on Rocky Linux 8

Jellyfin is the volunteer-built media solution that puts you in control of your media. Stream to any device from your server, with no strings attached. Your media, your server, your way. Jellyfin also can serve media to DLNA and Chromecast-enabled devices. It is a free and open-source software fork of Emby. In this article, we are going to learn how to install Jellyfin on Rocky Linux 8. So, let’s get started.

Checkout the Jellyfin Project Here.

Try this wiki on our VPS. Starting at just $5/month with 24x7 In-house customer support.


  • A system with Rocky Linux 8 installed and running.

  • root access to the system.

  • Docker installed and running, for this, you can refer to one of our guides on installing Docker on Rocky Linux 8.

Once you're all set, we'll proceed with Jellyfin installation and configuration.

Install Nginx

Let's begin with installing Nginx. Install using the below codes.

yum install nginx -y

Enable services

systemctl enable nginx

systemctl start nginx

systemctl status nginx

Enable Firewall

firewall-cmd --permanent --add-service=http

firewall-cmd --permanent --add-service=https

firewall-cmd --reload

Install Let’s Encrypt SSL Certificate

Let's issue an SSL certificate for the domain. For this, we will need the EPEL repository and the mod_ssl package on Rocky Linux 8 operating system.

Update and install EPEL repository and the mod_ssl package on the system using the below command:

dnf install epel-release mod_ssl -y

Next, we will install the certbot client which is used to create Let's Encrypt certificates:

dnf install python3-certbot-nginx -y

Install SSL Certificate

Use the certbot command to issue a Let's Encrypt certificate. Replace and with your domain name and email :

certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email -d

SSL certificates are valid for 90 days. The renewal process is now automated, you do not have to renew this manually.

Restart Nginx

Restart apache to avoid getting error messages.

systemctl restart nginx

Configuring Nginx Server Blocks

Let's configure nginx.conf with the following command:

nano /etc/nginx/nginx.conf

Replace the nginx.conf file with the below configuration.

# For more information on configuration, see:
#   * Official English Documentation:
#   * Official Russian Documentation:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See
    # for more information.
    include /etc/nginx/conf.d/*.conf;

Now, type Ctrl+O and type Ctrl+X to save and exit the file.

Create a new Nginx configuration file dev.conf for the domain with the following command:

vi /etc/nginx/conf.d/dev.conf

Add the following codes:

Replace & with Your Domain Name & IP and Change SSL Path according to your SSL Path.

upstream app {

server {
listen 80 default_server;
return 301 https://$server_name$request_uri;

server {
    listen 443 ssl; # managed by Certbot
    # The host name to respond to

    ssl_certificate /etc/letsencrypt/live/; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
    proxy_pass http://app;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Real-Port $server_port;
    proxy_set_header X-Real-Scheme $scheme;

Now, press the Esc key, and type :wq! and press the Enter key to save and exit the file.

For SELinux enabled systems, Run the below command

setsebool -P httpd_can_network_connect 1

Now, restart & check the Nginx with the following commands:

systemctl restart nginx

systemctl status nginx

Enable port 8096

To enable connection through the firewall, follow the commands:

firewall-cmd --zone=public --permanent --add-port 8096/tcp

firewall-cmd --reload

Install Jellyfin with Docker

The following instructions use the Docker service to install Jellyfin using the Jellyfin Docker Image. Let's install Jellyfin with Docker using the below commands:

docker pull jellyfin/jellyfin:latest

mkdir -p /srv/jellyfin/{config,cache}

docker run -d -v /srv/jellyfin/config:/config -v /srv/jellyfin/cache:/cache -v /media:/media --net=host jellyfin/jellyfin:latest

The installation process will start now. It may take 5-10 mins to complete.

Adding Media/Audio Files to Jellyfin

To add media/audio files to Jellyfin, run the following command:

Replace media.file with your file name.

docker cp media.file container_id:/media/media.file

Now add your media/audio files directly.

Accessing Jellyfin

Now open the IP address or Domain name from your browser, this will redirect you to the Jellyfin.

Replace the with the actual IP or domain configured on the server.

Follow the below steps:

Now you have successfully installed Jellyfin with Docker on Rocky Linux 8.