Navidrome mit nginx als reverse proxy mit Basic authentification

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Multimedia und Spiele ‹ Navidrome mit nginx als reverse proxy mit Basic authentification


Navidrome mit nginx als reverse proxy mit Basic authentification

Navidrome ist eine Serverapplication, mit der Sammlungen von Musik dargestellt und abgespielt werden können, sowohl lokal wie auch remote. Unter Debian gibt es die Möglichkeit, navidrome mit Docker oder als Binary zu installieren. Es gibt zahlreiche Apps für die üblichen Mobilgerät-OS, aber auch Desktop-Anwendungen. Navidrome bringt ein Webinterface mit, so dass die Musik auch über einen Webbrowser abgespielt werden kann.

Eine ausführliche Erläuterung der umfangreichen Konfigurationsmöglichkeiten gibt es auf der Webseite des Projektes.

Mit der Veröffentlichung der neuen Version 0.63.2 sind allerdings die Konfigurationshinweise verschwunden, wie ein nginx als Webserver die Authentifizierung übernimmt und die User zu navidrome weiterreicht. Das ist dann sinnvoll, wenn es ohnehin eine Webseite mit Authentification gibt.


Installation

root@debian:~# apt install nginx

Für navidrome habe ich kein repository gefunden. Es ist als binary von Github herunterladbar. apt install -f lädt eventuell erforderliche Abhängigkeiten nach.

root@debian:~#  dpkg -i /Pfad/zum/navidrome_0.63.2_linux_amd64.deb && apt install -f


Konfiguration

Hier beispielhaft die Konfiguration für ein navidrome ohne Docker hinter nginx als reverse proxy. Beide Dateien enthalten Parameter, die für die Funktion, um die es geht, nichts zur Sache tun. Die relevanten Teile habe ich markiert.

/etc/navidrome/navidrome.toml

# Navidrome configuration
# https://www.navidrome.org/docs/usage/configuration-options/
#
# Navidrome behind Reverse Proxy
# (here: Nginx w/ Basic Auth)

### Network
# IP Navidrome listens to
# 127.0.0.1 = only locally (behind Reverse Proxy)
Address = "127.0.0.1"

# Standard port 4533
Port = "4533"

# Base URL
BaseURL = "/music"

### Library
# dir with music, readable for Navidrome user
MusicFolder = "/absoluter/Pfad/zur/Musiksammlung"

# Navidrome data base, cache etc
DataFolder = "/var/lib/navidrome"

### Logging
# Logging Level; trace | debug | info | warn | error
LogLevel = "info"
# Logformat; text = readable; json = for machines
LogFormat = "text"

# Scan intervall
# Format: Go duration (z.B. 1h, 24h)
ScanSchedule = "@every 24h"

# Scan at startup
ScanOnStartup = false

# Transcoding
# Aktivates Transcoding if clients don't support format
EnableTranscodingConfig = true

# Cover Art
# Size cover images
CoverArtQuality = 35

# Session
# Session Timeout
SessionTimeout = "8760h"

# UI Settings
#DefaultTheme = "Dark"

# LastFM / External APIs (optional)
# LastFM API Key (optional)
#LastFM.Enabled = false

AutoImportPlaylists = "false"
#DefaultPlaylistPublicVisibility = "false"

# Reverse proxy settings
# Security
# Disable password editing in Navidrome, prevents users
# from changing passwords, as they are set by auth service
EnableUserEditing = false
EnableSharing = false
EnableExternalAuth = true
ExtAuth.TrustedSources = "127.0.0.1/32"
ExtAuth.UserHeader = "Remote-User"

/etc/nginx/sites-available/DOMAIN.TLD.conf

server {
    listen 80;
    listen [::]:80;
    server_name DOMAIN.TLD;

    # ACME-challenge for Let's Encrypt
    location ~ /.well-known/acme-challenge/ {
        root /var/www/dehydrated;
    }

    location / {
    return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name DOMAIN.TLD;

    root /var/www/DOMAIN.TLD;

    ### SSL Settings
    ssl_certificate         /var/www/dehydrated/certs/DOMAIN.TLD/fullchain.pem;
    ssl_certificate_key     /var/www/dehydrated/certs/DOMAIN.TLD/privkey.pem;
    ssl_trusted_certificate /var/www/dehydrated/certs/DOMAIN.TLD/chain.pem;

    # Disable content sniffing
    add_header X-Content-Type-Options nosniff;

    # Disallow embedding of content from any other domain / avoid Clickjacking
    add_header X-Frame-Options SAMEORIGIN always;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    location /music/ {
        root /var/www/DOMAIN.TLD;
        include /etc/nginx/auth_read.conf;
        proxy_pass http://127.0.0.1:4533;
        proxy_http_version 1.1;
		proxy_set_header Authorization "";
        proxy_set_header Host $host;
        proxy_set_header Remote-User $remote_user;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-User $remote_user;
        proxy_buffering off;
    }

Starte navidrome mit service navidrome start, überprüfe die nginx Konfiguration mit nginx -t, und sollten keine Fehler angezeigt werden, starte auch nginx: service nginx start. Unter https://DOMAIN.TLD/music sollte nach Anmeldung nun deine Musik bereistehen.