Introduction

Jellyfin is a FOSS cloud-based media server that you can self-host to manage all your media whether you are home or on the run. The software has native phone apps for all smartphone platforms and desktop apps as well. You can also access your media from a web browser. This guide will show you how to create your server and access it.

Resources:

https://jellyfin.org/docs/general/administration/installing.html#debian

https://www.linode.com/docs/guides/how-to-install-jellyfin/

Setup subdomain

We are using cPanel here to setup the subdomain. If you are using a different web control manager, the process will be similar. We just need to setup a subdomain and point the A record to it. Note that we need to get the IP address in the next step.

Create Server

Create the server on Linode. Use my affiliate link https://tlm.li/linode to get $100 in credit good for 60 days. In my case, I am using Debian. You can use several different distros, but in this case, I will do Debian because it is very stable and will not roll versions to quickly making it a better server build.

Once the linode is setup, you will get the IP address which will need added to the A Record in your sub domain.

Install Software

Since we are logged in as the root user on the server setup, we do not need to mess with sudo. We will first check for upgrades and install them:

apt update
apt upgrade


Then we will enable the repos that are provided in Debian:

apt install extrepo
extrepo enable jellyfin

Install Jellyfin

apt update
apt install jellyfin

Configure basic server

Before I move on, I will create some folders to put media in. This is simply running the mkdir command where I want the folders. In this case I am navigating to the /home directory and adding folders:

mkdir movies
mkdir music
mkdir abooks

Setup proxy

Setup the reverse proxy. First create a web server:

apt install apache2

And the Proxy:

a2enmod proxy_http

Create the site. First, create the new server file:

sudo nano /etc/apache2/sites-available/jellyfin.switchedtolinux.com.conf

Mine is jellyfin.switchedtolinux.com so replace each instance of that with your exact server URL name:

<VirtualHost *:80>
ServerName jellyfin.switchedtolinux.com
ErrorLog /var/log/apache2/jellyfin-error.log
CustomLog /var/log/apache2/jellyfin-access.log combined
ProxyPreserveHost On
ProxyPass "/embywebsocket" "ws://127.0.0.1:8096/embywebsocket"
ProxyPassReverse "/embywebsocket" "ws://127.0.0.1:8096/embywebsocket"
ProxyPass "/" "http://127.0.0.1:8096/"
ProxyPassReverse "/" "http://127.0.0.1:8096/"
</VirtualHost>

Save the file and enable the site:

a2ensite jellyfin.switchedtolinux.com.conf
systemctl restart apache2

Setup SSL

Now we want to install the SSL. You can follow the instructions which installs Snap. I only use Snap as an absolute last resort, so I will install everything without snap directly from the Debian repository which still works as of the time of this writing. You need two packages:

apt install cert-bot
apt install python3-certbot-apache

Use the command:

certbot

Should detect the plugin and websites and give a list of sites to install the SSL for.

Restart the apache server:

service apache2 restart

You should have an SSL installed on your server now.

Upload Media

Now you need to move files to the server. I am using SCP as an easy command line utility. It works by moving files between the server and the local machine by specifying the location including the server creds and the location of the file.

For a single file, I am moving 1984 (1956).mp4 from the local directory to the server in the movies folder:

scp 1984\ \(1956\).mp4 This email address is being protected from spambots. You need JavaScript enabled to view it.:/home/movies

Note that the \ \ in the command are because I have spaces in the file name.

To add a whole folder, use the -r tag (for recursive):

scp -r Rush/ This email address is being protected from spambots. You need JavaScript enabled to view it.:/home/music