<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Musik – Serverküche</title><link>https://serverkueche.de/tags/musik/</link><description>Musik – Neueste Beiträge von Serverküche</description><generator>Hugo</generator><language>de-DE</language><managingEditor>feedback@serverkueche.de (Serverküche)</managingEditor><webMaster>feedback@serverkueche.de (Serverküche)</webMaster><copyright>2026 Serverküche</copyright><lastBuildDate>Thu, 17 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://serverkueche.de/tags/musik/index.xml" rel="self" type="application/rss+xml"/><item><title>Navidrome: die eigene Musik streamen wie mit Spotify</title><link>https://serverkueche.de/tutorials/navidrome-musik-streamen/</link><pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate><author>feedback@serverkueche.de (Serverküche)</author><guid>https://serverkueche.de/tutorials/navidrome-musik-streamen/</guid><description>Deine Musiksammlung von überall streamen – ohne Abo und Tracking: Navidrome hinter Traefik, mit App-Anbindung über den Subsonic-Standard und Backup.</description><content:encoded><![CDATA[<p>Deine mühsam zusammengetragene Musiksammlung liegt auf einer Festplatte, während du unterwegs Spotify zahlst? Navidrome macht deine eigenen Dateien zu einem Streaming-Dienst: Weboberfläche, mobile Apps, überall Zugriff – und niemand wertet aus, was du hörst.</p>
<h2 id="was-bauen-wir">Was bauen wir?</h2>
<p>Einen persönlichen Musik-Streaming-Server mit <strong>Navidrome</strong> (v0.63.2) hinter <a href="/tutorials/reverse-proxy-traefik/">Traefik</a>. Am Ende durchsuchst du deine Sammlung im Browser nach Alben, Künstlern und Genres, streamst on-demand – und bindest über den <strong>Subsonic-Standard</strong> die App deiner Wahl (Symfonium, DSub, play:Sub …) an, um auch unterwegs zu hören. Navidrome ist bemerkenswert ressourcenschonend (in Go geschrieben) und läuft problemlos auf einem kleinen VPS.</p>
<p>Für <strong>Hörbücher und Podcasts</strong> ist es dagegen das falsche Werkzeug: Navidrome denkt in Alben und Titeln, nicht in Kapiteln, und merkt sich keine Hörposition über Geräte hinweg. Dafür gibt es Audiobookshelf <span class="text-sm text-slate-500 dark:text-slate-400">(Tutorial folgt voraussichtlich im September)</span> – beide lassen sich problemlos parallel betreiben.</p>
<h2 id="voraussetzungen">Voraussetzungen</h2>
<ul>
<li>Ein Server mit laufendem <a href="/tutorials/reverse-proxy-traefik/">Traefik</a> und <a href="/tutorials/docker-compose-grundlagen/">Docker Compose</a></li>
<li>Eine <a href="/tutorials/domain-mit-server-verbinden/">Subdomain, die auf den Server zeigt</a> – im Folgenden <code>DEINE_DOMAIN</code></li>
<li>Deine Musikdateien (MP3, FLAC, …) mit ordentlichen Metadaten (Tags) – daraus baut Navidrome die Bibliothek</li>
</ul>
<div class="not-prose my-6 overflow-hidden rounded-xl border border-paprika-200 bg-paprika-50 dark:border-paprika-800 dark:bg-paprika-900/20"
     data-track-content data-content-name="Affiliate-Box · /tutorials/navidrome-musik-streamen/" data-content-piece="VPS 1000 G12.5">
  <div class="flex items-center justify-between border-b border-paprika-200 bg-paprika-100 px-4 py-1.5 text-xs font-semibold uppercase tracking-wide text-paprika-700 dark:border-paprika-800 dark:bg-paprika-900/40 dark:text-paprika-300">
    <span>🍳 Empfehlung</span>
    <span title="Mit * markierte Links sind Affiliate-Links.">Anzeige</span>
  </div>
  <div class="flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between">
    <div>
      <p class="text-lg font-bold text-slate-900 dark:text-white">VPS 1000 G12.5</p>
      <p class="mt-1 text-sm text-slate-600 dark:text-slate-300">4 vCore · 8 GB RAM · 128 GB SSD</p>
      <p class="mt-1 text-sm font-semibold text-paprika-700 dark:text-paprika-400">ab 14,50 €/Monat</p>
      <p class="mt-2 text-sm text-slate-600 dark:text-slate-400">Navidrome ist genügsam; für große Sammlungen zählt vor allem der Speicherplatz.</p>
    </div>
    <a href="https://www.netcup.com/de/server/vps/vps-1000-g12.5-24m-eu?ref=44083#vps-1000-g12.5-12m-eu" rel="sponsored noopener" target="_blank"
   data-track-event="Affiliate|netcup: Affiliate-Box|VPS 1000 G12.5 · {page}"
   class="inline-flex shrink-0 items-center justify-center rounded-lg bg-paprika-600 px-5 py-2.5 font-semibold text-white transition-colors hover:bg-paprika-700">
  Zu netcup →
