Install Jellyfin Media Server on Debian/Ubuntu
Install the free, open-source Jellyfin media server on Debian or Ubuntu using the official APT repository, then reach the setup wizard on port 8096.
bash#!/usr/bin/env bash
# Install Jellyfin from the official APT repo on Debian/Ubuntu.
set -euo pipefail
# Easiest path: Jellyfin's official installer adds the repo + installs the server.
curl -fsSL https://repo.jellyfin.org/install-debuntu.sh | sudo bash
# Enable and start (the installer normally does this; harmless to repeat)
sudo systemctl enable --now jellyfin
sudo systemctl status jellyfin --no-pager
echo
echo "Setup wizard: http://<this-server-ip>:8096"
echo "There is no server to claim — create the admin user in the wizard."
What this does
Installs Jellyfin from Jellyfin’s official APT repository so it stays updated with apt upgrade — the right approach on a Debian or Ubuntu box, or inside a container. Jellyfin is fully open source with no paid tier, so hardware transcoding and every client are included at no cost. After this, Jellyfin listens on port 8096 and you finish setup in the browser. The full walkthrough (libraries, bind-mounts, remote access) is in the Install Jellyfin on a NAS or Proxmox LXC guide.
Why this approach
Jellyfin is the fully open-source alternative to Plex — no paid tier, no account required, hardware transcoding and every client included at zero cost. The functional difference for most homelab users is minor: both serve video to web browsers, smart TVs, and mobile apps over the same local network. The meaningful differences are philosophical. Jellyfin has no telemetry, no optional cloud features that require a monthly subscription, and no risk of feature changes driven by investor pressure. If Plex’s direction ever stopped working for your use case, Jellyfin would be a direct replacement.
The APT repository install is the right approach for the same reason as Plex: it keeps Jellyfin updated through the normal package manager flow without requiring manual download-and-install each time. Jellyfin also publishes a Docker image if you prefer a container deployment, but on a Proxmox LXC running Debian, the native package install is cleaner and more integrated with systemd service management.
Hardware transcoding in Jellyfin is enabled in the web dashboard under Administration → Playback and is genuinely free — no Plex Pass equivalent required. The catch is driver availability in the container or VM: Intel Quick Sync requires the Intel media driver packages, and NVIDIA requires CUDA, both of which need to be installed and the device passed through to the container. The Jellyfin documentation has distro-specific instructions; the transcoding guide linked in the Notes section covers when transcoding actually kicks in versus when Jellyfin can Direct Play.
Prerequisites
- Debian 11/12 or Ubuntu 20.04+ (bare metal, VM, or LXC)
curlandsudo- Read access to wherever your media lives (bind-mount it in for containers)
Manual repo install (if you don’t want to pipe a script to bash)
The one-liner above is convenient but pipes a remote script into a shell. To do the same thing explicitly, add the key and repo yourself:
# Signing key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
# Repo (Debian bookworm shown; swap codename for your release)
echo "deb [signed-by=/etc/apt/keyrings/jellyfin.gpg] https://repo.jellyfin.org/debian bookworm main" \
| sudo tee /etc/apt/sources.list.d/jellyfin.list
sudo apt-get update
sudo apt-get install -y jellyfin
No claim step — just the wizard
Unlike Plex, Jellyfin has no central account service, so there is nothing to claim. Open http://<server-ip>:8096 from any machine on the network and the first-run wizard walks you through creating the admin user and adding libraries.
Notes
- Updates:
sudo apt-get update && sudo apt-get install --only-upgrade jellyfin. The official repo is the whole point — no manual package hunting. - On a NAS instead of Debian? Run the official
jellyfin/jellyfinDocker image (or the LinuxServer.io image) from your NAS container manager — the APT repo is Debian/Ubuntu only. - Permissions: Jellyfin runs as the
jellyfinuser. If a library shows empty, the media files are likely unreadable by that user — check ownership withls -ln. - Hardware transcoding is free in Jellyfin — enable it in Dashboard → Playback. Read the Direct Play & transcoding guide first to understand when it actually kicks in.