Selfhost Guide Teil 1: Server einrichten mit Nextcloud und Jellyfin für Homecloud und Streaming

Wenn man Microsoft, Google, Apple und Amazon fragt, gibt es... Der Beitrag Selfhost Guide Teil 1: Server einrichten mit Nextcloud und Jellyfin für Homecloud und Streaming erschien zuerst auf WindowsArea.de.

Jun 9, 2025 - 21:30
 0
Selfhost Guide Teil 1: Server einrichten mit Nextcloud und Jellyfin für Homecloud und Streaming

Wenn man Microsoft, Google, Apple und Amazon fragt, gibt es nur einen sicheren Weg für eure Daten: in die Cloud. Am besten jetzt sofort und gleich.

Dass nicht jeder mit deren Meinung übereinstimmt und Misstrauen hat, dass die eigenen Daten vertrauenswürdig verarbeitet und geschützt werden, scheint vor allem den Redmonder Konzern nicht zu interessieren, schaut man sich doch an, wie penetrant zu jeder Zeit der eigene Cloud Dienst OneDrive angeboten wird. Gleichzeitig erwartet der Konzern, dass die Nutzer im selben Atemzug dem Konzern vertrauen, dass mit Windows Recall tatsächlich alles ganz sicher und verschlüsselt auf dem eigenen PC bleibt.

Scope – Was machen wir hier eigentlich?

Aus Erfahrung wissen wir, dass Misstrauen eine gute Sache ist. Es werden teils Versprechen gemacht, die nicht eingehalten werden, Preise erhöht oder die Bedingungen nach Kaufabschluss geändert. Aus diesem Grund haben auch wir etwas damit begonnen, mit unterschiedlichen Lösungen zum Selfhosting zu experimentieren und wollen euch auf dieser Reise gerne mitnehmen.

Nicht nur das Misstrauen in die sich stetig verändernden Nutzungsbedingungen und Sicherheitsmechanismen bei Cloud-Lösungen aus Redmond, Cupertino und Mountain View sind gute Gründe, sich langsam mit Open-Source-Lösungen zu beschäftigen.

Eine Open-Source Cloud, wie Nextcloud, kann teils viel mehr bieten als OneDrive, GoogleDrive und Co. Und sie ist so umfangreich, dass sie sogar fast ein Microsoft- oder Google-Konto ersetzen kann.

Gleichzeitig wollen wir uns in unserem ersten Teil dieser Serie auch kurz mit der Einrichtung von einer Open-Source Lösung für die Medienverwaltung befassen, wenn man seine Filme, Serien, Aufnahmen und Büchersammlung an einem zentralen Ort sehen und verwalten möchte. Hierfür ist Jellyfin eine wundervolle Lösung, welche die guten alten Zeiten des DVD-Kaufs und Verleihs glatt zurückbringen könnte.

Der Vorteil davon: alles wird lokal bei euch zuhause betrieben und ist unter eurer Kontrolle. Kein Konto eines Anbieters wird gefordert und keine Daten verlassen die eigenen vier Wände.

Als Basis braucht man zudem keine dicke Workstation, die Unmengen an Strom frisst: Ein einfacher Mini-PC oder ein alter Laptop mit vier Kernen und 8GiB RAM reicht in fast allen Fällen aus. Zwei Kerne und 4GiB RAM gehen auch, dann muss man ggf. aber Abstriche in der Geschwindigkeit machen.

Zudem ist eine SSD als Boot-Medium notwendig. Man kann theoretisch auch auf dieser SSD bei großer Kapazität die Daten speichern, empfehlenswerter sind aber eine externe HDD oder SSD per USB oder, wenn das Gehäuse es zulässt, eine interne 2,5 oder 3,5 Zoll HDD. Offensichtlich wird ein Mini-PC oder Laptop mit einer externen Festplatte am USB-Port keinen NAS ersetzen können mangels Redundanz und dieser Guide soll eher zum eigenen Experimentieren, Ausprobieren und zum Sammeln von Erfahrungen im Selfhosting-Bereich anregen. Für viele Nutzer dürfte der kleine Selfhosting-Server allerdings ohnehin das einzige Backup neben der Cloud sein, was angesichts scheinbar willkürlicher Account-Sperren bei Microsoft (und anderen), ohnehin eine gute Idee ist.