</a>

  </div><div class="px-4 pb-4"><div class="not-prose my-3 rounded-lg border border-herb-500/40 bg-herb-50 px-3 py-2 text-sm text-slate-700 dark:bg-herb-900/20 dark:text-slate-200">
  <p class="flex flex-wrap items-center gap-x-2 gap-y-1">
    <span>💶 <strong>5 € Gutschein</strong> für netcup-Neukunden:</span>
    <button type="button" data-voucher-code data-track-voucher="36nc17844976032"
            title="Zum Kopieren klicken" class="cursor-pointer rounded bg-white px-2 py-0.5 font-mono text-sm font-semibold text-herb-800 hover:ring-2 hover:ring-herb-500/40 dark:bg-slate-800 dark:text-herb-400">36nc17844976032</button>
    <span class="text-xs text-slate-500 dark:text-slate-400">(nicht für Domains und VPS Lite)</span>
  </p>
  <p class="mt-1 text-xs text-slate-500 dark:text-slate-400">
    <a href="https://www.netcup.com/de/checkout/warenkorb?ref=44083" rel="sponsored noopener" target="_blank"
       data-track-event="Affiliate|netcup: Gutschein einlösen|5 € · {page}"
       class="font-medium text-herb-800 underline underline-offset-2 hover:text-herb-900 dark:text-herb-400">Im Warenkorb einlösen →</a>
  </p>
</div></div>
</div>

<h2 id="schritt-für-schritt">Schritt für Schritt</h2>
<h3 id="schritt-1-projekt-anlegen">Schritt 1: Projekt anlegen</h3>
<p>Navidrome braucht zwei Ordner: einen für die Musik (nur lesend) und einen für seine Datenbank/Index. Lege das Projekt an:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p /opt/navidrome/data /opt/navidrome/music <span class="o">&amp;&amp;</span> <span class="nb">cd</span> /opt/navidrome
</span></span><span class="line"><span class="cl">chown -R 1000:1000 /opt/navidrome</span></span></code></pre></div>
</div>
<h3 id="schritt-2-musik-auf-den-server-bringen">Schritt 2: Musik auf den Server bringen</h3>
<p>Kopiere deine Musik in den <code>music</code>-Ordner – am besten sauber strukturiert (<code>Künstler/Album/Titel.mp3</code>). Für die Übertragung eignet sich <code>rsync</code> über SSH:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rsync -av --progress ~/Musik/ root@DEINE_SERVER_IP:/opt/navidrome/music/</span></span></code></pre></div>
</div>
<p>Wichtig sind <strong>gute Metadaten</strong>: Navidrome liest Künstler, Album, Titel, Jahr und Cover aus den Tags der Dateien, nicht aus den Dateinamen. Schlecht getaggte Dateien landen unsortiert in der Bibliothek.</p>
<h3 id="schritt-3-compose-datei">Schritt 3: Compose-Datei</h3>
<p>Ersetze <code>DEINE_DOMAIN</code>:</p>
<div class="sk-code">
  <span class="sk-code-head">YAML</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">navidrome</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">deluan/navidrome:0.63.2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;1000:1000&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">environment</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ND_MUSICFOLDER</span><span class="p">:</span><span class="w"> </span><span class="l">/music</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ND_DATAFOLDER</span><span class="p">:</span><span class="w"> </span><span class="l">/data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ND_SCANNER_SCHEDULE</span><span class="p">:</span><span class="w"> </span><span class="l">1h       </span><span class="w"> </span><span class="c"># stündlich nach neuen Dateien suchen</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">./data:/data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">./music:/music:ro       </span><span class="w"> </span><span class="c"># Musik nur lesend einbinden</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">proxy]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.enable=true&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.routers.navidrome.rule=Host(`DEINE_DOMAIN`)&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.routers.navidrome.entrypoints=websecure&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.routers.navidrome.tls.certresolver=le&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.services.navidrome.loadbalancer.server.port=4533&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">networks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">proxy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></div>
