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 :
- 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
- 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
- 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
et443
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
- 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
- Ouvrez WinSCP.
- 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)
- Cliquez sur Connexion.
- 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 :
ainsi que sur Instagram :
