Jellyfin is an open-source media server software that allows you to organize, manage, and stream your personal media collection (such as movies, music, TV shows, and photos) across multiple devices. It was created as a free alternative to proprietary media servers like Plex and Emby, with the focus on giving users full control over their media without subscription costs or data collection concerns.

Key Features:

  • Media Management: Jellyfin helps organize your media library, pulling metadata to provide rich details like artwork, descriptions, and cast.
  • Multi-Platform Access: The server can be accessed from various devices, including smart TVs, mobile phones (via Android/iOS apps), web browsers, and streaming devices.
  • Live TV and DVR: With the help of TV tuners, you can watch live TV and even record content.
  • Privacy-Focused: Jellyfin doesn’t collect user data and does not require an online account, providing full privacy control.
  • Open-Source: Jellyfin is completely open-source, licensed under GPLv3, and has no premium features behind a paywall.

Installation:

Jellyfin can be installed on Linux, Windows, and macOS systems. Common installation methods include Docker, direct package installations, or adding a repository.

Popular Use Cases:

  • Home Media Center: Create a media hub for movies, TV shows, and music that can be accessed from any connected device.
  • Remote Access: Access your media from anywhere via a web browser or supported app.
  • Family Profiles: Create multiple user profiles, each with their own media preferences and parental controls.

Jellyfin is a popular choice for users who want a completely free and self-hosted solution for their media streaming needs without compromising privacy.

Step 1: Create an Instance

  • Access the Dashboard: Log in to your Shape.Host account and navigate to your Dashboard.
  • Click Create: Click on the “Create” button located in the top-right corner.
  • Select Instances: From the dropdown menu, choose “Instances” to begin creating a new cloud server.
Shape.host Resources dashboard with Create > Instance highlighted.
  • Select Location: Choose a data center location for your instance closest to your target audience for optimal performance.
Shape.host instance form with the data center location selector highlighted.
  • Choose a Plan: Scroll through the available pricing plans. Select a plan based on your project requirements, such as Standard, CPU-Optimized, or Memory-Optimized.
  • Choose an Image: Select Debian 12 as the operating system for your instance.
Shape.host instance form with the operating system image selector highlighted.
  • Authentication and Finalize: Choose your authentication method, either via SSH keys or password. Once done, click Create Instance to launch your server.
Shape.host instance form with the Create Instance button highlighted.

Step 2: Access Your Instance

To connect to your instance on Shape.Host, follow these steps:

Shape.host Resources dashboard with the server IP address highlighted.
  1. Get the Instance IP: After creating your instance, find the public IP address in the Shape.Host dashboard under Resources.
  2. Open SSH Client: Use an SSH client like Terminal (Linux/macOS) or PuTTY (Windows).
  3. SSH into the Instance: Run the following command in your terminal:
   ssh root@<your-instance-ip>

Replace <your-instance-ip> with your actual instance IP address.

  1. Enter the Password: If prompted, enter your instance’s root password or use your SSH key if configured.

You are now connected to your instance!

Step 3: Install Required Packages

Update your system and install essential packages:

apt install apt-transport-https ca-certificates gnupg curl -y
Terminal showing APT package management commands and output.

Create the keyrings directory and add the Jellyfin GPG key:

mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg

Step 4: Add Jellyfin Repository

Create a Jellyfin repository file:

cat <<EOF | tee /etc/apt/sources.list.d/jellyfin.sources
Types: deb
URIs: https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release )
Suites: $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release )
Components: main
Architectures: $( dpkg --print-architecture )
Signed-By: /etc/apt/keyrings/jellyfin.gpg
EOF
Terminal showing file and directory setup commands.

Update the package list:

apt update
Terminal showing APT package management commands and output.

Step 5: Install Jellyfin

Install Jellyfin using the following command:

apt install jellyfin -y
Terminal showing APT package management commands and output.

Step 6: Verify Jellyfin Service

Check the status of the Jellyfin service:

systemctl is-enabled jellyfin
systemctl status jellyfin
Terminal showing systemd service management commands or output.

Step 7: Manage Jellyfin Service

Use the following commands to manage the Jellyfin service:

  • Start Jellyfin:
  systemctl start jellyfin
  • Stop Jellyfin:
  systemctl stop jellyfin
  • Restart Jellyfin:
  systemctl restart jellyfin
Terminal showing systemd service management commands or output.

Step 8: Configure Firewall

Install UFW and configure it to allow necessary services:

apt install ufw -y
ufw allow OpenSSH
ufw enable
ufw allow "WWW Full"
ufw status
Terminal showing APT package management commands and output.
Terminal showing firewall configuration commands and rules.