</div>
<p>Das <code>:ro</code> am Musik-Volume ist bewusst: Navidrome soll deine Dateien nur lesen, nie verändern. <code>ND_SCANNER_SCHEDULE: 1h</code> lässt es stündlich nach neuer Musik suchen.</p>
<h3 id="schritt-4-starten-und-den-scan-prüfen">Schritt 4: Starten und den Scan prüfen</h3>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose up -d</span></span></code></pre></div>
</div>
<p>Navidrome scannt beim ersten Start die Bibliothek. Das kannst du im Log verfolgen:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose logs <span class="p">|</span> grep -i scan</span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Scanner: Completed processing folder audioCount=3 tracksImported=3
</span></span><span class="line"><span class="cl">Scanner: Finished scanning all libraries duration=279ms</span></span></code></pre></div>
</div>
<p><code>tracksImported</code> zeigt, wie viele Titel erkannt wurden. Bei großen Sammlungen dauert der erste Scan entsprechend länger.</p>
<h3 id="schritt-5-admin-konto-anlegen">Schritt 5: Admin-Konto anlegen</h3>
<p>Öffne <code>https://DEINE_DOMAIN/</code>. Beim ersten Aufruf legst du das Administrator-Konto an:</p>
<p><figure class="my-6"><img src="/tutorials/navidrome-musik-streamen/nd-setup_hu_302a4bfe43073d34.webp" srcset="/tutorials/navidrome-musik-streamen/nd-setup_hu_5f1760b0564ba8c6.webp 480w, /tutorials/navidrome-musik-streamen/nd-setup_hu_302a4bfe43073d34.webp 768w, /tutorials/navidrome-musik-streamen/nd-setup_hu_8c5ab977702e1222.webp 1200w, /tutorials/navidrome-musik-streamen/nd-setup_hu_9de011cd6ebf11fb.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/navidrome-musik-streamen/nd-setup_hu_f284bb8551dd9e7c.webp"
    alt="Der Navidrome-Ersteinrichtungsbildschirm zum Anlegen des Admin-Kontos" title="Beim ersten Start legst du Benutzername und Passwort des Admins fest"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Beim ersten Start legst du Benutzername und Passwort des Admins fest</figcaption></figure></p>
<p>Vergib einen Benutzernamen und ein starkes Passwort. Danach landest du direkt in deiner Bibliothek.</p>
<h3 id="schritt-6-durch-die-bibliothek-stöbern">Schritt 6: Durch die Bibliothek stöbern</h3>
<p>Die Weboberfläche zeigt deine Musik nach Alben, Künstlern, Genres und zuletzt Hinzugefügtem – mit Cover-Rastern und Suche:</p>
<p><figure class="my-6"><img src="/tutorials/navidrome-musik-streamen/nd-albums_hu_5220efd9394e6662.webp" srcset="/tutorials/navidrome-musik-streamen/nd-albums_hu_f17fd843efaf681d.webp 480w, /tutorials/navidrome-musik-streamen/nd-albums_hu_5220efd9394e6662.webp 768w, /tutorials/navidrome-musik-streamen/nd-albums_hu_e1583a7564aa7528.webp 1200w, /tutorials/navidrome-musik-streamen/nd-albums_hu_a215078083b825ef.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/navidrome-musik-streamen/nd-albums_hu_4e4044bd75f4f691.webp"
    alt="Die Navidrome-Albenübersicht mit den erkannten Alben und Künstlern" title="Die Bibliothek: Alben mit Cover, Künstler und Filtermöglichkeiten"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Die Bibliothek: Alben mit Cover, Künstler und Filtermöglichkeiten</figcaption></figure></p>
<p>Ein Klick auf ein Album öffnet die Titelliste; ein Doppelklick auf einen Titel startet die Wiedergabe im eingebauten Player unten:</p>
<p><figure class="my-6"><img src="/tutorials/navidrome-musik-streamen/nd-player_hu_9aa1291f921c829f.webp" srcset="/tutorials/navidrome-musik-streamen/nd-player_hu_308c889e67a20f9e.webp 480w, /tutorials/navidrome-musik-streamen/nd-player_hu_9aa1291f921c829f.webp 768w, /tutorials/navidrome-musik-streamen/nd-player_hu_38d593d38fd4bd0f.webp 1200w, /tutorials/navidrome-musik-streamen/nd-player_hu_5025c4847f7b480f.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/navidrome-musik-streamen/nd-player_hu_b6a450bebde6302a.webp"
    alt="Ein geöffnetes Album mit Titelliste und dem laufenden Player am unteren Rand" title="Album-Ansicht mit Titelliste – unten spielt der eingebaute Player gerade den ersten Titel"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Album-Ansicht mit Titelliste – unten spielt der eingebaute Player gerade den ersten Titel</figcaption></figure></p>
