TutorialsAugust 4, 20264 min read

How to Self-Host Navidrome (Music Streaming)

Your own Spotify, powered by your music collection. Install Navidrome on a VPS with Docker and stream to any Subsonic-compatible app.

NBy Nxeon

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 ~/navidrome
services:
  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 -d

Navidrome 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.

The Nxeon game-server control panel — live console, player slots, and TPS
The Nxeon game-server control panel — live console, player slots, and TPS

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 enable

Get 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 .m3u playlist 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

What audio formats does Navidrome support?

All the common ones — MP3, FLAC, AAC, OGG, WAV and more. It can transcode on the fly to save bandwidth on mobile connections.

How much RAM does Navidrome need?

Very little. Being written in Go, it runs happily in a couple of hundred MB, making it ideal for small VPS plans.

Can multiple people use one Navidrome server?

Yes. Create separate users, each with their own playlists, favourites and play history, all streaming from the same library.

Does Navidrome work with Subsonic apps?

Yes — it implements the Subsonic API, so the wide range of Subsonic clients on iOS, Android and desktop all work with it.

Stream your collection from anywhere on a fast NVMe VPS with full root access. Browse plans on the pricing page.

#navidrome#music#streaming#docker#self-hosting#seobatch

Deploy your first server in under a minute

Creating an account is free and takes no card details. You pay when you deploy — choose a billing term and pay from your wallet or by card at checkout.