Step 9: Install Apache and Certbot

Install Apache and Certbot for SSL configuration:

apt install apache2 certbot python3-certbot-apache -y
Terminal showing APT package management commands and output.

Check Apache status:

systemctl is-enabled apache2
systemctl status apache2
Terminal showing systemd service management commands or output.

Enable required Apache modules:

sudo a2enmod proxy proxy_http ssl proxy_wstunnel remoteip http2 headers
systemctl restart apache2
Terminal showing systemd service management commands or output.

Step 10: Set Up Apache as Reverse Proxy

Create a directory for Jellyfin’s web root and set permissions:

mkdir -p /var/www/html/jellyfin/public_html
chown -R www-data:www-data /var/www/html/jellyfin/public_html
Terminal showing file ownership or permission commands.

Obtain an SSL certificate for your domain using Certbot:

certbot certonly --agree-tos --email contact@shape.host --no-eff-email --webroot -w /var/www/html -d debian-tutorials.shape.host
Terminal showing Certbot certificate commands and messages.

Step 11: Configure Apache Virtual Host

Create a new Apache virtual host configuration:

nano /etc/apache2/sites-available/jellyfin.conf

Insert the following configuration, changing the domain name, SSL certificate paths, and server IP address as necessary:

<VirtualHost *:80>
    ServerName debian-tutorials.shape.host

    # Comment to prevent HTTP to HTTPS redirect
    Redirect permanent / https://debian-tutorials.shape.host/

    ErrorLog /var/log/apache2/debian-tutorials.shape.host-error.log
    CustomLog /var/log/apache2/debian-tutorials.shape.host-access.log combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName debian-tutorials.shape.host
    DocumentRoot /var/www/html/jellyfin/public_html

    ProxyPreserveHost On

    ProxyPass "/.well-known/" "!"
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"

    ProxyPass "/socket" "ws://192.168.10.15:8096/socket"
    ProxyPassReverse "/socket" "ws://192.168.10.15:8096/socket"

    ProxyPass "/" "http://192.168.10.15:8096/"
    ProxyPassReverse "/" "http://192.168.10.15:8096/"

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/debian-tutorials.shape.host/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/debian-tutorials.shape.host/privkey.pem
    Protocols h2 http/1.1

    SSLCipherSuite HIGH:RC4-SHA:AES128-SHA:!aNULL:!MD5
    SSLHonorCipherOrder on

    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

    ErrorLog /var/log/apache2/debian-tutorials.shape.host-error.log
    CustomLog /var/log/apache2/debian-tutorials.shape.host-access.log combined
</VirtualHost>
</IfModule>
Terminal showing web server configuration text.

Step 12: Enable Jellyfin Site and Restart Apache

Enable the Jellyfin site configuration:

a2ensite jellyfin.conf
apachectl configtest
systemctl restart apache2
Terminal showing an Apache configuration test.

Step 13: Access Jellyfin Web Interface

Launch your web browser and visit the domain name of your Jellyfin installation, such as https://your-domain.com/. If the configuration is successful, you should see the Jellyfin installation wizard and can proceed with setting up your media server.

First, select the default language for your Jellyfin installation and click Next.

Jellyfin setup interface.

Now, create a new admin user for your Jellyfin installation. Input your username and password, then click Next.

Jellyfin setup form for the first user account.

For the media libraries, you can configure them later. Click Next to continue.

Jellyfin setup screen for adding media libraries.

Select your preferred Metadata language for your libraries and click Next.

Jellyfin preferred metadata language and country selectors.

Check the option Allow remote connections to enable remote access to your jellyfin media server. Also, you can enable port mapping by checking the option. Then, click Next.

Jellyfin remote access settings with port mapping options.

If your configuration is successful, you should get the message You’re Done!. Click Finish to complete the jellyfin installation.

Jellyfin setup completion screen.

Now, you should be redirected to the Jellyfin login page. Input your admin user and password for Jellyfin, then click Sign In.

Jellyfin sign-in form.

If everything goes well, you should get the Jellyfin administration dashboard like this:

Jellyfin home screen with an empty media library.

Lastly, click on the Dashboard menu in the Administration section. You should see detailed information about your Jellyfin media server installation:

Jellyfin dashboard.

Jellyfin has now been successfully installed on your Debian 12 server. With Apache configured as a reverse proxy, you can securely access Jellyfin via HTTPS.

For hosting solutions like Linux SSD VPS, visit Shape.Host to explore a wide range of services that can help scale and manage your online presence.