Ein per­sön­li­cher Jellyfin-Server ist eine prak­ti­sche Lösung, wenn Sie Filme, Serien, Musik oder Fotos zentral speichern und selbst hosten möchten. Statt Ihre Medien bei einem fremden Strea­ming­dienst abzulegen, behalten Sie auf allen Geräten die volle Kontrolle über Dateien, Be­nut­zer­kon­ten und den Zugriff.

Free VPS Trial
vServer kostenlos testen für 30 Tage

Lassen Sie sich von den Vorteilen über­zeu­gen. Probieren Sie Ihren Virtual Server ganz in Ruhe 30 Tage lang aus!

Was ist Jellyfin?

Jellyfin ist ein Open-Source-Me­di­en­ser­ver, mit dem Sie Ihre eigene Me­di­en­samm­lung or­ga­ni­sie­ren, ka­ta­lo­gi­sie­ren und per Web­brow­ser oder App auf ver­schie­de­ne Endgeräte streamen können. Die Software un­ter­stützt typische Bi­blio­the­ken wie Filme, Serien, Musik und Fotos, bietet Be­nut­zer­ver­wal­tung, Metadaten, Cover, Wie­der­ga­be­fort­schritt sowie Streaming über das Netzwerk.

Weil Jellyfin selbst gehostet wird, läuft der Dienst un­ab­hän­gig von einem externen Anbieter. Das Internet wird nur für Dinge wie Me­ta­da­ten­ab­ruf oder externen Zugriff benötigt. Für den Zugriff im Heimnetz nutzt Jellyfin stan­dard­mä­ßig HTTP auf Port 8096. Optional kann auch HTTPS ein­ge­setzt werden, wobei die of­fi­zi­el­le Do­ku­men­ta­ti­on für externen Zugriff einen Reverse Proxy und ver­trau­ens­wür­di­ge Zer­ti­fi­ka­te empfiehlt.

Welche Server-Vor­aus­set­zun­gen sind sinnvoll?

Bevor Sie in­stal­lie­ren, sollten Sie zuerst den passenden Server-Typ auswählen. Für Jellyfin ist nicht nur ent­schei­dend, wie viele Dateien Sie speichern möchten, sondern vor allem, ob Ihre Geräte die Me­di­en­da­tei­en direkt abspielen können oder ob der Server sie während der Wie­der­ga­be umwandeln muss. Diese Um­wand­lung heißt Trans­ko­die­rung und ist besonders res­sour­cen­in­ten­siv. Besonders 4K, HDR-zu-SDR-To­ne­map­ping und mehrere gleich­zei­ti­ge Streams können CPU oder GPU stark belasten.

Die Jellyfin-Do­ku­men­ta­ti­on nennt für durch­schnitt­li­che In­stal­la­tio­nen min­des­tens 8 GB RAM als all­ge­mei­ne Emp­feh­lung. Für einen Linux-Server ohne grafische Ober­flä­che können 4 GB genügen. Außerdem empfiehlt Jellyfin bei Hard­ware­be­schleu­ni­gung auf Nicht-Apple-Systemen Intel-Grafik, weil Ein­rich­tung und Encoder-Qualität in der Praxis günstig ausfallen.

Im Folgenden zeigen wir anhand einiger Szenarien, welcher Server sich für Sie und Ihren in­di­vi­du­el­len An­wen­dungs­fall am besten eignet.

Pri­vat­an­wen­den­de und Familien

Wenn Sie Jellyfin haupt­säch­lich allein oder mit zwei bis drei Personen nutzen und Ihre Dateien schon in gängigen Vi­deo­for­ma­ten wie MP4 mit H.264 vorliegen, reicht oft ein guter VPS. In diesem Szenario muss der Server meist nur Dateien aus­lie­fern, statt sie bei jeder Wie­der­ga­be neu zu berechnen. Dafür ist ein Linux-VPS ein sinn­vol­ler Einstieg, wobei min­des­tens 4 vCores, 4 GB RAM und etwa 120 GB NVMe-Speicher vorhanden sein sollten. Wenn Sie etwas mehr Luft für Metadaten, größere Bi­blio­the­ken und ge­le­gent­li­che Um­wand­lun­gen möchten, sind 6 vCores, 8 GB RAM und 240 GB NVMe die bequemere Wahl.

