DEV Community

Cover image for Deploying Navidrome - Self-Hosted Music Streaming Server on Ubuntu 24.04
Sanskriti Harmukh for Vultr

Posted on with Aashish Chaurasiya • Originally published at docs.vultr.com

Deploying Navidrome - Self-Hosted Music Streaming Server on Ubuntu 24.04

Navidrome is an open-source, Subsonic/Airsonic-compatible music streaming server you host yourself. It indexes your library, serves it over the web, and ties into dozens of Subsonic-compatible mobile and desktop clients. This guide deploys Navidrome using Docker Compose with Traefik handling automatic HTTPS, persistent volumes for the music library and the metadata database. By the end, you'll have Navidrome streaming your music library securely at your domain.


Set Up the Directory Structure

1. Create the project directories:

$ mkdir -p ~/navidrome/{data,music}
$ cd ~/navidrome
Enter fullscreen mode Exit fullscreen mode

2. Create the environment file:

$ nano .env
Enter fullscreen mode Exit fullscreen mode
TZ=Asia/Kolkata
ND_MUSICFOLDER=/music
ND_DATAFOLDER=/data
ND_LOGLEVEL=info
ND_PORT=4533
DOMAIN=navidrome.example.com
EMAIL=admin@example.com
Enter fullscreen mode Exit fullscreen mode

Deploy with Docker Compose

1. Add your user to the Docker group:

$ sudo usermod -aG docker $USER
$ newgrp docker
Enter fullscreen mode Exit fullscreen mode

2. Create the Compose manifest:

$ nano docker-compose.yml
Enter fullscreen mode Exit fullscreen mode
services:
  traefik:
    image: traefik:v3.6
    container_name: traefik
    restart: unless-stopped
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.le.acme.httpchallenge=true"
      - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.le.acme.email=${EMAIL}"
      - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_letsencrypt:/letsencrypt

  navidrome:
    image: deluan/navidrome:0.60.3
    container_name: navidrome
    restart: unless-stopped
    environment:
      - ND_MUSICFOLDER=${ND_MUSICFOLDER}
      - ND_DATAFOLDER=${ND_DATAFOLDER}
      - ND_LOGLEVEL=${ND_LOGLEVEL}
      - TZ=${TZ}
    volumes:
      - ./music:${ND_MUSICFOLDER}
      - ./data:${ND_DATAFOLDER}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.navidrome.rule=Host(`${DOMAIN}`)"
      - "traefik.http.routers.navidrome.entrypoints=websecure"
      - "traefik.http.routers.navidrome.tls=true"
      - "traefik.http.routers.navidrome.tls.certresolver=le"
      - "traefik.http.services.navidrome.loadbalancer.server.port=${ND_PORT}"

volumes:
  traefik_letsencrypt:
Enter fullscreen mode Exit fullscreen mode

3. Start the services and view logs:

$ docker compose up -d
$ docker compose ps
$ docker compose logs navidrome
Enter fullscreen mode Exit fullscreen mode

Access Navidrome

  1. Open https://navidrome.example.com in a browser.
  2. Create the administrator account (username + password).
  3. The empty dashboard loads — Navidrome is waiting for music.

Add Music and Verify Playback

1. Drop a sample track into the music directory:

$ sudo wget https://archive.org/download/testmp3testfile/mpthreetest.mp3 -P ~/navidrome/music/
$ sudo chmod -R 755 ~/navidrome/music
Enter fullscreen mode Exit fullscreen mode

2. Trigger a rescan from **Settings → Server → Re-scan library (or wait for the scheduled scan).**

3. Click the track and press play — the built-in player streams it from the server.


Next Steps

Navidrome is running and streaming securely over HTTPS. From here you can:

  • Add more users with per-user library access from Users → Add
  • Point Subsonic-compatible apps (Symfonium, DSub, play:Sub) at https://navidrome.example.com
  • Mount external storage (block volume, S3 with rclone mount) at ~/navidrome/music for large libraries

For the full guide with additional tips, visit the original article on Vultr Docs.

Top comments (0)