Freemallard's blog

Make your own music streaming service

2 minute read Published: 2024-08-09

Quit subcriptions and stream your own digital music with Navidrome!

Why?

Because subscriptions/services are costly, you end up wasting money and are left with nothing once the service is gone. Plus you probably don't care for the bloated, proprietary apps they require.

My personal use case, which this guide covers, is to stream music on my android phone when I'm away from home.

The setup

Considering you already have a homelab of some sort, the setup is really easy, you only need:

Server

I personally chose to run Navidrome with Docker using docker-compose.

Docker-compose

docker-compose.yaml

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    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: "/navidrome"
    volumes:
      - "/path/to/data:/data"
      - "/path/to/your/music/folder:/music:ro"

Then start the container:

docker-compose up -d

Nginx

With my personal setup I then port-forward navidrome with Nginx:

		location ^~ /navidrome {
			# replace local-address with your navidrome server's IP
			proxy_pass http://localhost:4533/navidrome;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_set_header X-Forwarded-Protocol $scheme;
			proxy_set_header X-Forwarded-Host $http_host;
			proxy_buffering off;
		}

Don't forget to restart Nginx after adding the new configuration:

systemctl restart nginx

You actually need to connect to the Webgui then to create an admin account for navidrome. This will be useful for connecting to the server from your client. Connect to https://yourdomain/navidrome and setup your account.

Client

DSub

My client of choice on Android is Dsub, it's abailable on the playstore or F-droid: https://f-droid.org/packages/github.daneren2005.dsub/

Open you app, go to settings > servers. Add your server https://yourdomain/navidrome and enter your admin credentials. Finally rescan your music from the app, you should then see your music library popup. You're ready to go!

edit: I really like the Ultrasonic app for android aswell.