Der Vorteil eines VPS liegt vor allem im Preis-Leistungs-Ver­hält­nis. Sie erhalten genug Leistung für einen per­sön­li­chen Me­di­en­ser­ver, ohne sofort in de­di­zier­te Hardware in­ves­tie­ren zu müssen. Diese Variante ist vor allem dann passend, wenn Ihre Endgeräte moderne Formate bereits nativ wie­der­ge­ben und Trans­ko­die­rung nur selten nötig ist.

Fort­ge­schrit­te­ne Nut­ze­rin­nen und Nutzer

Wenn Sie etwas mehr Spielraum brauchen, weil Ihre Bi­blio­thek schneller wächst, Sie mehrere Be­nut­zer­kon­ten anlegen oder die Server-Res­sour­cen flexibler anpassen möchten, sind Cloud Server be­zie­hungs­wei­se so­ge­nann­te Cloud Cubes sinnvoll. Server und Cubes ab 4 vCPU, 8 GB RAM und 240 GB Storage können genutzt werden. Sie haben damit deutlich mehr Luft für parallele Scans, Metadaten, Bi­blio­the­ken und ge­le­gent­li­che Trans­ko­die­run­gen.

Der große Vorteil dieser Variante ist die Fle­xi­bi­li­tät. Cloud-Server lassen sich sehr gut an ver­än­der­te An­for­de­run­gen anpassen. Das ist praktisch, wenn Sie klein anfangen, aber später mehrere Bi­blio­the­ken, mehr Nut­ze­rin­nen und Nutzer oder zu­sätz­li­che Dienste wie Reverse Proxy, Mo­ni­to­ring oder Backup ergänzen möchten. Für fort­ge­schrit­te­ne Pri­vat­nut­zen­de, kleine Teams oder Homelab-affine User ist das oft die an­ge­nehms­te Mit­tel­klas­se.

Power-User und 4K-Lieb­ha­be­rin­nen und -Liebhaber

Nut­ze­rin­nen und Nutzer, die viele 4K-Inhalte besitzen, HDR-Material an ältere Geräte aus­lie­fern möchten oder mehrere User gleich­zei­tig trans­ko­die­ren, kommen mit einem kleinen VPS schnell an ihre Grenzen. Jellyfin weist aus­drück­lich darauf hin, dass soft­ware­ba­sier­tes HDR-zu-SDR-To­ne­map­ping extrem CPU-lastig sein kann. Für solche Szenarien ist ein Dedicated Server be­zie­hungs­wei­se Bare Metal Server die bessere Wahl, weil Sie dort de­di­zier­te Hardware nutzen und Re­chen­leis­tung, RAM und Speicher nicht mit anderen Workloads teilen.

Hierbei sollten Sie an min­des­tens 8 CPU-Kerne, 16 bis 32 GB RAM und schnellen SSD- oder NVMe-Speicher denken. Ideal ist zu­sätz­lich eine für Hard­ware­trans­ko­die­rung geeignete Intel- oder NVIDIA-GPU.

Be­triebs­sys­tem-Emp­feh­lung: Debian oder Ubuntu?

Beide Linux-Server-Dis­tri­bu­tio­nen sind für Jellyfin geeignet, aber Ubuntu Server 24.04 LTS ist für die meisten Ein­stei­ge­rin­nen und Ein­stei­ger die prak­ti­sche­re Wahl. Docker do­ku­men­tiert Ubuntu 24.04 offiziell und viele An­lei­tun­gen beziehen sich direkt auf Ubuntu. Debian ist ebenfalls sehr stabil, Ubuntu nimmt Ihnen jedoch ein paar Stol­per­fal­len ab.

Tipp

