compose.yaml that runs the official jellyfin/jellyfin image with /config, /cache and a read-only /media folder, publish port 8096 on 127.0.0.1 and run sudo docker compose up -d. Serve it over HTTPS with Nginx, then complete the setup wizard and add your libraries.
What is Jellyfin?
Jellyfin is a free, open-source media server. It organises your films, series and music, fetches artwork and metadata, and streams them to a browser, phone, smart TV or the Jellyfin apps.What should I know before running Jellyfin on a VPS?
- Transcoding is CPU-heavy. When a device can’t play a file as it is, Jellyfin converts it on the fly. Jellyfin’s hardware guide says video transcoding on the CPU is “very performance demanding”, and that HEVC, VP9 and AV1 can be very demanding even on modern CPUs without hardware acceleration. A typical VPS has no GPU, so plan for direct play: store files in formats your devices play natively.
- Streaming uses bandwidth. Every stream counts as outgoing traffic. Check your usage in VPS traffic and bandwidth.
- Plan RAM and disk. Jellyfin recommends at least 8 GB RAM for an average setup; a Linux server without a desktop may need only 4 GB. Keep Jellyfin’s own files on SSD; media can sit on slower storage.
Before you start
- Install Docker and Nginx. The commands use
sudo; leave it out if you areroot. - Point
media.example.comat your server. See point a domain to your server. - Put your media in one folder, for example
/srv/media/moviesand/srv/media/shows. Upload files with SFTP or rsync.
How to install Jellyfin with Docker Compose
1
Create the folders
2
Create compose.yaml
Based on the official container guide:
/config holds Jellyfin’s settings and database, /cache its cache and /media your library, mounted read-only so Jellyfin can’t change your files. The official example also publishes 7359/udp for auto-discovery on a local network; a VPS doesn’t need it.3
Start Jellyfin
How to serve Jellyfin over HTTPS with Nginx
1
Create the Nginx site
Create
/etc/nginx/sites-available/media.example.com (Ubuntu / Debian) or /etc/nginx/conf.d/media.example.com.conf (AlmaLinux / Rocky). This follows the Jellyfin Nginx example:2
Enable, test and get a certificate
sudo setsebool -P httpd_can_network_connect 1 before testing.How to complete the setup wizard
1
Choose a language
Open
https://media.example.com. On Select Language, pick the language for the wizard.2
Create the administrator
On Setup Administrator Account, enter a username and a strong password.
3
Add your libraries
On Add Media Libraries, click +, choose a content type (for example Movies), give it a name and add the folder
/media/movies. Repeat for /media/shows.4
Finish the wizard
Choose a metadata language. On the networking step, keep remote access on and leave automatic port mapping (UPnP) off. Then log in.
How to check it worked
Up (healthy) once the built-in health check on /health passes. Then play a file in the browser to confirm streaming works.
How to back up Jellyfin
On Jellyfin 10.11 and later, open the Dashboard, go to Backups and click Create Backup. The zip lands in the backups folder inside the data directory (./config here) and always contains the database; you can add metadata, subtitles and trickplay images.
For a full manual backup, stop Jellyfin, copy the config folder, then start it again:
How to update Jellyfin
jellyfin/jellyfin:10.11 instead of latest. Back up before every upgrade and read the release notes.
Frequently asked questions
Why are my folders empty or missing in the library dialog?
Usually a permissions problem. Check that the files under/srv/media are readable by all users (sudo chmod -R a+rX /srv/media) and that you used the container path /media/..., not the host path.
Why is playback buffering?
The server is probably transcoding and the CPU can’t keep up, or the connection is too slow for the bitrate. Lower the quality in the player, or convert the file to a format your device plays directly.Can I use hardware transcoding?
Only if your server has a supported GPU or video encoder and you pass it into the container. Without one, Jellyfin transcodes on the CPU. If your server has one, follow Jellyfin’s hardware acceleration guide.Which port does Jellyfin use?
Port 8096 (TCP) for HTTP. With the setup above it listens only on127.0.0.1, and visitors reach it on 443 through Nginx.
Related guides
VPS and dedicated server guides
Every guide in this section.
Transfer files with SFTP
Upload your media.
Mount a new disk
Extra space for your library.
Find what is using CPU
Spot heavy transcoding.
VPS traffic and bandwidth
Track streaming traffic.
Checked against the official Jellyfin documentation on 4 November 2026 (image
jellyfin/jellyfin:latest); compose.yaml validated with docker compose config and the Nginx configuration syntax-tested on Ubuntu 24.04 LTS. Menu names can change between Jellyfin releases.Need Extra Help?
If you encounter any issues, our support team is ready to assist:- Live Chat: Quick assistance via our website.
- Support Ticket: Open a Ticket
- Discord: Join our Community
- Email: support@freakhosting.com
Last Updated: November 2026