====== Navidrome ======
[[https://www.navidrome.org/|Navidrome]] is a streaming server that let's you stream your own music to your devices. It's pretty solid and compatible with [[https://github.com/opensubsonic|OpenSubsonic]] API. You can browse and listen to your collection on the WEB GUI or with your favorite client app.
This will be integrated with SSO using Authelia.
===== 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**:
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: ""
ND_REVERSEPROXYWHITELIST: 10.89.0.0/24
volumes:
- "/data/daemons/navidrome/data:/data"
- "/data/Music/folder:/music:ro"
You need to adapt UID/GID, paths to music collection and port.
ND_REVERSEPROXYWHITELIST must list the subnet associated to your NGINX reverse proxy as seen from the Navidrome container. The provided IP range should be enough for a default Podman installation.
===== Reverse Proxy =====
I choose to install Navidrome on it's own subdomain **https://navidrome.mydomain.com** to make it easier for Subsonic integration. For more details see [[selfhost:nginx|The Reverse Proxy concept]].
This example also include the Authelia integration.
server {
server_name navidrome.mydomain.com;
listen 443 ssl;
listen 8443 ssl;
http2 on;
access_log /var/log/nginx/navidrome.mydomain.com_access_log main;
error_log /var/log/nginx/navidrome.mydomain.com_error_log info;
include "com.mydomain/authelia_location.conf";
location ^~ / {
include "com.mydomain/authelia_proxy.conf";
include "com.mydomain/authelia_authrequest.conf";
proxy_pass http://127.0.0.1:4533;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header Remote-User $remote_user;
proxy_buffering off;
}
location /rest {
proxy_pass http://127.0.0.1:4533/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;
}
client_max_body_size 100M;
}
This will automatically login your users using the SSO provided by [[services:authelia|Authelia]].
Please note that the **/rest** location is __not__ protected by Authelia, as this would __not__ work with Subsonic apps. Authentication, in this case, is performed by Navidrome itself: users will need to setup a password within Navidrome! (this might be fixed using Authelia basic auth, but i have not tried.)
===== Autostart =====
To start it, and set it up on boot, as usual follow my indications [[gentoo:containers|Using Containers on Gentoo]], so link the **user-containers** init script:
ln -s /etc/init.d/user-containers /etc/init.d/user-containers.navidrome
and create the following config file:
USER=navidrome
DESCRIPTION="The music server"
Add the service to the default runlevel and start it now:
rc-update add user-containers.navidrome default
rc-service user-containers.navidrome start
===== External Integrations =====
See [[https://www.navidrome.org/docs/usage/external-integrations/|here]].
==== LastFM ====
Navidrome can use Last.fm to retrieve artists biographies, top songs, similar artists and album covers. It can also send your scrobbles to Last.fm. For these features to work, you’ll need to set the following ENVs in your docker compose:
ND_LASTFM_ENABLED: true
ND_LASTFM_APIKEY: << your api key >>
ND_LASTFM_SECRET: << your secret >>
ND_LASTFM_LANGUAGE: << language code >>
to fill the key&secret, go to [[https://www.last.fm/api/account/create|this page]] and fill in the data.
==== Spotify ====
Artist images can be retrieved from Spotify. You’ll need to set the config options:
ND_SPOTIFY_ID: << your id >>
ND_SPOTIFY_SECRET: << your secret >>
[[https://developer.spotify.com/dashboard|this URL]] use **https://navidrome.mydomain.com** as URL (https is mandatory since april 2025)