Guide

Your own music server on a Raspberry Pi

A Raspberry Pi is a quiet, low-power way to keep your whole music collection at home and stream it anywhere. This guide sets one up with Navidrome, a free, open-source music server that runs comfortably on a Pi, and connects Audex to it. Plan on about 30 minutes, most of it waiting for downloads.

About 30 minutes Raspberry Pi 3, 4 or 5 Navidrome + Docker

What you need

  • A Raspberry Pi 4 or 5 (a Pi 3 works too). Navidrome needs very little; 2 GB of memory is plenty.
  • A microSD card of 16 GB or more, and the Pi's power supply. A USB SSD is better than the card for a large collection.
  • A network connection. A cable to your router is the most reliable; Wi-Fi works.
  • A computer to prepare the card and copy your music, on the same network as the Pi.
  • Your music files (MP3, FLAC, M4A, OGG, Opus and the like) and Audex on your phone.

Prefer to watch first?

This walkthrough shows Navidrome being set up on a Raspberry Pi 5, then fixing song tags and adding internet radio. The written steps below follow Navidrome's official Docker setup, so the commands differ a little from the video; both end with the same server.

Navidrome is installed from 4:29. Video by Jeffs Pi in the Sky, not affiliated with Audex. Nothing loads from YouTube until you press play. Watch on YouTube

1. Set up the Raspberry Pi

  1. Put Raspberry Pi OS on the card

    Install Raspberry Pi Imager on your computer and choose your Pi model, then Raspberry Pi OS Lite (64-bit) under "Raspberry Pi OS (other)". You won't need a desktop on a server.

    Download Raspberry Pi Imager
  2. Fill in the settings before writing

    When Imager offers to customise the system, set a hostname such as audex-pi, a username and password, your Wi-Fi if you're not using a cable, and turn on SSH with password login. Then write the card, put it in the Pi and power it on. The first start takes a few minutes.

  3. Connect to the Pi from your computer

    Open a terminal (PowerShell on Windows, Terminal on macOS or Linux) and log in with the username you chose:

    ssh yourname@audex-pi.local

    If audex-pi.local isn't found, use the Pi's IP address from your router's list of devices instead.

  4. Bring it up to date
    sudo apt update && sudo apt full-upgrade -y

2. Install Navidrome

  1. Install Docker

    Docker runs Navidrome in a container that's easy to update. This uses Docker's official install script, then lets your user run it without sudo:

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    sudo usermod -aG docker $USER

    Type exit and log in again with ssh so the change takes effect.

  2. Make folders for Navidrome and your music
    mkdir -p ~/navidrome/data ~/music
  3. Copy your music to the Pi

    From a terminal on your computer (not the Pi), copy a folder of music across. Repeat for each folder, or copy your whole library at once:

    scp -r "Path/To/Your Music Folder" yourname@audex-pi.local:music/

    A large library is quicker to copy from a USB drive plugged into the Pi. Keep one folder per artist or album; Navidrome reads the tags inside the files either way.

  4. Describe the server in a Compose file

    Back on the Pi, open a new file:

    nano ~/navidrome/compose.yaml

    Paste this in, then save with Ctrl+O, Enter, and close with Ctrl+X:

    services:
      navidrome:
        image: navidrome/navidrome:latest
        user: 1000:1000
        ports:
          - "4533:4533"
        restart: unless-stopped
        volumes:
          - ./data:/data
          - ../music:/music:ro

    1000:1000 is the first user on Raspberry Pi OS, the one you created. The music folder is mounted read-only, so Navidrome can never change your files.

  5. Start it
    cd ~/navidrome
    docker compose up -d

    The first start downloads Navidrome. restart: unless-stopped brings it back by itself whenever the Pi restarts.

  6. Create your Navidrome account

    In a browser on your computer, open http://audex-pi.local:4533 and create the first user; it becomes the admin. Navidrome then scans your music folder on its own, so albums appear within a few minutes.

  7. Give the Pi a fixed address

    Find the Pi's address with hostname -I, then reserve it in your router's settings (often called a DHCP reservation or static lease). That way the address you give Audex never changes.

3. Connect Audex

  1. Add the server

    In Audex, open Settings → Media servers → Add a server and choose Subsonic / OpenSubsonic / Navidrome. (Jellyfin, Emby and Kodi servers show up by themselves under On this network; Navidrome doesn't announce itself, so you add it by address.)

  2. Enter its address and your login

    Use the Pi's address and port, for example http://192.168.1.50:4533, with the Navidrome username and password you just created. Audex tests the connection before saving, so you'll know straight away that it works.

  3. Turn on Stream original quality

    In the same form (or later, on the server's page under Settings → Media servers), turn on Stream original quality. The Pi then sends your files as they are instead of converting them, which keeps it cool and quick. It uses more mobile data away from home, so leave it off if your data plan is small.

  4. Play something

    Pick the server from the source switcher at the top of the Library. Albums, Artists, Genres and Playlists appear just as Navidrome organises them, and anything can be downloaded for offline listening.

Optional: listen away from home

Your Pi is only reachable on your home network until you add a way in from outside. The simplest safe one is a private VPN such as Tailscale, which needs no changes to your router:

  1. Install Tailscale on the Pi and sign in
    curl -fsSL https://tailscale.com/install.sh | sh
    sudo tailscale up

    Open the link it prints to sign in, then install the Tailscale app on your phone with the same account.

    Get Tailscale
  2. Add it as the server's second address

    Edit the server in Audex and put the Pi's Tailscale address (it starts with 100., plus :4533) in Second address (optional). At home Audex uses your home address; when that can't be reached, it switches to the second one by itself.

Using HTTPS with a self-signed certificate? Audex shows the certificate's details and SHA-256 fingerprint the first time, so you can trust exactly that certificate. If it ever changes, Audex stops and asks before connecting again.

If something isn't working

Navidrome opens, but the library is empty
Navidrome can't read the music folder. Give your user ownership of it, then restart Navidrome:
sudo chown -R 1000:1000 ~/music ~/navidrome/data
cd ~/navidrome && docker compose restart
Audex can't connect to the server
Check that your phone is on the same Wi-Fi as the Pi, and that the address in Audex includes :4533. On the Pi, docker compose ps (inside ~/navidrome) should show Navidrome as running. If the Pi's address changed, reserve it in your router as in step 2.
How do I update Navidrome later?
On the Pi:
cd ~/navidrome
docker compose pull && docker compose up -d
Your account and settings live in ~/navidrome/data and are kept.
Can I use Jellyfin on the Pi instead?
Yes. Jellyfin runs well on a Pi 4 or 5 for music, and Audex connects to it the same way (port 8096), usually finding it under On this network by itself. For video, keep files in formats your devices can play directly, since a Pi can't convert video quickly. Navidrome is the lighter choice if you only need music.

Still stuck? Email audex@kymonic.com — a real person reads every message.