đŸŽ” Musik aus der eigenen Cloud: Navidrome auf dem Mini-PC

Vor drei Tagen habe ich beschrieben, wie aus dem Hörbuch-Ordner eine richtige Hörbuch-Bibliothek geworden ist. Die E-Books laufen seit Dezember ĂŒber Calibre-Web. Fehlte noch das Naheliegendste von allem: Musik.

Auch die lag lĂ€ngst da – im selben Cloud-Ordner-Prinzip. Und auch hier war der Ordner nicht das Problem, sondern das, was er nicht kann.

⚖ Ein Wort vorweg

In dieser Bibliothek liegt ausschließlich copyrightfreie Musik, und sie ist rein privat – fĂŒr mich und meine Familie. Kein öffentlicher Dienst, keine Selbstregistrierung, nichts wird nach außen geteilt. Wer einen Streaming-Dienst sucht, ist hier falsch; wer seine eigenen Dateien mit Cover und Player sehen will, richtig.

đŸŽ” Was ein Ordner nicht kann

Ein Ordner voller MP3s ist eine Liste von Dateinamen. Kein Cover, kein Reinhören ohne Download, keine Sortierung nach Interpret oder Album, und auf dem Handy erst recht keine Freude. Genau dafĂŒr gibt es Navidrome: Es liest einen vorhandenen Musikordner, baut daraus eine Bibliothek mit Cover-Ansicht und bringt einen Player im Browser mit.

Und – fĂŒr den Familienbetrieb entscheidend – es hat eine eigene Benutzerverwaltung, unabhĂ€ngig von der Nextcloud daneben. Jeder bekommt sein Konto, seine Wiedergabelisten, seine ZĂ€hler.

đŸ—‚ïž Wieder: ein Ordner, zwei Sichten

Das Muster ist dasselbe wie bei den HörbĂŒchern, und aus denselben GrĂŒnden. Die Musik bleibt liegen, wo sie liegt, und wird nur lesend eingebunden:

/data/nextcloud/Frank/files/Music  →  /music  :ro

Nichts wird verdoppelt, der gewohnte Weg bleibt – Musik landet per Sync vom Handy im Cloud-Ordner, und Navidrome findet sie beim nĂ€chsten Durchlauf von selbst. Seine eigene Datenbank liegt getrennt davon; sie enthĂ€lt Konten, Wiedergabelisten und AbspielzĂ€hler, nicht die Musik.

🔒 Ordner anlegen ohne root

Ein kleines Hindernis vorweg, das vielleicht andere kennen: FĂŒr den SSH-Zugang auf meinem Server ist kein Passwort hinterlegt, also gibt es dort kein sudo. Nur liegt das Datenverzeichnis root gehört und schreibgeschĂŒtzt da – und genau dort sollte ein neuer Ordner entstehen.

Der Ausweg ist hĂŒbsch und kommt ohne jede RechteĂ€nderung am Host aus: einen Wegwerf-Container starten, der das Verzeichnis eingeblendet bekommt. Im Container ist man root, außerhalb Ă€ndert sich nichts.

docker run --rm -v /data:/data alpine sh -c 'mkdir -p 
 && chown 33:33 
'

Der Dienst selbst lĂ€uft anschließend unter derselben Kennung wie seine Nachbarn, damit er den Cloud-Ordner ĂŒberhaupt lesen darf.

đŸ‡©đŸ‡Ș Deutsch, und dann die Optik

OberflĂ€che auf Deutsch war schnell erledigt – dafĂŒr gibt es eine offizielle Einstellung, ebenso fĂŒr den Text auf der Anmeldeseite und fĂŒr das Hintergrundbild. Alle drei habe ich nach dem Setzen im laufenden Container nachgesehen, statt sie fĂŒr gesetzt zu halten.

Beim Rest wurde es interessanter. Ich hĂ€tte die OberflĂ€che gern in meinen eigenen Farben gehabt – und habe erst recherchiert statt zu basteln. Ergebnis: Navidrome hat kein eingebautes Custom-CSS, und der Entwickler hat das fĂŒr die aktuelle OberflĂ€che ausdrĂŒcklich abgelehnt, weil ohnehin ein Neubau ansteht. Echte eigene Farben gingen nur ĂŒber ein selbst gebautes Abbild: Projekt forken, Theme im Quellcode ergĂ€nzen, Frontend neu bauen.

Das habe ich bewusst gelassen. Es wĂ€re bei jedem Update erneut zu pflegen – und dieser Preis steht in keinem VerhĂ€ltnis zu einem Farbton auf einer Anmeldeseite, die nur meine Familie sieht. Von drei möglichen Aufwandsstufen ist es die kleinste geworden.

