Présentation et mise en place de navidrome une alternative auto-hébergé à Spotify

Présentation et mise en place de navidrome une alternative auto-hébergé à Spotify

Dans cet article, nous allons découvrir ensemble une alternative à Spotify nommée Navidrome. Depuis des années, et de plus en plus ces derniers temps, Spotify, Apple Music, Deezer et bien d'autres nous font payer des prix injustifiés pour écouter notre musique. C'est pourquoi, aujourd'hui, je vous propose de mettre en place facilement Navidrome chez vous.

Navidrome est un serveur de streaming musical open source et auto-hébergé qui vous permet d'accéder à votre collection musicale depuis n'importe quel navigateur web ou appareil mobile. En quelques clics, vous pouvez installer Navidrome sur votre ordinateur ou sur un Raspberry Pi, Orange Pi et profiter de vos morceaux préférés sans limite. De plus, Navidrome est compatible avec tous les clients Subsonic (Pour Android), et Flo - Navidrome Client (Pour iOS) vous permettant d'accéder à votre musique depuis un large choix d’applications tierces, que ce soit pour iOS, Android, ou votre ordinateur.

L'un des avantages majeurs de Navidrome est qu'il vous permet de profiter de votre collection de CD de musique en la numérisant et en la rendant accessible partout. Vous pouvez ainsi écouter vos albums préférés où que vous soyez, sans dépendre d'un service de streaming payant.

Mise en place de navidrome

Pour mettre en place Navidrome, nous allons utiliser Docker sur debian, car c'est bien plus rapide et simple. Toutefois, vous pouvez installer Navidrome différemment. Je vous invite à consulter la documentation officielle de Navidrome pour plus d'informations.

Nous allons donc partir d'une distribution Debian 12, que vous pouvez installer sur une machine chez vous, sur une machine virtuelle (VM) si vous disposez d'une Freebox, ou même sur un Raspberry Pi ou un Orange Pi.

Si vous ne disposez pas de Docker et Docker Compose, exécutez cette commande afin de les installer :

apt install docker.io docker-compose -y

Pour organiser notre Navidrome, nous allons créer un dossier dans /etc. Pour cela, exécutez la commande suivante :

mkdir /etc/navidrome

Vous pouvez aller dans le dossier Navidrome. Pour cela, exécutez la commande suivante :

cd /etc/navidrome

Vous avez donc besoin de crée les dossiers :

mkdir data ; mkdir music ; mkdir haproxy ; cd haproxy ; mkdir certs

Mise en place de navidrome sans haproxy

Si vous avez choisi le Docker Compose avec HAProxy, cela signifie que vous souhaitez accéder à Navidrome en HTTPS. C’est un excellent choix ! En revanche, si vous optez pour la version sans HAProxy, c’est soit parce que vous gérez le HTTPS autrement, soit parce que vous ne l’utilisez pas. Dans ce cas, soyez prudent : en HTTP, le trafic n’est pas chiffré. Cela signifie que vos identifiants (login/mot de passe) peuvent être facilement interceptés par une personne malveillante.

Pour mettre en place Navidrome sans HAProxy, je vous invite à utiliser le fichier docker-compose.yml

Une fois le docker-compose.yml mis dans /etc/navidrome

Attention : le fichier doit s’appeler docker-compose.yml. Si ce n’est pas le cas, vous pouvez le renommer avec la commande :

mv ancien_nom docker-compose.yml

Pour démarrer Navidrome, exécutez simplement :

docker-compose up -d

Une fois cela fait, c’est très rapide : il vous suffit de vous connecter à l’adresse IP de votre serveur Docker, sur le port 4533. Par exemple : http://192.168.1.20:4533

Mise en place de navidrome avec haproxy

Vous avez choisi d’installer Navidrome avec HAProxy, ce qui est un excellent choix. Avant de passer à la configuration, voici quelques points importants à connaître :

HAProxy est particulièrement adapté pour une utilisation de Navidrome en accès externe. Cela signifie que vous (et éventuellement d’autres utilisateurs) pourrez y accéder depuis l’extérieur de votre réseau local.

