Self-hosted music streaming with Navidrome
Navidrome is a self-hosted, open source music server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device I heard about in the Linux Matters podcast.
I tried it on my little Kubernetes cluster and here are impressions so far.
The following deployment is based on the Navidrome Installing with Docker:
Kubernetes deployment: navidrome.yaml
| navidrome.yaml | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | |
To use a configuration file, create a navidrome.toml config
file in the /data folder and set the option
ND_CONFIGFILE=/data/navidrome.toml. So far this has not seemed
to be necessary.
Before running this deployment, create the required directory
and local user, get its user id (1008) and plug it above:
# useradd navidrome
# mkdir /home/k8s/navidrome
# chown navidrome.navidrome /home/k8s/navidrome
# ls -lan /home/k8s/navidrome/
total 0
drwxr-xr-x 1 1008 1008 0 Oct 26 08:53 .
drwxr-xr-x 1 0 0 372 Oct 26 08:53 ..
Once everything is ready, apply the deployment and give it a few minutes to start the pods and get the SSL certificated ready:
$ kubectl apply -f navidrome.yaml
namespace/navidrome created
persistentvolume/navidrome-pv-data created
persistentvolume/navidrome-pv-depot-music created
persistentvolumeclaim/navidrome-pvc-data created
persistentvolumeclaim/navidrome-pvc-depot-music created
deployment.apps/navidrome created
service/navidrome-svc created
ingress.networking.k8s.io/navidrome-ingress created
After a couple of minutes the server's web interface is at https://music.ssl.uu.am/ and one can start by creating an admin user, then (optionally) more users (some of which can be admins too). In the meantime, the server will detect and scan music files and, as they are found, make them available for playback. The web player works doesn't look like much but works very nicely:
This web player alone already satisfy my first need, which is to listen to music while working, i.e. from a computer. For the use case of listening to music while on the go (i.e. from a phone), there are a few Subsonic-compatible Android apps available directly from Google Play:
| GoSONIC | Symfonium | Ultrasonic |
|---|---|---|
![]() |
![]() |
![]() |
The jury is still out, and not in a hurry to come back, as to which of these players will win me over. Symfonium seems to be the only one that require payment, which likely won't help.
News
After a couple of months, I find myself always going back to GoSONIC. The main reason for this choice is just how easy, fast and reliable it is to start playing the most recently played playlist. This is essentially what I use every music player for, so this matters most for me.



