User Tools

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
services:navidrome [2024/04/16 12:20] willyservices:navidrome [2025/04/16 09:58] (current) willy
Line 1: Line 1:
 ====== Navidrome ====== ====== 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.
  
-<code bash> +This will be integrated with SSO using Authelia.
-useradd -d /data/daemons/navidrome -m -g media navidrome+
  
 +===== Installation =====
  
 +Navidrome is provided via docker and natively support rootless configuration. As usual, you need to create a dedicated user for the service:
 +
 +<code bash>
 +useradd -d /data/daemons/navidrome -m -g media navidrome
 </code> </code>
  
-docker-compose.yml:+Then put the following **docker-compose.yml** to **/data/daemons/navidrome**:
 <file - docker-compose.yml> <file - docker-compose.yml>
 version: "3" version: "3"
Line 24: Line 29:
       ND_SESSIONTIMEOUT: 24h       ND_SESSIONTIMEOUT: 24h
       ND_BASEURL: ""       ND_BASEURL: ""
 +      ND_REVERSEPROXYWHITELIST: 10.89.0.0/24
     volumes:     volumes:
       - "/data/daemons/navidrome/data:/data"       - "/data/daemons/navidrome/data:/data"
       - "/data/Music/folder:/music:ro"       - "/data/Music/folder:/music:ro"
 </file> </file>
 +
 +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.
  
 <file - navidrome.conf> <file - navidrome.conf>
-location ^~ /navidrome +server 
-        proxy_pass http://127.0.0.1:4533/navidrome; +        server_name navidrome.mydomain.com
-        proxy_set_header Host $host; +        listen 443 ssl
-        proxy_set_header X-Real-IP $remote_addr; +        listen 8443 ssl
-        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +        http2 on;
-        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;+
  
 +        access_log /var/log/nginx/navidrome.mydomain.com_access_log main;
 +        error_log /var/log/nginx/navidrome.mydomain.com_error_log info;
  
-        location /navidrome/rest { +        include "com.mydomain/authelia_location.conf";
-                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;+
  
 +        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;
 } }
 </file> </file>
 +
 +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:
 +<code>
 +ln -s /etc/init.d/user-containers /etc/init.d/user-containers.navidrome
 +</code>
 +
 +and create the following config file:
 +<file - /etc/conf.d/user-containers.navidrome>
 +USER=navidrome
 +DESCRIPTION="The music server"
 +</file>
 +
 +Add the service to the default runlevel and start it now:
 +<code bash>
 +rc-update add user-containers.navidrome default
 +rc-service user-containers.navidrome start
 +</code>
 +
 +===== 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:
 +<file>
 +      ND_LASTFM_ENABLED: true   
 +      ND_LASTFM_APIKEY: << your api key >>
 +      ND_LASTFM_SECRET: << your secret >>
 +      ND_LASTFM_LANGUAGE: << language code >>
 +</file>
 +
 +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:
 +<file>
 +      ND_SPOTIFY_ID: << your id >>
 +      ND_SPOTIFY_SECRET: << your secret >>
 +</file>
 +
 +[[https://developer.spotify.com/dashboard|this URL]] use **https://navidrome.mydomain.com** as URL (https is mandatory since april 2025)
 +
 +
 +
 +
  

This website uses technical cookies only. No information is shared with anybody or used in any way but provide the website in your browser.

More information