Skip to content

How to Install Jellyfin Media Server on a VPS (Docker, Debian or Ubuntu)

3 min read

Applies to: Jellyfin 12.1 with Docker, or from Jellyfin’s repository on Debian 11 to 13 and Ubuntu 20.04, 22.04, 24.04 and 26.04

Jellyfin is a free, open-source media server: it organises your films, series and music and streams them to browsers, TVs, phones and tablets, without a subscription. We installed Jellyfin 12.1 (released 15 September 2026) both ways described below.

Before you start

  • Only stream media you have the rights to.
  • Disk space is usually the limit; put your media on a disk or volume large enough for the library.
  • Transcoding (converting video on the fly for devices that can’t play the original) uses a lot of CPU. Clients that play the file directly use almost none; a GPU helps for heavy transcoding.

Option 1: Docker

With Docker installed (install Docker on Debian and Ubuntu):

sudo mkdir -p /srv/jellyfin/config /srv/jellyfin/cache /srv/media
sudo docker run -d --name jellyfin --restart unless-stopped \
  -p 8096:8096 \
  -v /srv/jellyfin/config:/config \
  -v /srv/jellyfin/cache:/cache \
  -v /srv/media:/media:ro \
  jellyfin/jellyfin:latest

Check it: curl http://localhost:8096/health answered Healthy in our test after about a minute (before that it says Jellyfin Server is loading). The image includes Jellyfin’s own FFmpeg build for transcoding. /config holds your settings and users; back it up.

Option 2: Jellyfin’s repository (Debian and Ubuntu)

curl -fsSL https://repo.jellyfin.org/install-debuntu.sh -o install-jellyfin.sh
less install-jellyfin.sh          # read what it does
sudo bash install-jellyfin.sh

The script adds Jellyfin’s repository and installs the packages; on Debian 13 it installed jellyfin 12.1+deb13 and jellyfin-ffmpeg8. Jellyfin then runs as the jellyfin service (sudo systemctl status jellyfin) and updates with apt upgrade.

First setup

  1. Allow the port only while you set up, or better, use an SSH tunnel: ssh -L 8096:localhost:8096 user@SERVER-IP, then open http://localhost:8096.
  2. The setup wizard asks for the language, an administrator account and your media libraries (for Docker, the folder is /media).
  3. Choose the metadata language and finish; Jellyfin scans the library.

Upload your media

Copy files with SFTP, scp -r or rsync into /srv/media, sorted into folders such as Movies and Shows.

Use it securely from anywhere

  • Put a reverse proxy with a free SSL certificate in front of port 8096 and a name such as media.example.com (see Apache as a reverse proxy), and don’t expose 8096 directly.
  • Use strong passwords for every Jellyfin user, and keep Jellyfin updated.

A KVM VPS works well for a personal library; for large libraries or heavy transcoding, a dedicated server gives you more disk and CPU.

Official documentation: Jellyfin on Linux and Jellyfin in a container.

Was this answer helpful?

Still stuck? Open a ticket