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.icobis 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.