Wenn Ihre Me­di­en­samm­lung sehr schnell wächst, kann externer Speicher sinnvoll werden. Für An­fän­ge­rin­nen und Anfänger sind lokale SSD- oder NVMe-Speicher auf dem Server ideal. Externer Speicher wie ein zu­sätz­li­cher Object Storage lässt sich ebenfalls nutzen, muss dafür jedoch zunächst auf dem Server als Da­tei­sys­tem ein­ge­bun­den werden, bei­spiels­wei­se über ein ent­spre­chen­des Mount-Tool. Jellyfin greift nämlich direkt auf Dateien im Da­tei­sys­tem zu und un­ter­stützt Object Storage nicht direkt als native Spei­cher­quel­le. Al­ter­na­tiv kann Object Storage auch als Ar­chiv­spei­cher für ältere Medien genutzt werden, die nicht ständig verfügbar sein müssen.

Schritt-für-Schritt: Jellyfin mit Docker auf Ubuntu Server in­stal­lie­ren

Im folgenden Beispiel zeigen wir die In­stal­la­ti­on von Jellyfin auf Ubuntu Server 24.04 LTS mit Docker Engine und Docker Compose Plugin. Diese Variante ist vor allem für An­fän­ge­rin­nen und Anfänger eine gute Lösung, weil Docker die Anwendung sauber kapselt und spätere Updates ver­ein­facht.

Schritt 1: Ubuntu-Server ak­tua­li­sie­ren

Melden Sie sich per SSH auf Ihrem Server an und bringen Sie zunächst die Pa­ket­quel­len und in­stal­lier­ten Pakete auf den aktuellen Stand:

sudo apt update
sudo apt upgrade -y
bash

Danach können Sie den Server bei Bedarf neu starten (nach einem Neustart ist eine neue Anmeldung er­for­der­lich):

sudo reboot
bash

Dieser Schritt ist wichtig, damit Sie mit aktuellen Paketen, Si­cher­heits­up­dates und einem sauberen System beginnen. Gerade bei einem frisch be­reit­ge­stell­ten Ubuntu-Server ist das der richtige erste Handgriff.

Schritt 2: Docker auf Ubuntu 24.04 in­stal­lie­ren

In einem nächsten Schritt müssen Sie Docker unter Ubuntu 24.04 in­stal­lie­ren. Hierzu empfiehlt der Dienst die Ein­rich­tung des of­fi­zi­el­len APT-Re­po­si­to­ries. Zuerst entfernen Sie dazu ältere oder po­ten­zi­ell kon­flikt­träch­ti­ge Pakete:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc -y
bash

Nun richten Sie das of­fi­zi­el­le Docker-Re­po­si­to­ry ein:

sudo apt update
sudo apt install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
bash

Danach in­stal­lie­ren Sie mit folgendem Ter­mi­nal­be­fehl Docker Engine, Buildx und das Compose-Plugin:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
bash

Prüfen Sie an­schlie­ßend, ob Docker läuft:

sudo systemctl status docker
bash

Der Status sollte als active (running) angezeigt werden:

Bild: Statusanzeige von Docker
Die Anzeige „active“ bestätigt, dass Docker läuft.

Es lohnt sich, die In­stal­la­ti­on ab­schlie­ßend mit dem of­fi­zi­el­len Test­con­tai­ner zu testen.

sudo docker run hello-world
bash

Die Ausgabe sollte fol­gen­der­ma­ßen aussehen:

Bild: Hello World von Docker
Sobald Sie die Hello-World-Nachricht sehen, können Sie sicher sein, dass Docker nicht nur in­stal­liert ist, sondern auch wie gewünscht funk­tio­niert.

Schritt 3: Docker ohne sudo nutzen

Stan­dard­mä­ßig müssen Docker-Befehle oft mit sudo aus­ge­führt werden. Wenn Sie möchten, können Sie Ihren User der Gruppe docker hin­zu­fü­gen:

sudo usermod -aG docker $USER
newgrp docker
bash
Hinweis