<h3 id="schritt-7-mobile-apps-über-subsonic-anbinden">Schritt 7: Mobile Apps über Subsonic anbinden</h3>
<p>Navidrome spricht die <strong>Subsonic-API</strong> – einen etablierten Standard, den viele Musik-Apps unterstützen. So hörst du deine Sammlung unterwegs mit der App deiner Wahl. In der App gibst du an:</p>
<ul>
<li><strong>Server:</strong> <code>https://DEINE_DOMAIN</code></li>
<li><strong>Benutzername/Passwort:</strong> dein Navidrome-Konto</li>
</ul>
<p>Empfehlenswerte Apps: <strong>Symfonium</strong> oder <strong>Tempo</strong> (Android), <strong>play:Sub</strong> oder <strong>substreamer</strong> (iOS). Lege für Familienmitglieder in den Navidrome-Einstellungen eigene Nutzerkonten an, statt das Admin-Konto zu teilen.</p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-herb-400 bg-herb-50 dark:border-herb-700 dark:bg-herb-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">🧑‍🍳</span>Transcoding spart mobiles Datenvolumen
  </p>
  <div class="prose-kitchen text-sm">Navidrome kann Musik beim Streamen in eine kleinere Bitrate umwandeln (Transcoding), etwa für unterwegs. Das aktivierst du pro Nutzer bzw. Player in den Einstellungen unter „Transcoding“. So streamst du zu Hause in voller Qualität und mobil datensparend – ohne die Originaldateien anzutasten.</div>
</div>
<h2 id="wenn-es-nicht-funktioniert">Wenn es nicht funktioniert</h2>
<div class="troubleshoot not-prose">
<p><strong>Die Bibliothek bleibt leer.</strong> Entweder liegen keine Dateien im gemounteten <code>music</code>-Ordner, oder die Rechte stimmen nicht. Prüfe: <code>docker compose logs | grep -i scan</code> zeigt <code>tracksImported</code>. Ist es <code>0</code>, kontrolliere den Pfad und dass der <code>music</code>-Ordner UID 1000 gehört (siehe <a href="/tutorials/linux-benutzer-und-rechte/">Benutzer &amp; Rechte</a>).</p>
<p><strong>Titel erscheinen unsortiert oder ohne Cover.</strong> Die Metadaten der Dateien sind unvollständig. Navidrome sortiert nach Tags, nicht nach Dateinamen – tagge die Dateien nach (z. B. mit Picard) und lass Navidrome erneut scannen.</p>
<p><strong>Neue Musik taucht nicht auf.</strong> Der Scan läuft nur stündlich (<code>ND_SCANNER_SCHEDULE</code>). Einen sofortigen Scan stößt du in der Weboberfläche über das Aktualisieren-Symbol oben an, oder du wartest bis zum nächsten Intervall.</p>
<p><strong>Die App verbindet sich nicht.</strong> Fast immer die Server-URL: Sie muss <code>https://DEINE_DOMAIN</code> lauten (mit <code>https://</code>, ohne Pfad). Prüfe außerdem, dass Benutzername/Passwort exakt stimmen – manche Apps verlangen zusätzlich die Aktivierung der Subsonic-Kompatibilität, die bei Navidrome standardmäßig an ist.</p>
<p><strong>Wiedergabe stockt bei großen FLAC-Dateien mobil.</strong> Die Bandbreite reicht nicht fürs Original. Transcoding für den mobilen Player aktivieren (siehe Tipp in Schritt 7).</p>

</div>

<h2 id="wartung--backups">Wartung &amp; Backups</h2>
<ul>
<li><strong>Updates.</strong> Setze den Image-Tag (<code>deluan/navidrome:0.63.2</code>) gelegentlich auf die aktuelle Version und <code>docker compose up -d</code>; Navidrome migriert seine Datenbank beim Start. Der Rest läuft über deinen normalen <a href="/tutorials/docker-stack-aktuell-halten/">Update-Prozess</a>.</li>
<li><strong>Backup zweigeteilt.</strong> Deine <strong>Musik</strong> ist der wertvolle, unwiederbringliche Teil – sie gehört ohnehin in dein <a href="/tutorials/backups-mit-restic/">Restic-Backup</a> (oder du hast sie an anderer Stelle). Der <code>data</code>-Ordner (Navidromes Index, Abspielstatistiken, Playlists, Nutzerkonten) ist klein und sollte mitgesichert werden; er lässt sich zur Not aber auch durch einen neuen Scan wiederherstellen.</li>
<li><strong>Aufwand ist gering.</strong> Nach der Einrichtung besteht die Pflege vor allem darin, neue Musik in den Ordner zu legen – den Rest erledigt der stündliche Scan. Achte bei wachsender Sammlung auf den Speicherplatz (<code>df -h</code>); Musik summiert sich schnell auf.</li>
</ul>
]]></content:encoded></item></channel></rss>