Navidrome

Navidrome is a streaming server that let's you stream your own music to your devices. It's pretty solid and compatible with OpenSubsonic API. You can browse and listen to your collection on the WEB GUI or with your favorite client app.

Installation

Navidrome is provided via docker and natively support rootless configuration. As usual, you need to create a dedicated user for the service:

useradd -d /data/daemons/navidrome -m -g media navidrome

Then put the following docker-compose.yml to /data/daemons/navidrome:

docker-compose.yml
version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1046:1014 # 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:
      - "/data/daemons/navidrome/data:/data"
      - "/data/Music/folder:/music:ro"

You need to adapt UID/GID, paths to music collection and port. Also, check the BASEURL.

Reverse Proxy

The following NGINX configuration will proxy your navidrome to https://mydomain.com/navidrome. For more details see The Reverse Proxy concept.

navidrome.conf
location ^~ /navidrome {
        proxy_pass http://127.0.0.1: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_set_header Remote-User $remote_user;
        proxy_buffering off;

        location /navidrome/rest {
                auth_pam off;
        proxy_pass http://127.0.0.1:4533/navidrome/rest;
        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_set_header Remote-User $remote_user;
        proxy_buffering off;

        }

}

Autostart

If you are following my Custom User Services, create the following links:

ln -s _servicer.sh 32-navidrome--podman.start
ln -s _servicer.sh 32-navidrome--podman.stop