philwilson.org

Running your own music streaming server using Navidrome on a Raspberry Pi

06 February, 2025

Endpoint: 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

  1. create directories
    1. mkdir navidrome navidrome/data
    2. mkdir music
  2. 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)
    1. scp -r Sia/* pi@your-pi-local-ip-address:~/music/
  3. 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!

  1. Visit http://raspberrypi:4533 in your browser
  2. Fill the username and password for an admin user
  3. Play music!

If that is all working then:

  1. Create a second non-admin user
  2. Install substreamer: https://substreamerapp.com/
  3. Log in and stream your music on your phone!

Great success!

See other posts tagged with raspberrypi navidrome music mp3 docker and all posts made in February 2025.