đŸ–Œïž Ein eigenes Favicon – und eine Option, die es nicht gibt

Eigenes Hintergrundbild und eigenes Favicon wollte ich trotzdem. Eine Suche spuckte prompt eine passende Einstellung dafĂŒr aus. Ich habe sie gegen den echten Quellcode geprĂŒft, bevor ich sie eingebaut habe – und es gibt sie nicht. Frei erfunden, plausibel benannt, in der Konfiguration nicht vorhanden.

Das ist keine Anekdote, sondern eine Arbeitsregel: Was sich in einer Minute an der Quelle nachsehen lĂ€sst, wird nachgesehen – gerade wenn eine Zusammenfassung es so hilfreich formuliert.

Der Grund, warum es diese Einstellung nicht geben kann, war dann auch schnell gefunden: Navidrome liefert seine gesamte OberflÀche aus einer einzigen BinÀrdatei aus. Es gibt schlicht keinen Pfad im Dateisystem, unter dem man ein Symbol austauschen könnte.

🔀 Also ein kleiner Vorbau

Die Lösung ist ein schlanker Reverse-Proxy davor, der genau zwei Dinge tut: eigene Bilder ausliefern und alles andere unverÀndert durchreichen.

  • 🔎 Die Symbol-Pfade abgelesen, nicht geraten – aus dem ausgelieferten HTML und dem Web-Manifest. Es sind sechs StĂŒck, vom klassischen favicon.ico bis zu den Android-Symbolen; alle sechs zeigen jetzt auf dieselbe Bilddatei, herunterskalieren kann der Browser selbst
  • 🏠 Eigene Bilder unter eigener Adresse – vorher hatte ich mir das Hintergrundbild behelfsmĂ€ĂŸig von einer Nachbardomain geliehen. Diese Kopplung ist damit wieder gelöst
  • 🔌 Kein neuer Tunnel-Eintrag nötig – der Vorbau ĂŒbernimmt einfach den Port, unter dem der Dienst vorher selbst erreichbar war. Von außen Ă€ndert sich nichts

Wer so etwas nachbaut, sollte eine Kleinigkeit einplanen: Navidrome hĂ€lt fĂŒr die Anzeige „wird gerade gespielt“ eine dauerhaft offene Verbindung. Ohne die passenden Proxy-Einstellungen bleibt dieser Strom im Puffer hĂ€ngen – die Seite lĂ€uft, nur aktualisiert sich nichts mehr von selbst.

🐌 Der Stolperstein zum Schluss

Ein letzter Wunsch war der Titel im Browser-Tab. Eine Einstellung dafĂŒr gibt es nicht, also ersetzt der Vorbau ihn direkt im ausgelieferten HTML. Eingebaut, neu gestartet, nachgesehen – keine Wirkung. Kein Fehler im Log, keine Meldung, einfach nichts.

Der Grund: Navidrome liefert komprimiert aus, und ein Textfilter im Proxy kann komprimierten Inhalt nicht durchsuchen. Er hat brav gearbeitet und nie etwas gefunden. Erst als der Vorbau die Antwort unkomprimiert anfordert, greift die Ersetzung.

Aufgefallen ist das nur, weil ich hinterher nachgesehen habe statt zu glauben. Die unangenehmsten Fehler sind die, die nichts sagen.

đŸ’Ÿ Und wieder: was ins Backup gehört

Dieselbe Überlegung wie bei den HörbĂŒchern, dieselbe Antwort. Die Musikdateien liegen in der Nextcloud und damit lĂ€ngst in der nĂ€chtlichen Sicherung. Was fehlte, war das Verzeichnis des Dienstes selbst – Konten, Wiedergabelisten, AbspielzĂ€hler. Ein paar Megabyte, und das Einzige, was sich nicht wiederbeschaffen lĂ€sst.

Fazit

Drei Medien, ein Muster: Die Dateien bleiben in der Cloud liegen, ein spezialisierter Dienst liest sie nur, und die eigentliche Leistung ist das, was nicht in Dateien passt – Cover, Fortschritt, Konten, Wiedergabelisten.

Der Aufwand war klein, weil ich an zwei Stellen nicht ehrgeizig war: kein selbst gebautes Abbild fĂŒr ein paar Farben, keine Bastelei am Programm selbst. Alles, was ich wollte, ließ sich davor erledigen. đŸŽ”

LĂ€uft bei dir ein Mini-PC, auf dem noch Platz fĂŒr so etwas wĂ€re? Melde dich gerne – einfach Kontakt aufnehmen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert