Once I made the decision to stop renting most of my music, the next logical question was simple:
How do I keep the convenience of streaming, without giving up ownership?
The answer turned out to be surprisingly straightforward.
Why Navidrome
I wanted something that was:
- Self‑hosted
- Lightweight
- Actively maintained
- Compatible with many clients (mobile, desktop, web)
- Focused on my files, not a proprietary ecosystem
Navidrome checked all those boxes.
It’s a Subsonic‑compatible music server that indexes your own library and lets you stream it anywhere just like a commercial service, except you own everything.
Architecture Overview
My setup is deliberately simple and boring which is exactly what you want for something as personal as a music library.
- Docker (running in a Swarm cluster)
- One Navidrome service
- Music stored on shared storage (NFS)
- Metadata and database persisted outside the container
No cloud dependency. No vendor lock‑in.
Docker Compose
Below is my Navidrome Docker Compose file. Hostnames, IPs, paths and identifiers have been generalized, but the structure is identical.
services:
navidrome:
image: deluan/navidrome:latest
user: 1000:1000 # must match volume ownership
ports:
- "4533:4533"
restart: unless-stopped
volumes:
- navidrome-data:/data
- music-library:/music:ro
deploy:
placement:
constraints:
- node.role == worker
volumes:
navidrome-data:
driver: local
driver_opts:
type: nfs
device: :/path/to/navidrome/data
o: addr=NAS_IP,nolock,soft,rw,nfsvers=4
music-library:
driver: local
driver_opts:
type: nfs
device: :/path/to/music/library
o: addr=NAS_IP,nolock,soft,rw,nfsvers=4
A Few Important Notes
- Read‑only music volume: the
/musicmount is read‑only. Navidrome never modifies audio files. - Persistent data:
/datacontains the database, cache, playlists and artwork. - User mapping: the container runs as a non‑root user matching the NFS permissions.
- Swarm constraint: pinned to worker nodes for predictable storage access.
This setup has been rock‑solid.

Getting My Music Back from Apple
An important step in this transition was dealing with my past Apple Music / iTunes Match subscription.
Over the years, a lot of my music ended up living inside Apple’s ecosystem.
So I did the following:
- Exported my matched and uploaded tracks
- Retrieved the actual audio files (not just DRM‑bound placeholders)
- Normalized metadata where needed
- Integrated everything back into my local library
This step matters.
A streaming service may show you your music but that doesn’t mean you really have it.
Ripping CDs Again (Yes, Really)
I had to find my old USB CD/DVD drive.
And honestly? That felt good.
Ripping CDs again is slow.
Manual.
Almost meditative.
But the result is clean, lossless files that:
- Exist independently of any platform
- Can be backed up properly
- Will still be playable in 20 years
FLAC in. Tags cleaned. Covers embedded.
Done once. Owned forever.
Clients and Daily Usage
Once Navidrome is running, the ecosystem opens up:
- Web UI (any browser)
- Mobile apps (Subsonic compatible)
- Desktop players
- Even smart audio devices
From a user perspective, it feels exactly like a commercial streaming service except there’s no algorithm pushing anything.
You decide what exists in your library.
Backups Are Now My Responsibility
Ownership comes with responsibility.
So I make sure:
- The music library is backed up
- The Navidrome data directory is included in backups
- Restores are tested
This is the price of freedom.
And it’s worth paying.
In the End
This setup didn’t make me anti‑streaming.
It made me intentional.
Discovery can live in the cloud.
What I love lives at home.
Navidrome didn’t just give me a server.
It gave me my music back.