Musikstreaming auf dem eigenen VPS mit Navidrome
Betreiben Sie Navidrome auf einem VPS und streamen Sie Ihre Musik aufs Smartphone. Erfahren Sie, wie viel Speicher Sie brauchen und was Offline-Sync, TLS und Backups leisten.
Was selbst gehostetes Musikstreaming auf einem VPS bietet
Bei selbst gehostetem Musikstreaming auf einem VPS betreiben Sie den Player selbst und stellen die Musik bereit. Der Server speichert Dateien, die Sie bereits besitzen. Jedes Smartphone kann den Server mit einer normalen Anmeldung über das Internet erreichen. Machen Sie sich vorab die Einschränkung klar: Dies ersetzt den Player eines Streamingdienstes, nicht dessen Katalog. Neue Inhalte erscheinen erst dann in Ihrer Bibliothek, wenn Sie sie kaufen oder rippen und die Datei auf den Server kopieren.
Audio belastet einen Server deutlich weniger als Video. Die Dateien sind klein. Smartphones decodieren jedes gängige Format ohne zusätzliche Unterstützung. Ein Hörer benötigt weniger Bandbreite als ein Videoanruf. Die CPU ist dabei unkritisch. Der Speicherplatz ist die eigentliche Einschränkung. Die beiden weiteren Faktoren sind die Qualität Ihrer Tags und die Frage, ob Ihre Smartphone-App Musik zur Offline-Nutzung herunterladen kann.
Welcher Musikserver: Navidrome, Jellyfin oder Funkwhale?
Navidrome ist die Standardwahl, wenn Sie nur Audio benötigen. Es besteht aus einer einzelnen Go-Binärdatei in einem einzelnen Container und speichert seinen Zustand in einer einzigen SQLite-Datenbank. Navidrome stellt die Subsonic-API bereit. Deshalb gibt es überhaupt eine große Auswahl an Smartphone-Apps von Drittanbietern. Version 0.63.2 war im August 2026 aktuell. Laut Projekt läuft die Software auch auf kleiner Hardware wie einem Raspberry Pi Zero problemlos. Die Serversoftware ist daher nicht der Kostenfaktor.
Jellyfin ist sinnvoll, wenn Sie bereits Jellyfin als Medienserver auf einem VPS für Videos betreiben. Die Musikbibliothek funktioniert, und Finamp ist eine Jellyfin-Musik-App für Android und iOS, die Titel für die Offline-Wiedergabe herunterlädt. Die Einschränkung betrifft die API. Jellyfin verfügt über keinen integrierten Subsonic-Endpunkt. Das Community-Plugin, das einen solchen Endpunkt bereitstellte, wurde seit 2022 nicht mehr aktualisiert. Dadurch ist das Subsonic-App-Ökosystem für Jellyfin nicht verfügbar. Sie verwenden stattdessen Apps, die Jellyfins eigene API unterstützen. Davon gibt es weniger.
Funkwhale ist die föderierte Option. Version 2.0 wurde im März 2026 veröffentlicht. Ein Funkwhale-Server wird als Pod bezeichnet. Pods föderieren über ActivityPub, das Protokoll hinter Mastodon. Ein Benutzer auf einem Pod kann einer öffentlichen Bibliothek auf einem anderen Pod folgen. Funkwhale unterstützt ebenfalls einen Teil der Subsonic-API. Dabei gibt es einen wichtigen Unterschied: Jeder Benutzer legt in den eigenen Einstellungen ein separates Subsonic-Passwort fest. Das liegt daran, dass das Subsonic-Protokoll ein Passwort erwartet, das der Server auslesen kann. Die Installation von Funkwhale ist aufwendiger, da neben der Webanwendung PostgreSQL und eine Task-Warteschlange benötigt werden.
Wählen Sie Navidrome, sofern Sie keine Föderation benötigen und Jellyfin nicht bereits läuft. Der restliche Leitfaden richtet Navidrome mit Docker ein.
Warum die Subsonic API festlegt, welche Smartphone-App Sie verwenden können
Subsonic war ein Musikserver, dessen HTTP API zur gemeinsamen Sprache für selbst gehostete Audiodienste wurde. OpenSubsonic ist das Community-Projekt, das die API weiterentwickelt. Deshalb haben Sie auf Ihrem Smartphone mehrere Möglichkeiten. Navidrome bietet keine eigene mobile App an und benötigt auch keine. Jeder Subsonic-Client meldet sich mit der Serveradresse und Ihren Kontodaten an.
Das ist vor allem für die Offline-Synchronisierung wichtig. Diese Funktion entscheidet, ob die Lösung im täglichen Betrieb zuverlässig funktioniert. Ein Smartphone in einem Tunnel kann Ihren Server nicht erreichen. Der Client muss die Dateien daher vorher in den lokalen Speicher kopiert haben. Jeder Client kann streamen. Nur einige können Dateien herunterladen. Das Client-Verzeichnis unter navidrome.org/apps zeigt, welche Apps dies unterstützen. Die Auswahl ist auf beiden Plattformen groß: Substreamer und Ultrasonic unter Android sowie Amperfy und play:Sub unter iOS. Einige der leistungsfähigsten Clients sind kostenpflichtige Apps. Unter Android wird am häufigsten Symfonium genannt. Installieren Sie zwei Apps, bevor Sie sich entscheiden. Dies ist der Teil des Systems, den Sie täglich verwenden.
Wie viel Speicherplatz benötigt eine Musikbibliothek?
The data behind this chart
[
{
"label": "Opus 128k",
"kbps": 128,
"gb_per_1000_albums": 43
},
{
"label": "MP3 320k",
"kbps": 320,
"gb_per_1000_albums": 108
},
{
"label": "FLAC 16/44.1",
"kbps": 900,
"gb_per_1000_albums": 304
},
{
"label": "FLAC 24/96",
"kbps": "3,000",
"gb_per_1000_albums": "1,013"
}
]Das sind Größenordnungswerte, die sich aus der Bitrate ableiten. Sie sind keine Messwerte einer realen Sammlung. Die Rechnung ist einfach genug, um sie mit Ihren eigenen Dateien zu prüfen. Setzen Sie für ein Album 45 Minuten an, also 2,700 Sekunden. Multiplizieren Sie die Bitrate in Kilobit pro Sekunde mit 2,700 und teilen Sie das Ergebnis durch 8,000, um Megabyte zu erhalten. Bei 320 kbps ergibt das 108 MB für ein Album. Tausend Alben benötigen somit etwa 108 GB.
Bei verlustfreier Komprimierung fällt das Ergebnis anders aus. CD-Qualität mit FLAC erreicht bei gewöhnlichem Audiomaterial durchschnittlich etwa 900 kbps. Für dieselben tausend Alben werden daher etwa 304 GB benötigt. Eine Bibliothek mit 24 Bit und 96 kHz benötigt ungefähr 1,013 GB. Das entspricht einem vollen Terabyte für eine Sammlung, die Sie auf Papier auflisten könnten. Eine für Mobiltelefone geeignete Opus-Kopie mit 128 kbps passt für dieselben tausend Alben in 43 GB. Führen Sie du -sh /path/to/music für die bereits vorhandene Bibliothek aus. Ihre eigene durchschnittliche Bitrate ist die einzige relevante Zahl, wenn Sie einen Tarif auswählen.
Die Bandbreite macht den kleineren Teil der Kosten aus. Ein Stream mit 320 kbps entspricht 40 Kilobyte pro Sekunde. Eine Stunde Wiedergabe überträgt daher etwa 144 MB. Einhundert Stunden pro Monat entsprechen ungefähr 14 GB. Das fällt bei keinem VPS-Transferlimit ins Gewicht. Eine Ausnahme ist die erste Offline-Synchronisierung eines Telefons. Dabei können an einem Abend mehrere zehn Gigabyte übertragen werden.
Speicher-Tarif oder Compute-Tarif?
Ein Musikserver besteht größtenteils aus selten genutzten Daten, die kaum Rechenleistung benötigen. Beim Lesen einer Datei mit 40 Kilobyte pro Sekunde bleibt jeder Datenträger praktisch ungenutzt. Die CPU arbeitet nur beim Scannen der Bibliothek oder beim Transcodieren. Beides werden Sie in der Regel kaum tun. Die schnelle NVMe auf einem Compute-Tarif bringt Ihnen daher keinen Vorteil. Der Preis pro Gigabyte verhindert dagegen, dass Sie die FLAC-Kopien hochladen. In diesem Fall ist ein Storage-VPS besser als ein regulärer VPS, weil diese Tarife pro Terabyte und nicht pro Kern abgerechnet werden.
Der Speicherbedarf ist gering. Navidrome stellt eine persönliche Bibliothek mit wenigen hundert Megabyte bereit. Der Scan verursacht die höchste Last, nicht die Wiedergabe. Geben Sie dem Server 1 GB oder 2 GB RAM und investieren Sie das übrige Budget in Speicherplatz.
Navidrome mit Docker Compose installieren
Erstellen Sie zuerst die Verzeichnisse. Sie müssen dem Benutzer gehören, unter dessen Benutzer-ID der Container ausgeführt wird. Wenn Compose für Sie neu ist, erklärt Docker Compose auf einem VPS, welche Annahmen diese Datei macht.
sudo install -d -m 755 -o 1000 -g 1000 /srv/navidrome /srv/musicSchreiben Sie docker-compose.yml mit möglichst wenig weiterem Inhalt in ein eigenes Verzeichnis:
services:
navidrome:
image: deluan/navidrome:0.63.2
user: "1000:1000"
ports:
- "127.0.0.1:4533:4533"
restart: unless-stopped
environment:
ND_LOGLEVEL: "info"
ND_SESSIONTIMEOUT: "24h"
ND_SCANNER_SCHEDULE: "@every 24h"
ND_BACKUP_PATH: "/data/backup"
ND_BACKUP_SCHEDULE: "0 4 * * *"
ND_BACKUP_COUNT: "7"
volumes:
- /srv/navidrome:/data
- /srv/music:/music:rodocker compose up -d
docker compose psdocker compose ps sollte den Dienst als laufend und nicht als neu startend anzeigen. Ein Container, der in einer Neustartschleife läuft, weist fast immer auf ein Berechtigungsproblem bei /srv/navidrome hin. docker compose logs navidrome nennt die Datei, in die nicht geschrieben werden konnte.
Vier Details in dieser Datei sind wichtig. Der Port wird nur an 127.0.0.1 veröffentlicht. Der Server ist dadurch über den Reverse Proxy erreichbar, nicht über Port 4533 aus dem offenen Internet. Docker schreibt eigene Firewall-Regeln. Deshalb bleibt ein einfaches 4533:4533 auch auf einem System erreichbar, auf dem ufw alles als denied meldet. Das Musik-Volume ist schreibgeschützt. Dadurch kann ein Fehler im Scanner Ihre einzige Kopie nicht löschen. ND_SCANNER_SCHEDULE ist standardmäßig deaktiviert. In Anleitungen vor Navidrome 0.55 wird es ND_SCANSCHEDULE genannt. Dieser Name existiert nicht mehr. Die drei Backup-Einstellungen aktivieren die integrierte Datenbanksicherung, auf die der folgende Abschnitt zur Datensicherung angewiesen ist.
Übertragen Sie Ihre Musik auf den Server
Kopieren Sie die Bibliothek mit rsync auf den Server. Bei einem Verbindungsabbruch wird die Übertragung fortgesetzt, statt von vorn zu beginnen.
rsync -av --info=progress2 ~/Music/ user@music.example.com:/srv/music/Der abschließende Schrägstrich im Quellpfad ist wichtig. Ohne ihn erhalten Sie /srv/music/Music. Korrigieren Sie nach Abschluss des Kopiervorgangs die Besitzrechte:
sudo chown -R 1000:1000 /srv/music
id -uDer Container wird mit der Benutzer-ID 1000 ausgeführt, und das Mount ist schreibgeschützt. Daher muss jede Datei für diese ID lesbar sein. Wenn Ihr SSH-Konto auf dem VPS nicht die UID 1000 hat, gehören die kopierten Dateien einem anderen Benutzer. Der Scan findet dann keine Titel, während die Weboberfläche weiterhin leer bleibt. id -u gibt Ihre tatsächliche ID aus. Wie PUID und PGID in Docker-Containern funktionieren erläutert die Zuordnung vollständig.
Ein Reverse Proxy und TLS, damit das Telefon von überall funktioniert
Verweisen Sie einen DNS-A-Eintrag auf den VPS und geben Sie Caddy anschließend drei Zeilen:
music.example.com {
reverse_proxy 127.0.0.1:4533
}sudo systemctl reload caddyCaddy fordert das Zertifikat bei der ersten Anfrage an. Die Ports 80 und 443 müssen beide geöffnet sein, weil die ACME-Challenge (automatische Zertifikatsverwaltung) auf Port 80 beantwortet wird. Fügen Sie bei nginx proxy_buffering off; in den location-Block ein: Navidrome sendet Fortschrittsereignisse über eine dauerhafte Verbindung an die Weboberfläche. Wenn das Puffern aktiviert ist, wartet die Oberfläche auf eine Antwort, die nginx weiterhin zurückhält. Wenn Sie den Dienst unter einem Pfad wie /music statt unter einer eigenen Subdomain bereitstellen, setzen Sie ND_BASEURL auf denselben Pfad. Andernfalls wird die Oberfläche als leere Seite geladen. Die drei gängigen Proxys werden in Nginx, Caddy und Traefik auf einem VPS verglichen.
Öffnen Sie die Website und erstellen Sie das erste Konto. Es gibt kein Standardpasswort. Der erste Besucher wird aufgefordert, den Administrationsbenutzer anzulegen. Erledigen Sie dies, bevor Sie anderen die Adresse mitteilen. Testen Sie anschließend den genauen Pfad, den ein Telefon-Client verwendet:
SALT=$(openssl rand -hex 6)
TOKEN=$(printf '%s%s' 'YOUR_PASSWORD' "$SALT" | md5sum | cut -d' ' -f1)
curl -s "https://music.example.com/rest/ping.view?u=YOUR_USER&t=$TOKEN&s=$SALT&v=1.16.1&c=curl&f=json"Eine erfolgreiche Antwort beginnt mit {"subsonic-response":{"status":"ok" und nennt navidrome als Servertyp. Ein Body mit "status":"failed" und dem Fehlercode 40 bedeutet, dass der Proxy funktioniert, aber die Zugangsdaten falsch sind. Ein Zertifikatsfehler muss an dieser Stelle zuerst behoben werden. Die meisten Telefon-Clients lehnen ein ungültiges Zertifikat mit einer Meldung ab, die dem Benutzer keine brauchbare Information liefert.
Warum Ihre Bibliothek nach dem ersten Scan falsch aussieht
Navidrome durchsucht die Bibliothek anhand von Tags und nicht anhand von Verzeichnissen. Die Tags bestimmen daher, was Sie sehen. Ein Titel ohne Tag für den Albuminterpreten wird unter seinem Titelinterpreten eingeordnet. Deshalb wird eine Zusammenstellung mit einem anderen Interpreten für jeden Titel zu zwanzig Alben mit jeweils einem Titel. Korrigieren Sie das in den Dateien und nicht in Navidrome: MusicBrainz Picard und beets suchen das Album in der MusicBrainz-Datenbank und schreiben anschließend standardisierte Tags zurück.
Navidrome teilt außerdem ein Tag mit mehreren Interpreten in einzelne Interpreten auf. Dadurch wird eine Band, deren Name ein Trennzeichen enthält, irrtümlich aufgeteilt. AC/DC ist das bekannte Beispiel. ND_SCANNER_ARTISTSPLITEXCEPTIONS enthält die Namen, die niemals aufgeteilt werden dürfen.
Neue Dateien werden einige Sekunden nach dem Kopieren durch einen Datei-Watcher erkannt. Der Watcher ist auf Kernel-Benachrichtigungen über Dateiänderungen angewiesen. Diese Benachrichtigungen werden für Dateien, die auf einer von einem anderen Rechner gemounteten Netzwerkfreigabe geschrieben wurden, nicht ausgelöst. Bei einer solchen Konfiguration hält daher der regelmäßige ND_SCANNER_SCHEDULE die Bibliothek aktuell. Ein vollständiger Rescan liest die Tags jeder Datei ein. Bei einer großen Bibliothek dauert das lange. Das ist ein weiterer Grund, die weiter unten beschriebene Datenbank zu schützen.
Benutzer, Wiedergabelisten und Freigaben
Ein Administrator legt die übrigen Konten in der Weboberfläche an. Eine Selbstregistrierung gibt es nicht. Jeder Benutzer erhält eigene Wiedergabezähler, Wiedergabelisten, Favoriten und Bewertungen. Dadurch verwendet ein Haushalt nicht versehentlich ein gemeinsames Geschmacksprofil.
Wiedergabelisten gelangen auf zwei Wegen in das System. Eine in einem Client erstellte Wiedergabeliste wird in der Datenbank gespeichert. Eine .m3u-Datei, die im Bibliotheksverzeichnis abgelegt wird, wird beim Scan importiert. Das ist der einfache Weg, Wiedergabelisten aus einem Desktop-Player zu übernehmen. Intelligente Wiedergabelisten sind .nsp-Dateien. Dabei handelt es sich um kleine JSON-Regeldateien, die auf dieselbe Weise importiert werden und sich ändern, wenn sich die Bibliothek ändert.
Die Freigabe ist ab Version 0.63.0 standardmäßig aktiviert. Diese Version wurde im Juli 2026 veröffentlicht. Ein Benutzer kann damit einen öffentlichen Link zu einem Album erstellen, den jeder ohne Anmeldung öffnen kann. Auf einem Server, der Ihre gesamte Bibliothek enthält, ist das möglicherweise nicht gewünscht. Mit ND_ENABLESHARING auf false wird die Funktion deaktiviert.
Datenbank getrennt von den Musikdateien sichern
Das integrierte Backup von Navidrome umfasst nur die Datenbank. Die Dokumentation formuliert es eindeutig: Der Backup-Prozess sichert die Datenbank, also Benutzer, Wiedergabezähler und weitere Daten. Musikdateien und Konfiguration werden nicht gesichert. Diese Trennung ist sinnvoll, weil die beiden Bereiche unterschiedlich ausfallen. Musikdateien können erneut von dem Datenträger kopiert werden, von dem sie gerippt wurden. Wiedergabezähler, Bewertungen, Favoriten und Playlists existieren nirgendwo sonst. Ein erneuter Scan stellt sie nicht wieder her.
Die Compose-Datei schreibt bereits jede Nacht eine Kopie nach /data/backup und behält sieben Kopien. Erstellen Sie vor einem Upgrade manuell eine weitere Kopie:
sudo docker compose run --rm navidrome backup createBeim Wiederherstellen wird die aktuelle Datenbank gelöscht und die Sicherung an ihre Stelle kopiert. Navidrome muss dabei gestoppt sein. Eine Wiederherstellung auf einem laufenden Server ist nicht sicher.
Die Dateien liegen weiterhin auf demselben VPS und überstehen daher den Ausfall dieses VPS nicht. Übertragen Sie /srv/navidrome regelmäßig auf eine andere Maschine oder in einen Objektspeicher. Dafür sind restic und BorgBackup vorgesehen. Das gesamte Verzeichnis ist klein und normalerweise deutlich kleiner als ein Gigabyte. Eine tägliche verschlüsselte Kopie außerhalb des Servers kostet daher fast nichts und stellt alles wieder her, was ein erneuter Scan nicht zurückbringen kann.
FAQ
Muss ich Musik auf einem VPS transkodieren?
Fast nie. Smartphones und Browser dekodieren MP3, AAC, Opus und FLAC selbst. Der Server sendet die Datei daher unverändert und benötigt dafür nahezu keine CPU-Ressourcen. Es gibt einen sinnvollen Anwendungsfall: eine FLAC-Bibliothek, die über mobile Daten gestreamt wird. Die Umwandlung von etwa 900 kbps in Opus mit 128 kbps reduziert den Datenverbrauch ungefähr um den Faktor sieben. Navidrome kann dies pro Benutzer und pro Player durchführen. Die Funktion bleibt deaktiviert, bis Sie sie aktivieren.
Warum kann meine Smartphone-App keine Musik zum Offline-Hören herunterladen?
Weil der Offline-Speicher eine Client-Funktion und keine Server-Funktion ist. Die Subsonic API ermöglicht jedem Client, eine vollständige Datei abzurufen. Ob die App eine Kopie auf dem Smartphone speichert, entscheidet jedoch die App selbst. Prüfen Sie das Client-Verzeichnis unter navidrome.org/apps und wählen Sie einen Client aus, dessen Beschreibung Offline-Downloads oder Caching erwähnt. Einige Clients cachen nur Titel, die Sie bereits wiedergegeben haben. Das ist nicht dasselbe wie die Synchronisierung eines Albums vor einer Reise.
Warum wurde ein Album nach dem Scan in mehrere Alben aufgeteilt?
Das Tag für den Album-Interpreten fehlt oder ist bei den Titeln uneinheitlich. Navidrome gruppiert nach Tags und nicht nach Ordnern. Zwölf Titel mit zwölf unterschiedlichen Interpretenwerten und ohne gemeinsamen Album-Interpretenwert erscheinen daher als zwölf Alben. Setzen Sie bei jedem Titel des Albums das Tag für den Album-Interpreten, bei einer Kompilation normalerweise auf Various Artists, und starten Sie anschließend einen erneuten Scan. MusicBrainz Picard oder beets erledigen dies für einen gesamten Ordner auf einmal.
Ersetzt selbst gehostetes Musikstreaming Spotify?
Es ersetzt den Player und die Bibliothek, nicht den Katalog. Sie erhalten Ihre eigene Sammlung auf jedem Gerät sowie die Playlists und Wiedergabezähler, die Ihnen keine Änderung der Lizenzbedingungen wegnehmen kann. Neue Veröffentlichungen und Empfehlungen auf Grundlage des Hörverhaltens anderer Benutzer erhalten Sie jedoch nicht. Die meisten Betreiber einer solchen Lösung kaufen ihre Musik und behalten für die Suche nach neuer Musik ein günstiges Streaming-Konto.