Installing Jellyfin: Your Open-Source Media Streaming Solution

Jellyfin in Proxmox LXC!

Harish Thangadurai
7 min readSep 21, 2024

In our previous article, we explored the installation and configuration of Sonarr, a powerful tool for TV show management.

Now, let’s dive into another indispensable service for media enthusiasts — Jellyfin.

What is Jellyfin?

Jellyfin is an open-source media streaming solution that manages and serves our personal media library across multiple devices. Whether we have a collection of movies, TV shows, music, or even live TV, Jellyfin provides an easy and customizable way to access and organize all our content. One of the most attractive aspects of Jellyfin is that it is completely free with no licensing or subscription fees, unlike other popular media servers.

Key features of Jellyfin:

  1. Completely Open-Source
  2. Multi-Platform Support
  3. Full Media Library Management
  4. Transcoding and Streaming
  5. Multi-User Streaming

Disclaimer: Legal and Ethical Considerations

Before we dive into the installation and usage of Jellyfin, it’s crucial to emphasize the importance of adhering to legal and ethical standards. Downloading copyrighted material without proper authorization is illegal in many jurisdictions and can lead to severe consequences. Always respect the terms and conditions of Usenet indexers and ensure compliance with all relevant laws and regulations.

Our guide on Jellyfin is intended solely for educational purposes, assuming users will engage in lawful and ethical activities. We do not endorse or encourage any illegal or unethical behavior, including the unauthorized sharing or downloading of copyrighted material.

Steps to install Jellyfin:

  • Before proceeding we need a few information to be obtained which we’ll be using in further steps. We can quickly fire up a terminal and connect to the LXC via SSH or connect via Proxmox Console.
  • We need to find out the Process ID (PUID) and Process Group ID (PGID) of the user from which we’ll be deploying this stack. These variables specify the user and group ownership for processes running inside Docker containers.
  • We can type in the below command to find the same.
id <username>

Note: Replace <username> with the name of the user from which the stack will be deployed

  • Now, we’ll be using Portainer Stack to install Jellyfin in our Home Lab. First, let us log in to our Portainer instance and then head to our local docker instance by clicking on the local option.
  • Here we can use the Stack option to deploy our Jellyfin instance using our docker-compose file. Let’s click on the Stacks option.
  • We can click on the Add Stack button on the top right to create a new stack.
  • We can give the name of the stack and then copy and paste the below docker-compose file of our Jellyfin instance. Feel free to make changes to the file based on your needs.
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
hostname: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Kolkata
volumes:
- jellyfin_config:/config
- /home/admin/NFS/Shows:/data/shows
- /home/admin/NFS/Movies:/data/movies
ports:
- 8096:8096
- 8920:8920
- 7359:7359/udp
- 1900:1900/udp
restart: always

volumes:
jellyfin_config:

Note: Replace the IDs of PUID, and PGID with the IDs of your user. TZ denotes time zone which can also be changed based on your region

  • In the above compose file, we will be creating a volume to store all our Jellyfin configuration files. Also, I have mapped the folders that contain the media files.
  • Once done we can click on the Deploy the Stack button to deploy our Jellyfin instance.
  • We can see that the stack has been successfully created. On viewing it, we can see that our Jellyfin instance has been successfully installed and the container has started running.

We have successfully installed the Jellyfin instance on our Home Lab. We can check out our installation now.

Configuring Jellyfin:

  • First, we need to head to the Jellyfin login page. By default, the admin login would reside on port 8096. We can type in the IP Address:8096 to open the same.

Note: In the docker-compose file, we have used port 8096. If this value is changed in the file then use the port number that you have given

  • We will be greeted with the above screen. Here we can select our language and then hit the next button.
  • Here we need to give in the user details of our admin account. We can type in the username and the password. Once done we can hit the next button.
  • Here we can add the media folders that we mapped in the docker-compose file. I’ll skip this step as of now. We will still be able to add it later.
  • Here we can configure the preferred language in which we would like our metadata to be available for all our media files. We can select our preferred option and proceed further.
  • We can enable or disable remote access to this server on this page. I’ll leave it in the default settings for now.
  • We have successfully initialized our Jellyfin instance now.
  • Upon hitting the finish button we would be greeted with the below login screen
  • We can type in the user details that we configured earlier during the setup to log in to our Jellyfin instance.
  • Lastly, we need to add the folders that contain all our media files for those files to be visible.
  • We can click on the “Would you like to create one now?” link to add our very first library.
  • Here we can click on the “Add Media Library” button to add our very first media folder.
  • We can select the type of content under the “Content Type” option first. Once done we can give in the name that can be shown under the “Display Name” option.
  • Now to add our media folder, we can click on the + icon next to the “Folders” option and select the folder that we mapped in the docker-compose file for that media type.
  • Upon clicking the folder, Jellyfin would list all the available media inside that folder of the selected content type. We can click on the “Ok” button to add the folder.
  • There are a few other options as well. Feel free to scroll down, check the options, and make the changes as per your preference. I’ll leave it at the default configurations for now.
  • We now have successfully added our very first media library. Jellyfin now would start scanning for the media files present in our library and start with fetching the metadata for the same.
  • I’ll add a few more of my media folders now. Upon adding our library, we can click on the Jellyfin logo on the top left corner to head back to our home screen.
  • Upon completion of the scan, all our media files will be available in the folder.
  • We can open any of the items, hit the play button and the media would start playing in a built-in player.

We have now successfully installed and configured our Jellyfin instance. We have also added our media files successfully and have tested out our configurations by playing our media files.

There are many configuration options available in Jellyfin. Feel free to explore and configure as per your preference and liking. There are also native clients available for various platforms. We can install it directly and connect to our instance at ease.

In this article, we have explored Jellyfin and went into the step-by-step process of deploying the same in our Home Lab.

In the next article, we will be looking into another service that we will be deploying in our Home Lab. Stay tuned for more detailed instructions on expanding our Home Labbing capabilities.

Happy Homelabbing!!!

--

--

Harish Thangadurai
Harish Thangadurai

Written by Harish Thangadurai

👨‍💻 Automation Engineer | 🌍Tech Explorer | 🧠 Lifelong Learner

No responses yet