Die Docker-Do­ku­men­ta­ti­on weist darauf hin, dass Mit­glie­der der Gruppe docker root-ähnliche Rechte erhalten. Für einen per­sön­li­chen Server ist das üblich, aber Sie sollten wissen, dass das in An­wen­dun­gen, in denen auch fremde User Zugriff auf Ihren Server erhalten, si­cher­heits­tech­nisch pro­ble­ma­tisch sein kann.

Schritt 4: Ver­zeich­nis­struk­tur für Jellyfin anlegen

Nachdem die Vor­be­rei­tun­gen ab­ge­schlos­sen wurden, starten wir mit der Ver­zeich­nis­struk­tur für den Jellyfin-Server, um so den Jellyfin-Install vor­zu­be­rei­ten. Damit Kon­fi­gu­ra­ti­on, Cache und Medien sauber getrennt sind, legen Sie auf dem Host­sys­tem passende Ordner an. Wir nutzen folgende Ord­ner­struk­tur (Sie können die Ordner aber auch anders or­ga­ni­sie­ren):

mkdir -p ~/jellyfin/config
mkdir -p ~/jellyfin/cache
mkdir -p ~/media/filme
mkdir -p ~/media/serien
mkdir -p ~/media/musik
mkdir -p ~/media/fotos
bash

config enthält später die Ser­ver­kon­fi­gu­ra­ti­on, User und Datenbank. cache dient tem­po­rä­ren Daten. Die ei­gent­li­chen Me­di­en­da­tei­en liegen in den ge­trenn­ten Bi­blio­theks­ord­nern.

Schritt 5: UID und GID des Users ermitteln

Jellyfin kann im Container mit der User- und Gruppen-ID Ihres Linux-Users laufen. Das hilft beim Umgang mit den Da­tei­rech­ten. Ermitteln Sie daher zuerst beide Werte mit:

id
bash

Die aus­ge­ge­be­nen Zahlen benötigen Sie gleich in der Compose-Datei, weshalb Sie sich diese notieren sollten.

Schritt 6: Docker-Compose-Datei für Jellyfin erstellen

Wechseln Sie in das Ar­beits­ver­zeich­nis und erstellen Sie eine Datei namens docker-compose.yml. Wir nutzen für die Er­stel­lung den Text­edi­tor nano; Sie können die Datei aber auf jedem be­lie­bi­gen Weg erstellen.

mkdir -p ~/jellyfin
cd ~/jellyfin
nano docker-compose.yml
bash

Fügen Sie in die soeben erstellte Datei den folgenden Inhalt ein:

services:
    jellyfin:
        image: jellyfin/jellyfin
        container_name: jellyfin
        user: "1000:1000"
        ports:
            - "8096:8096/tcp"
            - "7359:7359/udp"
        volumes:
            - ./config:/config
            - ./cache:/cache
            - type: bind
                source: /home/IHRBENUTZER/media/filme
                target: /media/filme
                read_only: true
            - type: bind
                source: /home/IHRBENUTZER/media/serien
                target: /media/serien
                read_only: true
            - type: bind
                source: /home/IHRBENUTZER/media/musik
                target: /media/musik
                read_only: true
            - type: bind
                source: /home/IHRBENUTZER/media/fotos
                target: /media/fotos
                read_only: true
        environment:
            - JELLYFIN_PublishedServerUrl=http://IHRE-SERVER-IP:8096
        restart: unless-stopped
yaml

Ersetzen Sie in der Datei an­schlie­ßend:

  • den Wert 1000:1000 durch Ihre echte UID:GID, die Sie sich im vor­he­ri­gen Schritt notiert haben
  • IHRBENUTZER durch Ihren Linux-Usernamen
  • IHRE-SERVER-IP durch die IP-Adresse Ihres Servers
Tipp

Die Me­di­en­ord­ner sind hier als read_only: true ein­ge­bun­den. Das bedeutet, Jellyfin darf die Dateien lesen, aber nicht verändern. Das ist für einen per­sön­li­chen Me­di­en­ser­ver sinn­vol­ler und sicherer.

