Skip to main content
To install Jellyfin with Docker, create a 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.
Only add media that you own or have the rights to stream. Don’t use a server to share copyrighted content with others.

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

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

On AlmaLinux / Rocky, run 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.
Do the wizard as soon as the site is reachable, so nobody else creates the administrator first.

How to check it worked

The container shows 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:
Back up the media itself separately, for example with rsync.

How to update Jellyfin

To control upgrades, pin a minor version such as 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 on 127.0.0.1, and visitors reach it on 443 through Nginx.

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:

Save on Your Hosting

Ready to upgrade your hosting? Use code KB20 at checkout for 20% off your first order!

Last Updated: November 2026