Navidrome
Self-hosted music streaming server (12k ⭐). Subsonic-compatible, works with every music client (Sonix, DSub, Subtracks), supports transcoding,Gapless playback, and library scanning.
yaml
docker-compose.yml
volumes:
navidrome_data:
services:
navidrome:
container_name: navidrome
image: deluan/navidrome:latest
restart: unless-stopped
ports:
- ${ND_PORT:-4533}:4533
environment:
- ND_SCANINTERVAL=${ND_SCANINTERVAL:-1m}
- ND_LOGLEVEL=${ND_LOGLEVEL:-info}
- ND_MUSICFOLDER=${ND_MUSICFOLDER:-./music}
- ND_DATAFOLDER=${ND_DATAFOLDER:-./data}
- ND_SESSIONTIMEOUT=${ND_SESSIONTIMEOUT:-0}
- ND_BASEURL=${ND_BASEURL:-}
- ND_ENABLETRANSCODINGCONFIG=${ND_ENABLETRANSCODINGCONFIG:-false}
- ND_TRANSCODINGCACHESIZE=${ND_TRANSCODINGCACHESIZE:-100MB}
- ND_READAHEADSECONDS=${ND_READAHEADSECONDS:-}
- ND_LOGPATH=${ND_LOGPATH:-}
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
volumes:
- navidrome_data:/data
- ${ND_MUSIC_PATH:-./music}:/music:ro
read_only: true
.ENV
.env example
# Navidrome — Self-hosted Music Streaming Server
# =============================================
# --- Core ---
ND_PORT=4533
ND_MUSICFOLDER=./music
ND_DATAFOLDER=./data
ND_SCANINTERVAL=1m
ND_LOGLEVEL=info
ND_SESSIONTIMEOUT=0
ND_BASEURL=http://navidrome.local
ND_ENABLETRANSCODINGCONFIG=false
ND_TRANSCODINGCACHESIZE=100MB
ND_LOGPATH=./log
# --- Transcoding ---
# ND_READAHEADSECONDS=60
# --- Paths (mounted from host) ---
ND_MUSIC_PATH=./music
# --- User/Group ---
PUID=1000
PGID=1000
# --- Locale ---
TZ=UTC
deployment
Quick Start
- Create a working directory named after the service.
- Copy the compose file and generated `.env` into that directory.
- Review the variables and replace placeholders with real values.
- Run `docker compose up -d`.
mkdir navidrome
cd navidrome
# create docker-compose.yml
# create .env
docker compose up -d