Schritt 7: Jellyfin-Container starten

Nun können Sie den er­stell­ten Container mit Docker Compose im Hin­ter­grund starten:

sudo docker compose up -d
bash

Prüfen Sie danach, ob der Container läuft:

Sudo docker compose ps
bash
Bild: Anzeige nach Docker compose
Die Ter­mi­nal­aus­ga­be bestätigt Ihnen, dass der Jellyfin-Install er­folg­reich war und der Container mit Jellyfin läuft.

Schritt 8: Jellyfin im Browser aufrufen

Rufen Sie nun im Browser die Adresse Ihres Servers mit dem Standard-Jellyfin-Port auf:

http://SERVER-IP:8096

Nun startet der Ein­rich­tungs­as­sis­tent im Browser.

Hinweis

Wenn Sie einen IONOS-Server mieten, müssen Sie im Cloud-Panel zuvor die Firewall so kon­fi­gu­rie­ren, dass TCP-Ver­bin­dun­gen über Port 8096 erlaubt werden.

Schritt 9: Erst­ein­rich­tung im Jellyfin-As­sis­ten­ten

Im Browser führt Sie Jellyfin durch die Grund­kon­fi­gu­ra­ti­on. Legen Sie zunächst die Sprache fest und erstellen Sie dann ein Ad­mi­nis­tra­tor­kon­to mit sicherem Passwort. An­schlie­ßend richten Sie Ihre Bi­blio­the­ken ein. Wählen Sie zum Beispiel „Filme“, „Serien“, „Musik“ oder „Fotos“ und geben Sie jeweils die Ver­zeich­nis­se an, die im Container ein­ge­bun­den sind, also in unserem Beispiel /media/filme oder /media/serien. Danach lädt Jellyfin Metadaten, Cover und weitere In­for­ma­tio­nen, sofern Ihr Server In­ter­net­zu­gang hat.

Bild: Screenshot von Jellyfin im Browser
Wenn Sie Jellyfin im Browser aufrufen, führt Sie der Assistent durch die Ein­rich­tung.

Schritt 10: Medien sauber struk­tu­rie­ren

Damit Jellyfin Ihre Dateien korrekt erkennt, sollten die Medien or­dent­lich benannt und sortiert sein. Für Filme ist ein eigenes Ver­zeich­nis pro Titel hilfreich, für Serien eine Un­ter­tei­lung nach Staffel. Musik pro­fi­tiert vor allem von sauber ge­pfleg­ten Tags. Je sauberer die Ord­ner­struk­tur, desto weniger Hand­ar­beit brauchen Sie später bei Metadaten und Zuordnung. Das ist kein harter tech­ni­scher Zwang, aber macht in der Praxis einen merkbaren Un­ter­schied.

Beachten Sie folgende Si­cher­heits­hin­wei­se für Ihren Jellyfin-Server:

  • HTTPS verwenden: Wenn Sie Jellyfin über das Internet er­reich­bar machen, sollten Sie den Zugriff unbedingt über HTTPS absichern. Am ein­fachs­ten gelingt dies über einen Reverse Proxy mit einem kos­ten­lo­sen TLS-Zer­ti­fi­kat.
  • Direkten In­ter­net­zu­griff vermeiden: Öffnen Sie den Jellyfin-Port möglichst nicht direkt im Router. Statt­des­sen empfiehlt sich der Zugriff über einen Reverse Proxy oder ein VPN.
  • Starke Pass­wör­ter verwenden: Legen Sie für das Ad­mi­nis­tra­tor­kon­to ein sicheres Passwort fest und erstellen Sie für weitere User separate Be­nut­zer­kon­ten.
  • System re­gel­mä­ßig ak­tua­li­sie­ren: Halten Sie sowohl Ihr Ubuntu-System als auch Docker und das Jellyfin-Image durch re­gel­mä­ßi­ge Updates auf dem neuesten Stand.
  • Me­di­en­ver­zeich­nis­se schreib­ge­schützt einbinden: Wenn Sie Jellyfin in Docker betreiben, empfiehlt es sich, die Me­di­en­ord­ner nur lesend (read_only) ein­zu­bin­den, um ver­se­hent­li­che Än­de­run­gen an Ihren Dateien zu vermeiden.