Beachten sollte man bei der Hardware-Auswahl aber folgendes: Da ein Server in der Regel 24/7 läuft, sollte der PC mit allen Speichermedien nicht allzu viel Strom verbrauchen. Deswegen eignen sich Mini-PCs und Laptops hervorragend, da diese meist nur 4 bis 6W in Leerlauf verbrauchen, zuzüglich etwa 3W für SSDs, bzw. bis zu 15W je nach HDD-Kapazität.

Wahl des Betriebssystems

Als Betriebssystem lässt sich nur eine Linux Distribution empfehlen: Diese sind langlebig, stabil, unterstützen alle notwendigen Tools und sind ebenfalls quelloffen und frei zu haben.

Theoretisch lassen sich auch Desktop Linux Distributionen mit GUI verwenden, jedoch findet die Konfiguration ohnehin ausschließlich auf der Kommandozeile, dem Terminal, statt, weshalb sich dieser Weg nicht unbedingt rentiert, und nur unnötig mehr Ressourcen verbraucht.

Besser eignen sich daher Linux Server Distributionen mit Langzeitunterstützung (LTS) wie Debian oder Ubuntu Server. Welche ihr nehmt ist so gesehen egal, da Ubuntu auf Debian aufbaut, aber ein paar mehr neuere Features mitbringt. Debian empfiehlt sich aufgrund seiner minimalen Grundausstattung und seiner Stabilität. In unserem Video-Tutorial nutzen wir Ubuntu Server LTS 24.04.

Eine Anleitung zum Installieren findet ihr hier für Ubuntu und hier für Debian (wählt am Ende nur den SSH-Server und die Systemwerkzeuge aus!).

Ihr könnt den Server entweder lokal, oder per Remote von einem andern PC konfigurieren und administrieren. Für Letzteres benötigt ihr entweder den OpenSSH-Client per Powershell, den Windows von Haus aus mitliefert, oder ihr nutzt das Open-Source PuTTY mit der Server-IP.

Belasst den Standard bei und im neuen Terminal Fenster gebt ihr den Benutzernamen und Passwort ein.

Netzwerk-Konfiguration des Servers

Ist die Installation fertig, loggt ihr euch mit eurem eben erstellten Benutzernamen und Passwort ein. Bringt zuerst euren Server auf den neusten Stand:

sudo apt update && sudo apt upgrade -y

Wenn bei der Installation noch nicht geschehen, stellen wir für den Server eine statische IP Adresse ein, damit der DHCP Server des Routers diese nicht ändert.

Ohne eine Statische IP sind Dienste nicht mehr erreichbar bis man die neue IP herausgefunden hat.

Lasst euch die aktuelle IP-Adresse anzeigen (die IP nach dem Muster 192.168.XXX.YYY) und editiert danach die Netzwerkkonfiguration:

ip a | grep enp
sudo nano /etc/network/interfaces

und ändert „dhcp“ auf „static“ um.
Ergänzt folgende Angaben.

iface enp0s3 inet static                 # Das Netzwerkgerät heißt bei euch womöglich anders als enp0s3
     address 192.168.XXX.YYY             # XXX ist meist „178“ oder „1“, je nachdem, wie der Router eingestellt ist
                                         # YYY ist die IP des Servers: wählt dazu eine freie IP wie zwischen 200 bis 254. FritzBoxen geben euch die Bereiche 2-19 und 200 bis 254 zur statischen Zuweisung
     netmask 255.255.255.0               # Standard Subnetzmaske
     gateway 192.168.XXX.1               # IP eures Routers
     dns-nameservers 9.9.9.9 1.1.1.1     # DNS Server, hier Quad9 und Cloudflare

Beendet das bearbeiten mit STRG+X, J und Enter.

Startet den Netzwerkmanager neu mit:

sudo service networking restart
sudo systemctl restart systemd-networkd

Konfiguration des Servers

Installiert nun ein paar nützliche Anwendungen für das Management eures Servers und die nötigen Tools für Docker. Das sind kleine fertige Container-Anwendungen mit minimalem Konfigurationsaufwand. Gebt dazu ein:

