Skip to content

Navidrome Docker : ton Spotify auto-hébergé en 5 min

Brandon Visca
Published date:

💡 TL;DR

  • Navidrome est un serveur de musique auto-hébergé, open-source et ultra-léger qui lit MP3, FLAC, OGG et AAC
  • Tu le déploies en 5 minutes avec Docker Compose, interface web moderne et apps mobiles compatibles (Subsonic API)
  • Alternative open-source à Spotify, Plexamp et Jellyfin pour la musique uniquement, sans abonnement ni tracking
  • Docker Compose complet, tableau comparatif et astuces de config inclus ci-dessous

Pourquoi un serveur de musique auto-hébergé ?

T’as des Go de MP3 et FLAC accumulés depuis des années. Des albums achetés sur Bandcamp, des rips de tes vieux CDs, des mixes SoundCloud téléchargés légalement, et des fichiers lossless que tu refuses de compresser parce que “on entend la différence sur un bon casque”. Le tout éparpillé sur ton NAS, ton laptop, ton téléphone et trois applications différentes qui ne se parlent pas.

Spotify ? C’est pratique, mais tu paies 11€/mois pour streamer ta propre musique quand tu es hors ligne, et l’interface est de plus en plus encombrée de podcasts, d’audiobooks et de suggestions algorithmiques que tu n’as pas demandées. Apple Music c’est pareil, avec en prime l’écosystème fermé. Quant à YouTube Music, c’est l’expérience publicitaire maximale si tu ne paies pas.

Tu veux une solution qui :

Navidrome est la réponse. Développé en Go par un passionné de musique, c’est un serveur audio ultra-léger, rapide, et conçu spécifiquement pour les collections musicales. Si tu cherches à compléter ton homelab média à côté de ton serveur Jellyfin pour films et séries ou ton lecteur Kavita pour ebooks, Navidrome est le chaînon manquant pour la musique.

Qu’est-ce que Navidrome exactement ?

Navidrome n’est pas un simple indexeur de fichiers MP3. C’est un serveur de streaming musical complet avec une interface web moderne, pensée pour la consommation de musique en continu.

Voici ce qu’il propose concrètement :

Le projet est open-source sous licence GPL-3.0, maintenu activement sur le repo navidrome/navidrome avec plus de 12 000 stars sur GitHub. L’image Docker officielle deluan/navidrome est publiée sur Docker Hub avec support amd64, arm64 et armv7. Si tu débutes avec Docker, commence par mon guide sur les services essentiels à auto-héberger pour bien poser les bases avant d’ajouter Navidrome à ta stack.

Prérequis

Navidrome est incroyablement léger. Un Raspberry Pi 3 avec 1 Go de RAM suffit pour servir une bibliothèque de plusieurs milliers d’albums à plusieurs utilisateurs simultanés. Pour un usage confortable avec transcodage FLAC, un petit VPS de 1 cœur / 1 Go est amplement suffisant. C’est l’un des serveurs média les plus économes en ressources que j’ai testé.

Déploiement Navidrome avec Docker Compose

Crée un dossier dédié et un fichier docker-compose.yml :

mkdir -p ~/navidrome && cd ~/navidrome

Voici le Docker Compose complet et prêt à l’emploi :

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    user: "1000:1000"
    environment:
      - ND_SCANSCHEDULE=1h
      - ND_LOGLEVEL=info
      - ND_SESSIONTIMEOUT=24h
      - ND_BASEURL=/
      - ND_ENABLETRANSCODINGCONFIG=true
      - ND_TRANSCODINGCACHESIZE=100MB
    ports:
      - "4533:4533"
    volumes:
      - ./data:/data
      - /path/to/your/music:/music:ro

Explications des variables d’environnement :

Points importants :

Le fichier .env recommandé

Pour séparer les secrets et les configs, crée un fichier .env à côté du docker-compose.yml :

# .env
PUID=1000
PGID=1000
MUSIC_PATH=/mnt/music
DATA_PATH=./data
PORT=4533

