Navidrome on TrueNAS Scale (Day 23)
Got an old music collection sitting around? try Navidrome
I found some old hard drives from my campus days (surprisingly still working) with a bunch of songs. Rather than letting these sit idle, figured it was time to make this collection accessible on the go.
So I went looking for something I could use and found Navidrome.
Setting Up TrueNAS Datasets
First, create two datasets through the TrueNAS GUI (I prefer this over regular folders for better permission control):
navidrome
├── data
└── music
Installing Navidrome
TrueNAS Scale's ElectricEel release moved to Docker for apps (instead of Kubernetes)
Install:
- Create the necessary datasets
- Install Navidrome from the apps catalog
- Configure:
- Set environment variables if needed
- Point to your data and music folders
- Set user/group IDs
- Configure resource
Adding Traefik Routing
This part assumes you already have Traefik set up as a reverse proxy with cert-manager and HTTPS redirect middleware configured.
If you're starting fresh, you'll want to get those pieces in place first.
Once Navidrome is running, we need to make it accessible through a reverse proxy. This requires two pieces:
- an external service
- ingress route
An external service definition:
apiVersion: v1
kind: Service
metadata:
name: navidrome
namespace: routes
spec:
ports:
- port: <port>
targetPort: <port>
type: ExternalName
externalName: <Ip>
HTTP redirect route:
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: navidrome-redirect
namespace: routes
spec:
entryPoints:
- web
routes:
- match: Host(`<host>`)
kind: Rule
middlewares:
- name: https-redirect
services:
- name: noop@internal
kind: TraefikService
And the actual route over HTTPS:
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: navidrome
namespace: routes
spec:
entryPoints:
- websecure
routes:
- match: Host(`<host>`)
kind: Rule
services:
- name: navidrome
port: <port>
scheme: http
tls:
secretName: <ssl cert secret>
Beyond the Web UI
While Navidrome's web interface is solid, one of its strengths is Subsonic API compatibility.
This means you can use various Subsonic-compatible apps as front-ends for your music collection.
I chose to use Symfonium as my client of choice and it's been impressive.
Went for a photo walk and with gapless playback and a smart queue that keeps playing similar tracks (like Spotify's song radio'ish), it basically works, I forgot it was a self hosted thing. Also thanks to Tailscale, I can stream my music anywhere without noticing any difference from other services.
Now this isn't a replacement and I will still most definitely keep my spotify playlists