Nous vous recommandons d’utiliser HAProxy plutôt que Nginx ou d’autres solutions, car il permet de gérer facilement le chiffrement (TLS/SSL) et de configurer des ACL (Access Control Lists) pour router les requêtes par nom de domaine. Exemple : navidrome.masupermaison.fr

Cela offre une meilleure sécurité et une gestion plus fine du trafic.

Pour mettre en place Navidrome sans HAProxy, je vous invite à utiliser le fichier docker-compose.yml

Une fois le docker-compose.yml mis dans /etc/navidrome

Attention : le fichier doit s’appeler docker-compose.yml. Si ce n’est pas le cas, vous pouvez le renommer avec la commande :

mv ancien_nom docker-compose.yml

Maintenant que Navidrome est installé en Docker, passons à la configuration de HAProxy. Nous allons aborder deux scénarios différents, à choisir selon vos besoins et votre niveau d’expérience :

Cas 1 : Accès sécurisé en local (HTTPS) sans nom de domaine

Idéal si :

  • Vous souhaitez utiliser Navidrome en HTTPS uniquement dans votre réseau local,
  • Vous envisagez peut-être une ouverture vers l’extérieur plus tard,
  • Vous n’avez pas encore de nom de domaine.

Dans ce cas, nous configurerons HAProxy pour chiffrer le trafic en local, sans dépendre d’un domaine.

Cas 2 : Accès externe complet avec un nom de domaine

Idéal si :

  • Vous possédez déjà un nom de domaine (ex: navidrome.mondomaine.fr),
  • Vous voulez une alternative à Spotify accessible depuis n’importe où,
  • Vous maîtrisez les bases de la redirection de ports et des certificats SSL.

Nous configurerons HAProxy pour gérer le chiffrement, les ACL et l’accès sécurisé via votre domaine.

Cas 1 : Configuration HTTPS locale (sans domaine)

Objectif : Chiffrer la connexion entre vos appareils et Navidrome, même en local.

Étapes :

  1. Générer un certificat SSL auto-signé (pour le HTTPS local) :
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
  -keyout /etc/navidrome/haproxy/certs/navidrome-selfsigned.key \
  -out /etc/navidrome/haproxy/certs/navidrome-selfsigned.crt
  1. Fusionner le certificat et la clé :
cat /etc/navidrome/haproxy/certs/navidrome-selfsigned.crt /etc/navidrome/haproxy/certs/navidrome-selfsigned.key > /etc/navidrome/haproxy/certs/navidrome-selfsigned.pem
  1. Ajouter le haproxy.cfg dans /etc/navidrome/haproxy :
global
    log stdout format raw local0
    maxconn 4000
    tune.ssl.default-dh-param 2048

defaults
    log global
    mode http
    option httplog
    timeout connect 5000
    timeout client 50000
    timeout server 50000

# Redirection HTTP → HTTPS
frontend navidrome_http
    bind *:80
    redirect scheme https code 301 if !{ ssl_fc }

# Frontend HTTPS pour Navidrome
frontend navidrome_https
    bind *:443 ssl crt /usr/local/etc/haproxy/certs/navidrome-selfsigned.pem
    default_backend navidrome

# Backend vers Navidrome
backend navidrome
    server navidrome navidrome:4533 check

Pour démarrer Navidrome, exécutez simplement :

docker-compose up -d

Une fois cela fait, c’est très rapide : il vous suffit de vous connecter à l’adresse IP de votre serveur Docker. Par exemple : https://192.168.1.20 ou http://192.168.1.20

Cas 2 : Configuration avec nom de domaine (accès externe)

Objectif : Rendre Navidrome accessible depuis Internet, avec un certificat Let’s Encrypt valide.

Prérequis :

  • Un nom de domaine pointant vers votre IP publique,
  • Les ports 80 et 443 redirigés vers votre serveur HAProxy.

Étapes :

