Xenia's Website




meowings

Running My Music Server

10/11/2025

For a long time, I have been listening to music on a number of algorithm-driven websites, particularly YouTube and Spotify. It has been nice having a solution like this because it lets me discover a lot of new music, access it from any of my devices, and listen from anywhere with an internet connection. To mention, of course, that I do not pay for the premium services of these two platforms.

My Problem

Unfortunately, I started to have issues (as one does) with my youtube/spotify approach to music. For starters, I do not like handing over my data to tech conglomerates. On a related note, the algorithms recommending music, while nice to have at times, occasionally leave me in the same genre/loop of music until I lose all appreciation for it and it is reduced to background noise while I do something else. Then, there's also the fact I have to be online all the time, and as I do not have unlimited data plans, that usually means a silent ride in the metro to and from work. And finally, I do not like those companies; Spotify not doing making things better with the trumpism and running ICE recruitment ads. I digress. That's plenty of reasons for me to find an alternative.

My Solution

My solution came to me when Signalis hit its three year anniversary. 1000eyes, one of the artists behind the soundtrack, had posted a new piece to commemorate the occasion, and I had the good fortune of being whisked away to their Bandcamp page. This was also my first time learning of Bandcamp and the fact I get to pay the artists and own the music, as compared to paying Spotify, with the artist getting nothing ($0.004 per stream) and me not owning anything. Also Bandcamp is pretty neat, taking only a 15% cut. Anyway, I'm going off track. Bottom line is I bought music on Bandcamp and now had a number of music files I wanted to access across my devices.

Navidrome

Navidrome is a music server you can self host. It's pretty neat, it can order music into albums, it can have different libraries, and several users, and many other features one would expect of a music server. Running it on my Kubernetes homelab was a very simple process with 3 manifest files for the deployment, persistent volume claim, and service. Tragically, Navidrome has one limitation - you cannot upload music through the UI, and need a separate service for that.

Copyparty

When I thought of a UI to upload my music, I immediately thought of Copyparty, which I had already put on the homelab and stores a number of things including backups and Linux ISOs. Though, I was faced with a major limitation of Kubernetes. While persistent volumes are cluster-scoped, the persistent volume claims are namespace-scoped. This prevents me from sharing a persistent volume across Copyparty and Navidrome, which reside in different namespaces.

Running an NFS Server

What I can do, however, is mount NFS storage to my pods. So, staying true to overcomplicating everything, I deployed an NFS server to another namespace and gave it a Longhorn PVC to store data do. Then, I mounted the NFS volume's root directory to Copyparty, and the /navidrome subdirectory to the Navidrome pod.

One minor change needed was adding an entry in resolv.conf on my host nodes for the cluster's CoreDNS (10.0.1.40 or something). This allows the Kubelet to resolve the NFS server's service nfs-server.nfs-server.svc.cluster.local and thus mount the NFS storage properly.

I don't know exactly where I was going with this blogpost - whether it was about Navidrome or Kubernetes shenanigans. But whatever, hope you enjoyed reading it ahaha. I am happy to have nice, ethically sourced, high quality music sitting on a server. Though, you may be wondering... one of my issues (needing internet to listen to music) remains unsolved, right? Actually no. With Navidrome, I am able to download an entire playlist from one button which is convenient for my phone. Or, I can rsync to my Copyparty server to keep a local music folder updated. Overall, pretty cool :3