Running your own music streaming server using Navidrome on a Raspberry Pi
06 February, 2025Endpoint: I now have a household music streaming server with native apps on android and iphone, a web client and desktop client. I could put it on the internet to use when I'm out and about if I wanted to. Very cool! In my browser it looks like this:
Longer: I've been interested in setting my own streaming servers up for years. I've given Plex a go as a video server but its creeping commercialism kept me from going all-in so Jellyfin has been tempting me but I don't have a PC that could do the necessary video transcoding lying around that I yet want to leave turned on 24/7.
So this article on setting up the music streaming server Navidrome, by Wouter Groeneveld, was verrrrrry interesting and I thought I'd give it a go - successfully as it turns out!
I have got a box of unused raspberry pis at home, so pulled out the first one and started the setup. Turns out that I am now running Navidrome on an original Raspberry Pi Zero W with a whopping single 1GHz core and 512MB RAM.
Broadly, these were the instructions I followed but with a few modifications along the way which I've put below.
1. Install docker
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo apt-get install uidmap
dockerd-rootless-setuptool.sh install
2. Set up Navidrome
- create directories
mkdir navidrome navidrome/data
mkdir music
- copy music across from your local PC. I just did a couple of albums to make sure it was all working OK (I had to make sure I wasn't using the version of scp which is bundled with windows so I used C:\Program Files\Git\usr\bin\scp.exe)
scp -r Sia/* pi@your-pi-local-ip-address:~/music/
- create
docker-compose.yml
based on https://www.navidrome.org/docs/installation/docker/:
services:
navidrome:
image: deluan/navidrome:latest
ports:
- "4533:4533"
restart: unless-stopped
environment:
# Optional: put your config options customization here. Examples:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
volumes:
- "/home/pi/navidrome/data:/data"
- "/home/pi/music:/music:ro"
3. Run docker-compose
docker-compose up -d
To check its status: docker ps
To check the logs: docker logs <container id>
Use Navidrome!
- Visit http://raspberrypi:4533 in your browser
- Fill the username and password for an admin user
- Play music!
If that is all working then:
- Create a second non-admin user
- Install substreamer: https://substreamerapp.com/
- Log in and stream your music on your phone!
Great success!