Et adapte le docker-compose.yml :

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    user: "${PUID}:${PGID}"
    environment:
      - ND_SCANSCHEDULE=1h
      - ND_LOGLEVEL=info
      - ND_SESSIONTIMEOUT=24h
      - ND_ENABLETRANSCODINGCONFIG=true
      - ND_TRANSCODINGCACHESIZE=100MB
    ports:
      - "${PORT}:4533"
    volumes:
      - ${DATA_PATH}:/data
      - ${MUSIC_PATH}:/music:ro

Lancement

docker compose up -d

Navidrome démarre en quelques secondes. Accède à l’interface via http://<ip-serveur>:4533 et crée le compte administrateur au premier démarrage.

Organisation des fichiers musicaux

Navidrome lit ta bibliothèque telle qu’elle est organisée sur le disque. Une structure claire aide l’extraction des métadonnées :

/music/
├── Artistes/
│   ├── Pink Floyd/
│   │   ├── The Dark Side of the Moon/
│   │   │   ├── 01 - Speak to Me.mp3
│   │   │   ├── 02 - Breathe.mp3
│   │   │   └── cover.jpg
│   │   └── The Wall/
│   └── Daft Punk/
│       ├── Discovery/
│       └── Random Access Memories/
└── Compilations/
    └── Best of 2025/

Les tags ID3 sont prioritaires sur la structure des dossiers. Si tes fichiers sont bien tagués, Navidrome les classe correctement même si les dossiers sont un peu chaotiques.

Configuration initiale

Au premier démarrage, Navidrome te demande de créer un compte admin. Une fois connecté :

  1. Scan de la bibliothèque : va dans Settings > Library et clique sur “Scan Now” ou attends le scan automatique (ND_SCANSCHEDULE=1h)
  2. Création d’utilisateurs : Settings > Users pour ajouter des comptes famille/amis
  3. Configuration du transcodage : Settings > Transcoding pour activer la conversion à la volée (MP3 192k par défaut, configurable)
  4. Scrobbling Last.fm : Settings > Personal pour connecter ton compte Last.fm
  5. Dossier playlists : Navidrome détecte automatiquement les fichiers .m3u et .m3u8 dans ta bibliothèque

Le scan initial peut prendre du temps selon la taille de ta collection. Pour 10 000 titres, compte 5 à 10 minutes. Les scans suivants sont incrémentaux et quasi instantanés.

Tous les trois gèrent la musique, mais leur approche diffère. Voici le comparatif brut pour t’aider à choisir.

CritèreNavidromeJellyfinPlex
PrixGratuit, open-source (GPL-3.0)Gratuit, open-sourceGratuit (limité) ou Plex Pass 5€/mois
Ressources~50 Mo RAM~300 Mo RAM~500 Mo+ RAM
Interface musiqueDédiée, optimisée audioGénéraliste (films + musique)Généraliste, lourde
Apps mobilesDSub, Ultrasonic, Substreamer (gratuites)App Jellyfin (gratuite)Plexamp (Plex Pass requis)
TranscodageÀ la volée, configurableOui, plus gourmandOui, limité sans Plex Pass
API SubsonicNative, complèteNonNon
Scrobbling Last.fmNatifPluginPlugin, limité sans Pass
Smart playlistsOui, basées sur critèresNonOui, avec Plex Pass
ParolesOui, via APINonOui, avec Plex Pass
Multi-utilisateursOui, permissions par bibliothèqueOui, avancéOui, limité sans Pass
Partage publicOui, liens directsNonOui, limité
Installation Docker1 conteneur, 5 min1 conteneur, 10 min1 conteneur, compte obligatoire
Vie privéeZero télémétrieZero télémétrieTélémétrie, compte Plex obligatoire

Verdict :

Mon avis perso : Navidrome fait 100 % du job pour la musique, avec une empreinte mémoire ridicule comparée à Jellyfin et Plex. Si tu as déjà Jellyfin pour la vidéo, ajouter Navidrome pour la musique coûte quasi zéro en ressources et te donne une expérience audio bien supérieure. C’est la combinaison que je recommande.

Astuces et optimisations

Configurer le transcodage FLAC → MP3 pour le mobile

Par défaut, Navidrome sert les fichiers en qualité originale. Sur mobile en 4G, c’est du gâchis de bande passante. Configure un profil de transcodage dans Settings > Transcoding :