Veuillez placer votre certificat au format pem dans le répertoire /etc/navidrome/haproxy/certs

Si vous n’avez pas encore de certificat pour votre domaine, je vous invite à créer un compte sur Cloudflare, qui propose une solution gratuite pour sécuriser votre domaine et obtenir un certificat SSL.

global
    log stdout format raw local0
    maxconn 4000
    tune.ssl.default-dh-param 2048

defaults
    log global
    mode http
    option httplog
    timeout connect 5000
    timeout client 50000
    timeout server 50000

# Redirection HTTP → HTTPS
frontend navidrome_http
    bind *:80
    redirect scheme https code 301 if !{ ssl_fc }

# Frontend HTTPS avec ACL par nom de domaine
frontend navidrome_https
    bind *:443 ssl crt /usr/local/etc/haproxy/certs/Votre_Certificat.pem

    acl host_navidrome hdr(host) -i navidrome.mondomaine.fr
    use_backend navidrome if host_navidrome

    default_backend default_backend_404

# Backend vers Navidrome
backend navidrome
    server navidrome navidrome:4533 check

# Backend par défaut si pas domaine -> Vide
backend default_backend_404
    errorfile 503 /usr/local/etc/haproxy/errors/503.http

N'oubliez pas d'adapter navidrome.mondomaine.fr en fonction du nom de domaine que vous avez configuré en DNS (type A) vers l'IP publique de votre box.

Assurez vous que les ports 80 (HTTP) et 443 (HTTPS) sont bien ouverts et redirigés depuis votre box vers l’IP locale de votre serveur, sans quoi l’accès depuis l’extérieur ne sera pas possible.

Pour démarrer Navidrome, exécutez simplement :

docker-compose up -d

Une fois cela fait, c’est très rapide : il vous suffit de vous connecter à l’adresse domaine de votre serveur. Par exemple : https://navidrome.mondomaine.fr

Astuce pour Navidrome : sécuriser l'accès à votre dossier de musique

Vous avez maintenant installé et testé Navidrome. Voici une astuce pour transférer votre musique de manière sécurisée vers le serveur :

1. Créer un utilisateur dédié

adduser navidrome

2. Choisir le mot de passe du compte

passwd navidrome

3. Donner les droits au nouvel utilisateur

chown -R navidrome:navidrome /etc/navidrome/music
  1. Modifier le home directory de l’utilisateur navidrome
usermod -d /etc/navidrome/music navidrome

5. Autoriser la connexion SSH

Assurez-vous que l’utilisateur navidrome peut se connecter via SSH :

  • Par défaut, tout nouvel utilisateur peut se connecter si /etc/ssh/sshd_config n’a pas de restrictions particulières.
  • Pour vérifier :
cat /etc/ssh/sshd_config | grep -i "AllowUsers"

Si cette ligne existe, ajoutez navidrome dedans.

Ensuite, redémarrez SSH :

systemctl restart sshd

7. Connexion avec WinSCP

  1. Ouvrez WinSCP.
  2. Cliquez sur "Nouvelle session" :
    • Protocole : SFTP
    • Hôte : IP Local de votre Serveur
    • Port : 22
    • Utilisateur : navidrome
    • Mot de passe : (celui que vous avez défini)
  3. Cliquez sur Connexion.
  4. Une fois connecté, naviguez jusqu’à :
    /etc/navidrome/music

Vous pouvez placer vos fichiers musicaux au format MP3 dans le dossier WinScp de base qui est (/etc/navidrome/music). Navidrome les détectera automatiquement et les ajoutera à votre bibliothèque.


Pour nous aider à nous améliorer, n'hésitez pas à faire part de vos avis en commentaires ou même à poser vos questions si vous avez besoin d'aide supplémentaire.

Vous pouvez également partager cet article et nous suivre sur Twitter/X :

x.com

ainsi que sur Instagram :

Makeinlab (@ma.in.lab) • Instagram photos and videos
20 Followers, 5 Following, 79 Posts - See Instagram photos and videos from Makeinlab (@ma.in.lab)