Dans mon cas j’ai tendance à oublier l’existence d’artistes et albums s’ils ne sont pas rangés où je les ai mis, je ne me dis jamais “tiens je vais écouter du Hendrix” mais plutôt je navigue par genre et style pour ensuite redécouvrir mes artistes préférés. Dans une époque qui me semble pas si lointaine, il y a 10 ans… je pouvais tout redécouvrir en naviguant dans ma bilbiothèque personnelle, typiquement dans iTunes je faisais « Genre > Artiste > Album » et chaque pochette, chaque métadonnée était rangée de la façon qui me plaisait. Pendant un temps j’ai utilisé la solution Google Music qui permettait d’héberger sa propre musique et de pouvoir lire sa musique depuis n’importe où, mais lorsque le service a été décommissionné j’ai finalement basculé sur Spotify.
Mais se reposer sur Spotify c’est, dans mon cas, me faire recommander les mêmes musiques. Et même s’il y a de bonnes découvertes parfois, c’est trop aléatoire, notamment dans les enchaînements recommandés après l’écoute d’un album. J’y ai perdu le côté intentionnel de choisir la musique que je souhaite écouter, et d’écouter les artistes ou albums que j’ai méticuleusement pris le temps d’inspecter, étudier, écouter, et apprécier.
Si comme moi vous possédez toujours une collection locale que vous n’utilisez pas pleinement, alors le self-hosting est la solution.
Bye bye les contraintes des services de streaming, les pistes aléatoires non désirées, et surtout les interfaces fouillies qui ne correspondent pas à un usage plus simple. Cette année j’ai repris le contrôle en stockant mes musiques sur mon NAS et la rendant disponible partout avec Navidrome.
L’idée de me lancer dans une solution en dehors des services de streaming me revenait régulièrement. Le problème est bien souvent le stockage, sa résilience, ses backups… J’ai testé AWS mais les coûts n’étaient pas intéressants sur mon volume et dépassaient ceux d’une solution de streaming. Je me suis donc tourné vers mon NAS, un Synology DS923+ configuré en SHR avec backup Cloud Sync vers GCP, et cela réduit drastiquement la facture, car le NAS sert également à d’autres usages (stockage, diffusion vidéo, backups, domotique Home Assistant,…).
Alors pourquoi auto-héberger sa bibliothèque musicale ?
Navidrome est un serveur de musique « Subsonic » moderne, léger et open-source. C’est le cerveau de votre opération, votre bibliothèque de musique et ses metadonnées en sont le coeur.
Pourquoi Navidrome plutôt qu’une autre solution (Plex, Audio Station, Music Assistant) ?
Il répond à mon cahier des charges puisqu’il est léger, simple, et repose sur les metadonnées. Point important pour moi qui souhaite retrouver une navigation par Genre avec ma propre taxonomie !
J’utilise Docker via l’application « Container Manager » de Synology pour une installation propre et portable. Le guide suivant peut être utilisé pour une installation Docker classique, il suffit d’ignorer alors les spécificités liées à Synology.
Prérequis :
/volume1/music).1. Structure de dossiers sur le NAS :
Créer un dossier dédié pour Navidrome, par exemple : /volume1/docker/navidrome. À l’intérieur créer un sous-dossier data pour la base de données de Navidrome.
2. Le fichier docker-compose.yaml pour Navidrome :
Créer un fichier docker-compose.yaml dans /volume1/docker/navidrome avec le contenu suivant :
version:"3"
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
restart: unless-stopped
user: 1026:100 # Remplacez 1026:100 par votre PUID:PGID. Pour trouver votre PUID/PGID, connectez-vous en SSH au NAS et tapez 'id votre_nom_utilisateur'.
volumes:
- /volume1/music:/music:ro # Chemin vers votre musique (lecture seule)
- ./data:/data # Base de données, configurations, caches de Navidrome
ports:
-"4533:4533" # Port d'accès à l'interface web de Navidrome (localement)
environment:
ND_DEFAULTLANGUAGE: "fr"
ND_SCANSCHEDULE: "0 * * * *" # Scan toutes les heures pour les nouveaux fichiers
ND_LOGLEVEL: warn
ND_SESSIONTIMEOUT: 2h # délai au delà duquel la session sera fermée
ND_COVERJPEGQUALITY: 90 # niveau de qualité pour les jpg dont la taille est convertie
ND_ENABLECOVERANIMATION: false # animation tournante lorsq'une piste est jouée
ND_LASTFM_ENABLED: false # disable Last.fm
ND_ENABLEDOWNLOADS: false # on ne peut pas télécharger d'albums à partir de Navidrome
ND_SCANNER_GROUPALBUMRELEASES: true # Pour regrouper les compilations (type B.O. de film) dont les titres ont des années de sortie différentes
Lancer Navidrome : dans un terminal se déplacer dans /volume1/docker/navidrome et exécuter docker-compose up -d
Vous devriez pouvoir accéder à Navidrome localement via http://IP_DE_VOTRE_NAS:4533.
Mon NAS n’est pas du tout exposé sur internet. Par contre les applications qu’il héberge comme Home Assistant ou désormais Navidrome oui, et cela grâce à un tunnel SSH vers mon serveur OVH qui lui possède une IP fixe et gère les connexions entrantes, la configuration nginx, les certificats SSL, etc.
1. Création d’un utilisateur dédié sur le serveur distant :
Sur votre serveur distant créez un utilisateur SSH mon_navidrome sans mot de passe, dédié au tunnel :
sudo adduser --disabled-password --gecos"" mon_navidrome
sudo su - mon_navidrome
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keysexit
2. Génération d’une clé SSH :
Sur le NAS via un terminal générez une nouvelle clé SSH sans passphrase :
ssh-keygen -t ed25519 -f /volume1/docker/navidrome/id_rsa_navidrome -C "navidrome_tunnel"
3. Installation de la clé publique sur le serveur distant :
Copiez le contenu du fichier /volume1/docker/navidrome/id_rsa_navidrome.pub et collez-le dans le fichier /home/mon_navidrome/.ssh/authorized_keys sur votre serveur distant.
4. Configuration du fichier docker-compose.yaml (ajout d’AutoSSH) :
Mettre à jour votre docker-compose.yaml (celui qui contient déjà Navidrome) avec le service autossh-tunnel :
version:"3"
services:
navidrome:# ... (Votre configuration Navidrome existante) ...
autossh-tunnel:
image: alpine:latest
container_name: navidrome_tunnel
command: > # installe et lance autossh
sh -c "ls -l /id_rsa && apk add --no-cache autossh &&
autossh -M 0 -N \\
-o 'StrictHostKeyChecking=no' \\
-o 'ServerAliveInterval=30' \\
-o 'ServerAliveCountMax=3' \\
-o 'ExitOnForwardFailure=yes' \\
-i /id_rsa \\
-R 0.0.0.0:55500:navidrome:4533 \\
mon_navidrome@votre-domaine.com"
restart: always
depends_on:
- navidrome
Ce container “navidrome_tunnel” va créer un tunnel SSH permettant de lier le port du container voisin 4533 de Navidrome au port 55500 au sein de votre serveur distant.
Depuis /volume1/docker/navidrome, exécutez : docker-compose up -d --force-recreate
5. Configuration Nginx sur le serveur distant :
Sur votre serveur configurez Nginx pour exposer votre tunnel (ici sur le port 55500) :
server {
listen 80;
listen 443 ssl;
server_name musique.votre-domaine.com; # Votre domaine
# ... (Vos configurations SSL Let's Encrypt habituelles) ...
location / {
proxy_pass <http://127.0.0.1:55500>; # Le port sur lequel le tunnel écoute localement sur le serveur
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_http_version 1.1;
proxy_set_header Upgrade$http_upgrade;
proxy_set_header Connection"upgrade";
}
}
http://IP_DE_VOTRE_NAS:4533 (ou votre URL publique)./volume1/music que vous lui avez monté. Pour un scan complet, aller dans le menu utilisateur (en haut à droite) > Advanced > Full Scan.Problème de permissions sur Synology : si Navidrome ne voit pas vos nouveaux fichiers connectez-vous en SSH au NAS pour régler les bonnes permissions d’accès :
sudo chown -R votre_utilisateur_nas:users /volume1/music
sudo chmod -R 775 /volume1/music
Puis dans DSM > File Station > Clic droit sur votre dossier music > Propriétés > Permissions > cochez « Appliquer à ce dossier, ses sous-dossiers et ses fichiers » pour que les droits s’héritent automatiquement.
Navidrome ne fait que lire les fichiers et les rendre disponible en streaming aux clients/applications compatibles. Le coeur du système de streaming reste votre bibliothèque et ses metadonnées doivent donc être impeccables.
Pour cela Picard est votre meilleur ami: il permet de scanner l’empreinte audio de vos fichiers pour les identifier et les tagger avec les métadonnées officielles de MusicBrainz, y compris les pochettes.
Dans mon cas ma bibliothèque était presque propre mais je voulais corriger de nombreux albums mal tagués, tout en conservant la main sur le metatag « genre » sur lequel j’aime bien apposer ma propre taxonomie pour classifier la musique. Pour cela il faut configurer Picard pour éviter d’écraser les données sensibles ou gérer correctement les compilations :
genre pour que Picard ne touche pas aux genres personnaliséscover.jpg/volume1/music)Artiste/Album/Piste - Titre avec gestion des compilations : $if($eq(%compilation%,1),Various Artists,%albumartist%)/%album%/%02d - %title%Cluster) : cliquer sur « Cluster » pour que Picard regroupe vos fichiers par dossier pour ne pas éparpiller vos albumsLookup) : sélectionnez un cluster (un album) et cliquer sur « Lookup ». Picard va chercher l’album correspondant
Scan) : pour les fichiers qui restent dans « Unclustered Files » à gauche (non groupés) ou pour compléter les albums rouges, sélectionnez-les et cliquez sur « Scan ». Picard les identifiera par leur empreinte audioSave) : clic-droit sur l’album à droite > « Enregistrer ». Picard va tagger, renommer et déplacer vos fichiersGestion des « Various Artists » et Compilations :
Album Artist est bien « Various Artists » et que le tag Compilation est 1 pour les compilations. Le script de nommage de Picard se chargera du resteCréer une compilation personnelle type « Best Of » :
$set(albumartist,Nom Artiste) $set(originalalbum,%album%) $set(album,Nom Artiste- My BestOf) $set(compilation,1) $set(originaldate,%date%) $set(date,2024)Navidrome ouvre les portes de tout un ensemble de clients Subsonic. Voici une sélection de mes préférés :
Symfonium est une application Android Open-Source, possédant de vraies fonctionnalités avancées et une interopérabilité avec de nombreux systèmes de providers (Plex, Jellyfin, Navidrome, etc.) et de diffusion (Android Auto, Chromecast, DLNA, etc.).


Paramètres > Gérer les fournisseurs de média > 3 points sur Navidrome > Synchroniser maintenant.J’utilise Symfonium sur mon téléphone Android et sur Android TV.
Amperfy est une application native pour l’écosystème iOS/iPadOS/macOS, son écriture native et sa ressemblance avec iTunes en font un outil simple mais efficace.

J’utilise Amperfy uniquement sur mon iPad.
Feishin est un projet Open-Source qui est en fait une réécriture d’un projet plus ancien et populaire (Sonixd). Son interface et ses fonctionnalités sont modernes.

J’utilise Feishin en version web sur mon laptop du boulot et sa version desktop sur mon iMac.
Astuce NAT Loopback : utilisez votre URL publique (ex: https://musique.votre-domaine.com) pour vous connecter à Navidrome depuis vos applications amenées à être en déplacement (PC Portable, téléphone mobile, tablette) mais ce n’est pas utile pour l’application Android TV par exemple où vous pouvez utiliser l’adresse IP de votre réseau interne.