Nom : MP3 192k
Format : mp3
Bitrate : 192
Commande : ffmpeg -i %s -map 0:0 -b:a %b -v 0 -f mp3 -

Active ce profil dans ton compte utilisateur mobile. Le FLAC reste stocké tel quel sur le serveur, mais est transcodé à la volée pour le streaming.

Activer le scrobbling Last.fm

Dans Settings > Personal, connecte ton compte Last.fm. Tes écoutes sont envoyées automatiquement, ce qui alimente tes stats et tes recommandations sans que Navidrome ne sache quoi que ce soit de tes habitudes.

Utiliser une app mobile Subsonic

L’interface web de Navidrome est correcte, mais les apps mobiles dédiées sont plus fluides. Mes préférences :

Toutes ces apps se connectent via l’URL de ton serveur + tes identifiants Navidrome. L’API Subsonic est standardisée, donc n’importe quelle app compatible fonctionne.

Sauvegarder la base de données

La base SQLite de Navidrome est dans ./data/navidrome.db. Sauvegarde-la régulièrement :

# Backup quotidien via cron
cp ~/navidrome/data/navidrome.db ~/backups/navidrome-$(date +%Y%m%d).db

Les pochettes et métadonnées sont recréables depuis les tags ID3, mais les playlists et la position de lecture sont dans cette base. Ne la perds pas.

Scanner manuellement après un gros ajout

Si tu viens de copier 50 albums et que tu ne veux pas attendre le scan automatique :

docker exec navidrome curl -X POST http://localhost:4533/api/scan

Ou via l’interface web : Settings > Library > Scan Now.

Sécuriser avec un reverse proxy

N’expose jamais Navidrome directement sur Internet. Utilise Caddy, Traefik ou Nginx Proxy Manager pour gérer HTTPS. Exemple avec Caddy :

music.tondomaine.com {
    reverse_proxy localhost:4533
}

Caddy génère automatiquement le certificat Let’s Encrypt. Si tu cherches un guide complet sur Caddy avec Docker, j’ai déjà couvert le sujet sur le blog.

Problèmes courants et solutions

La bibliothèque reste vide après le scan Vérifie que le chemin /music dans le conteneur pointe bien vers tes fichiers. Exécute docker exec -it navidrome ls /music pour confirmer. Vérifie aussi les permissions : l’utilisateur 1000:1000 doit pouvoir lire le dossier.

Les pochettes ne s’affichent pas Navidrome récupère les pochettes depuis MusicBrainz et Last.fm. Si un album n’a pas de pochette, vérifie que tes tags ID3 contiennent un champ Album Artist correct. Tu peux aussi placer un fichier cover.jpg ou folder.jpg dans le dossier de l’album.

Le transcodage ne fonctionne pas Navidrome utilise FFmpeg pour le transcodage. Vérifie que l’image Docker inclut FFmpeg (la version latest l’inclut nativement). Si tu utilises une image custom, monte le binaire FFmpeg dans le conteneur.

Les apps mobiles ne se connectent pas Vérifie que l’URL du serveur est accessible depuis le réseau de ton téléphone. Si tu es en HTTPS, assure-toi que le certificat est valide (pas de self-signed sur mobile, c’est galère). Le format d’URL est https://music.tondomaine.com avec login/mot de passe Navidrome.

Conclusion

Navidrome est l’un des services les plus impressionnants que j’ai ajoutés à mon homelab cette année. En 5 minutes de Docker Compose, tu obtiens un serveur musical complet, compatible avec des dizaines d’apps mobiles, qui consomme moins de 50 Mo de RAM et ne demande aucun compte tiers.

Pour la musique, il bat Jellyfin et Plex sur la légèreté, la simplicité et la découvrabilité via l’API Subsonic. Si tu cherches à compléter ta stack média auto-hébergée, c’est le choix évident.

Déploie-le, scanne ta bibliothèque, télécharge Ultrasonic ou DSub sur ton téléphone, et redécouvre ta collection musicale sans algorithme ni publicité. C’est une liberation.

Next
FreshRSS Docker : ton lecteur RSS auto-hébergé (alternative légère à Google Reader)