Jellyfin mit einer Domain verbinden

Für den Zugriff über eine Domain wie jellyfin.ihredomain.de brauchen Sie drei Dinge:

  • Domain oder Subdomain
  • DNS-Eintrag, der auf die öf­fent­li­che IP Ihres Servers zeigt
  • Reverse Proxy mit HTTPS, wobei Jellyfin besonders Caddy empfiehlt
Domain-Check

Schritt 1: DNS-Eintrag für die Subdomain setzen

Legen Sie bei Ihrem Domain-Anbieter einen A-Record an, zum Beispiel:

jellyfin.ihredomain.de -> IHRE-ÖFFENTLICHE-IP

Wenn IPv6 genutzt wird, setzen Sie zu­sätz­lich einen AAAA-Record. Für au­to­ma­ti­sches HTTPS mit Caddy muss der DNS-Eintrag bereits korrekt auf Ihren Server zeigen.

Hinweis

Damit Ihre Jellyfin-Instanz später über HTTPS er­reich­bar ist, müssen auf dem Server be­zie­hungs­wei­se in der Firewall die Ports 80 (HTTP) und 443 (HTTPS) er­reich­bar sein. Diese Ports benötigt der Reverse Proxy, um Web­an­fra­gen ent­ge­gen­zu­neh­men und TLS-Zer­ti­fi­ka­te aus­zu­stel­len.

Schritt 2: Caddy in­stal­lie­ren

Jellyfin empfiehlt Caddy wegen der einfachen HTTPS-Ein­rich­tung. In­stal­lie­ren Sie Caddy auf Ubuntu mit dem of­fi­zi­el­len Paketweg und somit folgenden Ter­mi­nal­be­feh­len:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y
bash

Nach der In­stal­la­ti­on startet Caddy au­to­ma­tisch als Sys­tem­dienst.

Schritt 3: Caddy kon­fi­gu­rie­ren

Be­ar­bei­ten Sie in einem nächsten Schritt die Caddy-Kon­fi­gu­ra­ti­on. Wir nutzen erneut nano, aber jeder andere Text­edi­tor funk­tio­niert ebenfalls:

sudo nano /etc/caddy/Caddyfile
bash

Fügen Sie Folgendes ein:

jellyfin.ihredomain.de {
reverse_proxy 127.0.0.1:8096
}

Speichern Sie die Datei und prüfen Sie die Kon­fi­gu­ra­ti­on:

sudo caddy validate --config /etc/caddy/Caddyfile
bash

Wenn alles passt, laden Sie Caddy mit folgendem Befehl neu:

sudo systemctl reload caddy
bash

Schritt 4: Jellyfin nur noch lokal an Caddy binden

Wenn die Domain funk­tio­niert, sollten Sie die Compose-Datei anpassen, sodass Jellyfin nicht mehr öf­fent­lich auf Port 8096 lauscht. Öffnen Sie dazu erneut ~/jellyfin/docker-compose.yml und ersetzen Sie den Port-Eintrag:

ports:
    - "127.0.0.1:8096:8096/tcp"
    - "7359:7359/udp"
yaml

Danach starten Sie den Container neu:

sudo docker compose up -d
bash

Jetzt ist die Web­ober­flä­che nur noch lokal gebunden, während Caddy die sichere öf­fent­li­che Ver­bin­dung übernimmt. Ab­schlie­ßend sollten Sie in den Jellyfin-Netz­werk­ein­stel­lun­gen den Proxy als Known Proxy eintragen. Dadurch kann Jellyfin korrekt mit den vom Proxy gesetzten Headern umgehen. Die Ein­stel­lung finden Sie in der Web­ober­flä­che unter „Dashboard“ → „Net­wor­king“ → „Known Proxies“.

Zum Hauptmenü