If you a Linux realm user the requirements to have a convenient entertainment with *unix grows every day thus setting up a home media hub on a personal server and enjoying some movie streams, store movies, music and photos becomes a must.
As of today one common tool that enables you that that is choose by most Linux enthusiasts is Jellyfin.
"Jellyfin is a free, open-source media server that lets you organize, stream, and access your movies, TV shows, music, and photos from anywhere.
Jellyfin also can serve media to DLNA and Chromecast-enabled devices"
Running your own advanced media server becomes easiy task as Jellyfin is often a preferred choice to the older MiniDLNA (see my previous Configure own Media streaming minidlna Linux server to access data from your Smart TV). By using Docker, deploying powerful self-hosted applications becomes faster and easily reproduce across various Linux environments (e.g. do it multiple time for friends or companies).
By leveraging Docker, you can isolate Jellyfin from your host system, simplify updates, and ensure consistent performance across different Linux distributions."
It is possible to install jellyfin via both using common one by one component classical way or just roll on the docker image, in this article i'll show the docker install, as this will save you a lot of time and hussles to configure the Media server.
The main advantages to use the docker image are:
It is more:
- predictable
- easily upgradeable
- easy to debug
- easy to roll back and if necessery remove
In this short guide, we'll show how to install and run Jellyfin on a Linux system using Docker image an approach that avoids complex manual setup while providing a clean, portable easiiy to manage environment in minutes.
Here’s how I set it up:
1. Install Docker Minimal release
On Debian / Ubuntu and other Deb Linux derivatives:
# apt install docker.io docker-compose-plugin
# systemctl enable –now docker
Verify:
# docker version
If Docker doesn’t start, fix that first. Don’t continue until it works.
2. Create a Dedicated Jellyfin User
This avoids permission chaos later.
# useradd -r -s /usr/sbin/nologin jellyfin
Create directories:
# mkdir -p /srv/jellyfin/{config,cache}
# mkdir -p /srv/media
Set ownership:
# chown -R jellyfin:jellyfin /srv/jellyfin
Media directory permissions depend on how files are written. Read-only is fine for Jellyfin:
# chmod -R 755 /srv/media
3. Create Docker Compose File
To have latetest docker Jellyfin image, Create docker-compose.yml:
# cd /srv/jellyfin
# vim docker-compose.yml
Contents:
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
user: "1000:1000"
network_mode: bridge
ports:
– "8096:8096"
volumes:
– ./config:/config
– ./cache:/cache
– /srv/media:/media:ro
restart: unless-stopped
Important notes:
- No random UID/GID guessing — set it deliberately
- Media is read-only
- Config lives on the host, not inside the container
If UID 1000 isn’t correct on your system, check with:
# id jellyfin
4. Start Jellyfin
# docker compose up -d
Check logs:
# docker logs jellyfin
If it fails here take the time to closely debug what is gong and fix it now before proceeding to next steps.
5. Initial Setup (Browser)
Open:
http://server-ip:8096
During setup:
- Create a local user, not remote auth
- Disable automatic metadata downloads if bandwidth matters
- Point libraries to /media
Don’t rush through this. Jellyfin remembers your choices.

6. Hardware Acceleration ( to improve performance )
If your laptop has Intel graphics, install:
# apt install intel-media-va-driver vainfo
Verify:
# vainfo
Then add to docker-compose.yml
devices:
– /dev/dri:/dev/dri
Restart:
# docker compose down
# docker compose up -d
This massively reduces CPU usage during transcoding.
7. Keep Jellyfin docker image Updated
To Apply latest Jellifyn Docker image Updates, run:
# docker compose pull
# docker compose up -d
Backup:
In case if it breaks for a reason and you have to quickly rebuild always keep backup of:
- /srv/jellyfin/config
- Your Data (media) should already be stored on external NAS or NFS
Say Jellyfin breaks after an update, you can roll back the image copy over the config and enjoy.
8. Install and use Jeffilyn Media server extra productivity plugins
Once the server is up and running you can further extend it as Jeffilyn supports a number of helpful plugins.
A three common plugins of choice people do use together with it you might want to try are:
- Inline TODOs: Automatically collects all tasks marked in your notes into one summary page.
- Key Promoter X: An IntelliJ plugin that teaches you keyboard shortcuts by showing a popup every time you use the mouse for a command.
- Simple Backup: Widely considered an essential plugin for Joplin to prevent data loss.
Common Mistakes to Avoid durinb build
Double check the install for authorization / permission issues:
- Don't run Jellyfin as root
- Don't let it have permission to write to media directories
- Again Add firewall to prevent port 8096 direct exposure to the internet
- Don't mix installs and Docker installs
If you want it public-facing (service to be accessible on the Internet), put it behind a reverse proxy be it NGINX or Haproxy (see my previous how to protect Applications from SQL Inject, Redirects and Hijacking with Haproxy Load Balancer) or Apache Reverse Proxy and make sure TLS is configured. That’s a great topic for a separate article for a reason.
What you should have achieved ?With this few steps you'll Have a Jeffylin Linux self – hosted Media Solution with Clear separation of data, config, and software.
The docker setup is easy to update destroy and if necessery rebuilt.
To access the Media Library just setup you can use Jeffylin Web client / Jeffilyn Media Player desktop (stand-alone) app or the Apps available for Android and various versions of iOS and even use it with a client on LG TVs.











