Your own Spotify, powered by your music collection. Install Navidrome on a VPS with Docker and stream to any Subsonic-compatible app.
- Topic
- Tutorials
- Read time
- 4 min read
- Covers
- navidrome, music, streaming
- Last updated
- August 5, 2026
Navidrome is a lightweight, self-hosted music server that streams your own collection to any device. It's compatible with the Subsonic API, so it works with a whole ecosystem of polished mobile and desktop apps. This guide installs it with Docker and gets your library streaming. It's remarkably efficient — it runs comfortably on the smallest VPS plans.
Why Navidrome?
- Your music, no subscription: stream the albums you own, everywhere.
- Great apps: the Subsonic API means you can use excellent third-party clients on every platform.
- Tiny footprint: written in Go, it uses very little RAM and starts instantly.
Prerequisites
- A VPS with Docker installed — run Docker on a VPS.
- Your music files uploaded to the server, e.g. under
/srv/music. - A domain with an A record, e.g.
music.example.com.
Deploy Navidrome
mkdir -p ~/navidrome && cd ~/navidromeservices:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
restart: unless-stopped
user: 1000:1000
environment:
- ND_SCANSCHEDULE=1h
- ND_LOGLEVEL=info
volumes:
- ./data:/data
- /srv/music:/music:ro
ports:
- "4533:4533"docker compose up -dNavidrome mounts your music read-only and scans it on the schedule you set. Open http://your-server-ip:4533 and create the first admin user.
Put it behind HTTPS
Front Navidrome with Caddy so you stream over a secure URL:
music.example.com {
reverse_proxy 127.0.0.1:4533
}Then restrict the firewall:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableGet your music onto the server
Upload your library with rsync (it resumes and only copies changes):
rsync -avP ~/Music/ user@your-server-ip:/srv/music/Good tags make Navidrome shine — clean artist, album and track metadata means better browsing and cover art. Trigger a rescan from Settings after a big upload.
Stream from your phone
Navidrome's web player works everywhere, but the mobile experience is best through a Subsonic-compatible app. Install one, add a server with your https://music.example.com URL and Navidrome credentials, and your whole library — with offline downloads, playlists and scrobbling — is in your pocket. It pairs naturally with a media library like Jellyfin if you also self-host video.
Tag your library for a great experience
Navidrome reads everything it knows about your music from the files' metadata tags, so a well-tagged library is the difference between tidy browsing and a mess. Before or after uploading, run your collection through a tagger like MusicBrainz Picard to fill in:
- Artist, Album Artist, Album, Title, Track number — the essentials for correct grouping.
- Year and Genre — for browsing and smart playlists.
- Embedded cover art — so albums show artwork everywhere.
Getting *Album Artist* right in particular fixes the classic "compilation split into twelve one-track albums" problem. After a big tagging pass, trigger a rescan from *Settings* so Navidrome picks up the changes.
Playlists, transcoding and users
A few features round out the experience:
- Playlists: build them in the web player or any Subsonic app; Navidrome also imports
.m3uplaylist files placed in your music folder. - On-the-fly transcoding: set per-client bitrate limits so mobile streams use less data without you re-encoding anything.
- Multiple users and sharing: each user gets their own favourites, play counts and playlists, and you can generate share links for specific albums or tracks.
- Scrobbling: connect Last.fm or ListenBrainz to keep your listening history if you like tracking it.
Keep the container updated with a quick docker compose pull && docker compose up -d to pick up new features.
Getting your music onto the server
Navidrome streams files that live on the VPS, so upload your collection first. rsync is the reliable way — it resumes and only copies what's changed, which matters for a large library:
rsync -avP ~/Music/ user@your-server-ip:/srv/music/Keep the library on a dedicated block storage volume mounted at /srv/music so you can grow it without rebuilding the container. Navidrome mounts the folder read-only, so it never modifies your files — all its state (playlists, play counts, users) lives in its own data directory, which is the thing to back up.
Point the scan schedule (ND_SCANSCHEDULE) at an interval that suits how often you add music, or trigger a manual rescan from *Settings* after a big upload. Once your tags are clean and the library is scanned, you have a fast, private streaming service that follows you to any device with a Subsonic app — no monthly fee, no tracking, just your music.
FAQ
Put this guide to work on Cloud VPS hosting. From $8.88 for the first term, then $12.78 a month.
Nxeon editorial · Straight-talking guides from the team that runs the servers.