sudo apt install docker.io docker-compose docker-compose-v2 docker-compose-plugin btop neofetch unattended-upgrades

Sicherheitsupdates sind ein wichtiger Teil um seine Daten und Dienste im Netzwerk vor Angreifern und Schwachstellen zu schützen. Deswegen konfigurieren wir zuerst automatische Updates für das Server-Betriebssystem mit dem folgenden Befehl:

sudo dpkg-reconfigure unattended-upgrades

Wählt „JA“ aus und bestätigt mit Enter. Damit werden stabile Sicherheitsupdates täglich geprüft, runtergeladen und installiert. Lediglich alle paar Wochen oder Monate solltet ihr euren Server mal neustarten, um größere Kernel Updates zu übernehmen, die nicht im laufenden Betrieb angewendet werden können.

Ansonsten müsst ihr euch um Updates ab jetzt keine Sorgen mehr machen.

Festplatten

Wenn noch nicht geschehen, schließt eure externe Datenplatte jetzt an und sucht nach deren Bezeichnung mit dem Befehl:

lsblk

In meinem Fall ist es /dev/sdb. Ihr müsst den letzten Buchstaben ggf. anpassen und darauf aufpassen, dass ihr die nicht verwechselt, ansonsten formatiert ihr die falsche Platte!

Erstellt nun einen Einhängepunkt, wo ihr die Festplatte haben wollt, am sinnvollsten ist es unter /mnt/hdd.

sudo mkdir /mnt/hdd

Die Festplatte muss für die unproblematische Benutzung mit einem EXT4 Dateisystem versehen werden. Bei der Formatierung gehen alle Daten verloren, jetzt könnt ihr diese noch sichern, wenn die Festplatte noch nicht leer ist.

Seid ihr damit fertig, startet das Partitionierungsprogramm parted:

sudo parted /dev/sdb

Ausgabe der HDD-Informationen:

print /dev/sdb

Erstellt eine GPT Partitionstabelle:

mklabel gpt

Erstellt eine Partition:

mkpart

Partitionsname:

data

File System Type:

ext4

Start:

1%

Ende:

100%

Wenn geschehen, Partition mit „print“ überprüfen und 2 mal mit STRG+C verlassen, bis man wieder bei „benutzer@server:$“ angekommen ist.

Erstellt nun das EXT4-Dateisystem:

sudo mkfs.ext4 /dev/sdb1

Damit die Festplatte auch bei jedem Neustart an diesem Ort zu finden ist, muss eine Datei, die „Dateisystemtabelle“, die fstab bearbeitet werden. Öffnet dazu die Datei mit:

sudo nano /etc/fstab

Dort gebt ihr folgende Zeile ein:

/dev/sdb1      /mnt/hdd      ext4      defaults     0     0

und beendet das Bearbeiten mit STRG+X, J und Enter.

Nun könnt ihr euren Server mit:

sudo reboot now

neustarten und mit „lsblk“ prüfen, ob /dev/sdb1 auch unter /mnt/hdd eingehängt ist.

Nextcloud

Eine kleine Anmerkung für die weitere Benutzung: wenn ihr als Basis Debian 12 verwendet, müsst ihr die Notation „docker-compose“ mit dem Paket „docker-compose“ verwenden (das Paket v2 und plugin sind unter Debian 12 nicht verfügbar) unter Ubuntu Server könnt ihr entweder „docker-compose“ oder „docker compose“ verwenden (alle compose Pakete sind verfügbar). Dieser Unterschied besteht nur darin, das ersteres die Version 1 und letzteres die neuere Version 2 ist. Im Artikel habe ich stringent die Notation der Version 2 verwendet.

Nun geht es an die Erstellung der Nextcloud. Dafür brauchen wir einen Ordner für die Konfigurationsdateien und die persönlichen Daten, die ihr auf der Nextcloud hochladet.

sudo mkdir /mnt/hdd/ncdata
mkdir docker
mkdir docker/nextcloud
mkdir docker/nextcloud/apps
mkdir docker/nextcloud/config
mkdir docker/nextcloud/mariadb
mkdir docker/nextcloud/nextcloud

