How to Install Navidrome on Debian 11 in Minutes
If you’re looking for a lightweight, self‑hosted music server that actually works out of the box, this guide will get Navidrome up and running on Debian 11 without turning your machine into an endless debugging session.
Why I Picked Navidrome
I’ve tried a handful of streaming stacks—Plex, Subsonic, Jellyfin—all of which love to eat system resources or come bundled with unnecessary bloat. Navidrome keeps it simple: a single binary, minimal dependencies, and an API that feels like modern web dev. It runs on ARM, Docker, or just plain old Debian, so it fits nicely into a home server setup.
Pre‑Check Your System
| What to look for | Why it matters |
|---|---|
| Debian 11 (bullseye) | The packages we’ll pull are built for bullseye; older releases may miss dependencies. |
| Sufficient disk space | Navidrome writes logs and caches thumbnails; a full /var can kill the service. |
| Root or sudo access | We need to install systemd units and edit /etc/hosts if you want local networking. |
I once had a server where the Navidrome container started fine but crashed after a few minutes because the disk was 99 % full—logs, thumbnails, all of that. Make sure /var has at least 1 GB free.
Install Required Packages
sudo apt update sudo apt install -y ffmpeg libavformat-dev libavcodec-dev libavutil-dev
Navidrome uses FFmpeg to generate artwork thumbnails from audio files. Without it, the UI looks like a blank white canvas.
Add the Navidrome Repository
echo "deb https://repo.navidrome.org/deb stable main" | sudo tee /etc/apt/sources.list.d/navidrome.list wget -O- https://repo.navidrome.org/keys/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/navidrome.gpg > /dev/null
The official repo gives you the latest stable release without having to manually download and unpack a tarball.
Install Navidrome
sudo apt update sudo apt install -y navidrome
A single command pulls in the binary, places it in /usr/bin, and installs a systemd service file at /etc/systemd/system/navidrome.service.
Configure the Service
Open the service file:
sudo nano /etc/systemd/system/navidrome.service
Add or tweak these lines under [Service]:
User=www-data Group=www-data Environment="ND_MUSICFOLDER=/srv/music" Environment="ND_HTTP_PORT=4533" ExecStart=/usr/bin/navidrome -config /etc/navidrome/config.toml Restart=on-failure
Running as www-data keeps the process isolated from root. The ND_MUSICFOLDER points to where your MP3s live; change that to wherever you store music.
If you want a nicer URL, edit /etc/hosts:
echo "127.0.1.1 music.local" | sudo tee -a /etc/hosts
Now http://music.local:4533 will work on the machine itself and any device that resolves music.local.
Enable and Start
sudo systemctl daemon-reload sudo systemctl enable navidrome sudo systemctl start navidrome
Check status:
systemctl status navidrome | grep Active
You should see “active (running)”. If it’s stuck in a failed state, look at the journal:
journalctl -u navidrome -f
Common pitfalls: missing ffmpeg (no thumbnails), wrong music folder path (empty library), or port conflicts if something else is using 4533.
Accessing Navidrome
Open your browser and go to:
http://<your-server-ip>:4533
Or, if you added the hosts entry, http://music.local:4533. The first time you hit it, you’ll be prompted to create an admin user. Pick a strong password—no one wants their music catalog getting compromised.
Optional Tweaks
- SSL: If you’re exposing Navidrome beyond your LAN, set up a reverse proxy with Nginx and TLS.
- User Permissions: By default the www-data user owns the service; if you want more granular control, use chmod 750 /srv/music or create a dedicated group.
- Auto‑Updates: Add an entry to /etc/cron.weekly/update-navidrome that runs apt update && apt upgrade -y navidrome.
What I Learned
I initially tried the “download the binary” route, only to realize I’d forgotten to give Navidrome permission to read my music folder. The systemd unit made it trivial, and the official repo kept everything up‑to‑date automatically.
If you run into a broken install, double‑check the ExecStart path; sometimes people copy the wrong binary from /usr/local/bin. And don’t be surprised if Navidrome seems slow on a fresh install—it’s still building its database of thumbnails.