Trying to ditch centralized services is hard work, in the sense that you need to select some other tool that is functionally great, but also doable when it comes to self-hosting. Recently I had worked on getting rid of the hosted RSS/News aggregator I was using and it took some time and effort. But that worked out pretty nice, so I could find the motivation for a next step: music streaming
I've been paying for Spotify for about ten years now and using Apple Music next to that in an on/off fashion. Both buying content and sometimes subscribing to their Apple Music offering. There always was the tradeoff of paying for multiple services versus the convenience of having the best tool available for every music streaming job.
I really like Spotify for it's interface to find and discover music. But I dislike the whole podcast thing being shoved down my throat. And I like Apple Music for delivering songs/music in exactly the version that I was looking for (not the XYZ 2020 remix something) and the integration with Apple devices.
So the one company is forcing podcast and other features that I don't want, the other is nudging me to buy more of their stuff and not someone elses because who cares about open platform and standards?
Well I apparently still care, because I'm apparently looking for a way out. And I'm old enough to have big boxes of old unused computer cables, so I sure as hell have a drawer full of audio CD's and a folder 'Music' on my NAS with the good old MP3 collection collecting dust there.
Good, finding a solution
Ok, there are a couple of webbased players that looked nice. And a couple of them promised compatibility with Subsonic API. I have no idea what Subsonic is, but I figured this would become useful when it comes to linking to devices.
I was left with a couple of options, and I started with the one where I could find a packaged OpenBSD version of it. I decided to use one of my new OpenBSD.Amsterdam virtual machines for this pilot. Not a lot of diskspace, but enough to do some proper testing/playing around.
Installing Navidrome was as easy as:
rcctl enable navidrome
rcctl start navidrome
And then I had a working Navidrome server .... listening on localhost. So not much use at this stage.
Exposing the new service to the world wide web
So I setup /etc/acme-client.conf for my new domain 'zhort.eu' to be used for this new service. Then I configured OpenBSD httpd to serve that domain over TLS. That was quick and easy, but apparently if you want to reverse proxy another service OpenBSD httpd is not the tool to use, you are expected to switch to OpenBSD relayd!
Ok, relayd it is? I tried finding some simple example of a minimal setup where you serve TLS on the outside and proxy everything to a single webservice on localhost. This was all I needed. I found great tutorials on relayd, but nothing very specific for my requirements, mostly more complex with high availability. And I just wanted to play with Navidrome, sure not ready to work on making it high available :-)
Goto-http-server nginx to the rescue
While I get stuck with Navidrome for a bit, I worked on another BSD hosted app and there I ended up using nginx. As that was easy enough, I just copy/pasted that config and removed anything that I did not need: Good enough for now. I still need to fix a few minor TLS settings, before I can share that one. Internet.nl testing was not 100% yet.
So one navidrome service exposed to the internet on https://zhort.eu. Setting up an account was easy enough.
I found no apparent way to add music via the webfrontend, so I did a
pkgadd rsync on the host and filled up /var easily
by rsyncing my MP3 collection there.
I ended up moving /var/navidrome/music to /home and symlinking it back. Should be good enough for now.
Web based streaming
I quickly tried the webbased streaming from my laptop, and it just works. I will probably start looking for desktop based clients that support disconnected operation/caching later.
iOS based streaming
There is a list of clients on the Navidrome website that should work. From that I downloaded two that looked the most promising based on screenshots, data collection statement and reviews. Both substreamer and Amperfy qualified.
Having tried both briefly, substreamer seems nice if you have chromecast(compatible?) devices and/or bluetooth devices. Amperfy seems to support Airplay (still need to try it) but no other means that I could find now.
Most important feature will be Carplay compatibility. I use it all the time, and so do the other people in my family. And that Spotify family plan isn't going anywhere as long as not everybody is happy with the alternative.
update tested both apps while walking with Airpods: both work great, switching songs is swift/snappy. Also tested Carplay for a bit: Amperfy works fine, while Substreamer lacks any Carplay support right now.