Nun erstellen wir eine Konfigurationsdateien, die die Einstellungen der Nextcloud enthält, mit:

sudo nano docker/nextcloud/docker-compose.yml

Das meiste wird euch vom Internet schon abgenommen, so sieht die Konfiguration aus:

version: '2'
services:
  mariadb:
    image: mariadb:latest
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW>    
    ports:
      - 9022:3306
    volumes:
      - /home/albert/docker/nextcloud/mariadb:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=nextcloud123          # Ein sicheres Datenbak >      
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=root
  nextcloud:
    image: nextcloud:latest
    restart: always
    ports:
      - 8080:80
    links:
      - mariadb:mysql
    volumes:
      - /home/albert/docker/nextcloud/nextcloud:/var/www/html
      - /home/albert/docker/nextcloud/apps:/var/www/html/custom_apps
      - /home/albert/docker/nextcloud/config:/var/www/html/config
      - /mnt/hdd/ncdata:/var/www/html/data
    environment:
      - MYSQL_PASSWORD=nextcloud123          # Das gleiche Passwor>      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=root
      - MYSQL_HOST=mariadb

Die grün hinterlegten Angaben müsst ihr in dem Schema anpassen:

In den Dateipfade ändert ihr euren Nutzernamen ab und vergebt ein sicheres Datenbank Passwort (Achtung, unten das gleiche Passwort eingeben).

Auch hier beendet ihr das Bearbeiten mit STRG+X, J und Enter.

Gebt nun zum Erstellen der Nextcloud ein:

cd docker/nextcloud
sudo docker compose up -d

Die Images werden nun aus dem Internet gezogen und die Datenbank wie die Nextcloud erstellt, was je nach PC- und Internetgeschwindigkeit etwas dauern kann.
Den Status der Container überprüft ihr mit

sudo docker ps -a

Steht dort bei „nextcloud“ und „mariadb“ unter STATUS „Up X seconds“, laufen die Container.

Die Nextcloud hat den eingestellten Port 8080. Gebt in eurem Webbrowser die IP des Servers und den Port nach dem Muster 192.168.XXX.YYY:8080 ein.
Die IP Adresse habt ihr euch entweder bei der Installation gemerkt, oder ihr findet diese in eurem Router, meist unter „Netzwerk“.
Am Server selbst findet ihr die IP mit folgendem Befehl heraus:

ip a | grep enp

Im Browser erstellt ihr entweder ein generelles Administrator Konto oder direkt ein eigenes, welches dann auch Admin Rechte besitzt. Es werden euch Apps empfohlen, die ihr installieren könnt, was ihr aber auch später ganz bequem per AppStore nachrüsten könnt.
Jetzt ist eure Nextcloud einsatzbereit.

Jellyfin

Weiter geht es mit Jellyfin. Dazu erstellt ihr z.B. folgende Ordner (je nachdem, welche Medien ihr habt):

mkdir jellyfin
sudo mkdir /mnt/hdd/jellydata
mkdir /mnt/hdd/jellydata/filme
mkdir /mnt/hdd/jellydata/serien

Nun erstellt wieder eine Konfigurationsdatei

sudo nano docker/jellyfin/docker-compose.yml

mit dem Inhalt:

version: '3.5'
services:
	jellyfin:
		image: jellyfin/jellyfin
		container_name: jellyfin
		network_mode: 'host'
		volumes:
			- /home/[benutzername]/docker/jellyfin/config:/config
			- /home/[benutzername]/docker/jellyfin/cache:/cache
			- /mnt/hdd/jellydata/filme:/filme
			- /mnt/hdd/jellydata/serien:/serien
		restart: 'always'
		environment:
			- JELLYFIN_PublishedServerUrl=http://<192.168.XXX.YYY>

Verlasst die Config-Datei mit STRG+X, „J“ und Enter und pullt auch diesen Container:

cd docker/jellyfin
sudo docker compose up -d

Im Browser erreicht ihr euren neuen Medienserver unter der IP mit dem Port 8096. Damit ist auch euer eigener Medienserver eingerichtet, den ihr jetzt befüllen könnt.

SFTP und SAMBA

Für SFTP benötigt ihr das Open-Source FTP Tool FileZilla. Dort verbindet ihr euch mit der Server IP, dem Port 22, eurem Benutzernamen und dem Passwort mit eurem Server.
Navigiert links zu euren lokalen Medien die ihr auf den Server schieben wollt, und rechts nach „/mnt/hdd/jellydata“.
Kopiert nun die Filme und Serien in die jeweiligen Verzeichnisse.

Als letztes passen wir noch die Benutzerrechte an:

sudo chown -R root:users /mnt/hdd/jellydata

Jetzt sollten eure Medien auch sortiert im Web-GUI auftauchen.

Um den Media Ordner per SMB zu teilen, benötigt ihr etwas mehr Konfiguration. Installiert zunächst folgende Pakete und startet den smbd Service:

sudo apt install samba samba-common
sudo systemctl enable smbd
sudo systemctl start smbd

Öffnet die Samba Config:

sudo nano /etc/samba/smb.conf

Fügt unten ein:

[jellydata] # share name and share directory cannot be the same, readonly sonst
path = /mnt/hdd/jellydata
valid users = @[benutzername]
browsable = yes
writable = yes
read only = no

Startet zuletzt den smbd Service neu:

sudo service smbd restart

Die Ordner könnt ihr nun auf anderen PCs im Netzwerk erreichen, indem ihr sie im Windows Explorer als Netzlaufwerk einhängt, oder temporär darauf zugreift, indem ihr in der Adressleiste die IP mit Freigabename und den Linux Benutzer und zugehöriges Passwort eingebt:

http://192.168.xxx.yyy/jellydata

Um eure Mediathek mit Inhalten zu füllen, könnt ihr DVDs die ihr besitzt in eine Videodatei rippen oder die Datenbank MediathekenView durchforsten. Dort findet ihr Medien die auf den öffentlich rechtlichen Fernsehsendern gelaufen sind zu legalen Download.

Watchtower

Genauso wie Systemupdates sollte eure Software auch die aktuellsten Updates erhalten, um Fehler und Sicherheitslücken zu schließen. Für Docker Container gibt es dafür den Container Watchtower, welcher in der Standarteinstellung alle 24 Stunden nach neuen Docker Images sucht und diese anwendet, vollautomatisch.
Erstellt dafür einen Ordner:

mkdir docker/watchtower

Erstellt eine neue Konfiguration mit:

sudo nano docker/watchtower/docker-compose.yml
version: '3' 
services: 
	watchtower: 
		image: containrrr/watchtower 
		command: - --cleanup=true restart: always 
	volumes: 
		- /var/run/docker.sock:/var/run/docker.sock 
		- /etc/localtime:/etc/localtime:ro

Startet diesen mit

sudo docker compose up -d

Jetzt ist euer Heimserver als private Cloud und Mediensammlung fertig konfiguriert und ihr könnt ihn wenn noch nicht zu Beginn geschehen, zum Beispiel in der Nähe des Routers positionieren und per Netzwerkkabel verbinden.

Für die Administration per SSH könnt ihr PuTTY und für den Datenaustausch per SFTP FileZilla oder den Explorer mit SMB verwenden.
Das eingangs installierte Tool „btop“ dient hier als sehr umfangreicher Task-Manager. Damit seht ihr alle aktuellen Prozesse, Systemauslastung, Netzwerkverkehr, Temperaturen und Speicherauslastung.

Ausblick

Eine eigene Cloud für Daten, Kalender, Kontakte, Notizen und Fotos sowie eine eigene Mediencloud für Filme und Serien ist natürlich nicht Alles, was man mit einem Homeserver anfangen kann, es sind aber mit die Dinge, die heutzutage die meisten tagtäglich nutzen und sich keine Gedanken machen, welche Daten eigendlich wo landen.

Ab Hier beginnt eigendlich erst der spannende Teil des Selfhostings: Passwortmanager mit Bitwarden/Vaultwarden, VPN mit WireGuard, DNS-Blocking mit PiHole, PDF-Konvertierung mit StirlingPDF (ähnlich wie PDF24), Backups mit Duplicati…

Der Beitrag Selfhost Guide Teil 1: Server einrichten mit Nextcloud und Jellyfin für Homecloud und Streaming erschien zuerst auf WindowsArea.de.