Navidrome: servidor de música autohospedado con Docker

Navidrome: servidor de música autohospedado con Docker

Navidrome: servidor de música autohospedado con Docker

Navidrome convierte tu colección de música en un servidor compatible con clientes Subsonic como Symfonium o DSub. Aquí te cuento cómo montarlo con Docker y dejarlo funcional desde el móvil.

Por Javier · Actualizado: 2025-05-19

Navidrome es un servidor de música open-source (Go, licencia GPL-3.0) que implementa la Subsonic API y puedes desplegar en Docker en tu propia red. Escanea tu biblioteca local, transcoding mediante ffmpeg, y es compatible con clientes móviles como DSub o Symfonium. Requiere configuración adicional para acceso remoto fuera de casa.

Tu colección merece un servidor propio

Si tienes un Proxmox, un NAS o cualquier cacharro Linux corriendo las 24 horas en casa, lo más probable es que también tengas carpetas con música acumulándose desde hace años. MP3s de los 2000, FLACs que descargaste cuando te picó el gusano del audio de calidad, rips de CDs que no abres en meses. Todo eso está ahí, en un disco, sin hacer nada útil.

La pregunta razonable es si merece la pena montarse un servidor de música cuando Spotify funciona y ya está pagado. Depende. Navidrome no te da radio algorítmica ni podcasts; lo que sí hace es servirte tu biblioteca con una interfaz limpia, clientes móviles decentes y sin que nadie te suba el precio a fin de año. Si tu colección tiene suficiente peso propio, el razonamiento se sostiene solo. Si todavía dependes de descubrir música nueva cada semana, esto es un complemento, no un reemplazo.

En este post levantamos Navidrome con Docker, apuntamos el volumen a tu biblioteca y dejamos la interfaz web y la app del móvil funcionando en la red local. Si después quieres exponerlo al exterior, te cuento por dónde tirar. Sin promesas de que tarda cinco minutos, porque en mi caso tardó veinte, y me parece un trato razonable.

Por qué importa

Clientes móviles reales

Subsonic API compatible con DSub, Symfonium y Ultrasonic. Sin app propietaria, sin vendor lock-in.

Formatos sin conversión forzada

Reproduce FLAC, MP3, OGG, Opus y WAV de forma nativa. Transcoding en tiempo real vía ffmpeg si el cliente lo necesita.

Multi-usuario independiente

Cada cuenta tiene su historial, permisos y scrobbling propio. Perfecto para casa compartida.

Sin cuota mensual

Spotify Individual subió a 10,99 €/mes en España en 2023. Aquí el coste es hardware y electricidad, nada más.

Qué necesitas antes de empezar

Para montar Navidrome necesitas tres cosas: Docker con Docker Compose instalado en tu máquina o servidor, un directorio con tus archivos de música y tiempo para revisar el etiquetado. Nada más.

El servidor puede ser cualquier cosa con Linux: una Raspberry Pi 4, un mini PC, una VM en Proxmox o directamente tu NAS si tiene Docker. Navidrome está escrito en Go y consume muy poca RAM —menos de 100 MB en reposo con una biblioteca mediana.

  • Docker Engine 20.10+ y Docker Compose v2 (o el plugin compose)
  • Un directorio de música accesible desde el host
  • Puerto 4533 libre, o el que quieras reasignar
  • ffmpeg si quieres transcoding en tiempo real

El transcoding convierte al vuelo formatos como FLAC a MP3 o AAC para clientes que no los soporten, o para reducir el consumo de datos en móvil. En hardware ARM de gama baja, con varios usuarios transcodificando a la vez, la CPU puede ser el cuello de botella.

Instalar Navidrome con Docker Compose

La imagen oficial es deluan/navidrome, disponible en Docker Hub. El método más limpio es un docker-compose.yml que puedes versionar y reutilizar fácilmente.

Este es un ejemplo funcional basado en mi setup:

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    ports:
      - "4533:4533"
    environment:
      ND_SCANSCHEDULE: "1h"
      ND_LOGLEVEL: "info"
      ND_SESSIONTIMEOUT: "24h"
      ND_BASEURL: ""
    volumes:
      - "/ruta/datos/navidrome:/data"
      - "/ruta/musica:/music:ro"

El volumen de música va en modo :ro (solo lectura) para que Navidrome no pueda modificar nada. Base de datos, caché y configuración van todos al directorio /data. Levanta el stack con docker compose up -d y en unos segundos tienes la interfaz en http://IP-DEL-HOST:4533.

La primera vez te pide crear el usuario administrador directamente desde el navegador. A partir de ahí puedes entrar en la interfaz web y ver cómo avanza el escaneo inicial de tu biblioteca.

Añadir ffmpeg para transcoding

La imagen base no incluye ffmpeg. La opción más directa, si ya lo tienes instalado en el host, es montar el binario como volumen de solo lectura:

    volumes:
      - "/usr/bin/ffmpeg:/usr/bin/ffmpeg:ro"

Comprueba que la arquitectura del binario coincide con la del contenedor. En ARM (Pi, OrangePi) el ffmpeg del host es aarch64; en x86_64 es diferente. Si no coincide, el transcoding no funcionará y verás errores en los logs del contenedor.

Organiza y etiqueta tu biblioteca antes de importar

Navidrome lee metadatos directamente de las etiquetas embebidas: ID3v2 para MP3, Vorbis Comments para FLAC y OGG, y MP4 tags para AAC. Si tus archivos tienen etiquetas inconsistentes o vacías, la navegación por artista, álbum y género será caótica desde el primer día.

Vale la pena dedicar tiempo a esto antes de lanzar el primer escaneo. Para reconocimiento por huella acústica y etiquetado masivo, MusicBrainz Picard funciona bien y es open source. Para colecciones grandes donde quieres automatizar más, beets es más potente aunque tiene más curva de aprendizaje.

  • FLAC: formato preferido si tienes espacio en disco. Lossless, etiquetado Vorbis Comments robusto.
  • MP3 320 kbps: compatible con absolutamente todo, tamaño razonable.
  • AAC/M4A: buena relación calidad/tamaño, aunque algunos clientes Subsonic más antiguos no lo gestionan directamente sin transcoding.
  • OGG Vorbis / Opus: excelente calidad a bajo bitrate, pero la compatibilidad de cliente es más variable.

Navidrome escanea automáticamente al arrancar y cada intervalo que configures con ND_SCANSCHEDULE. Si añades música nueva, puedes forzar un rescan desde el panel de administración sin reiniciar el contenedor.

Conectar clientes móviles con la API Subsonic

Navidrome implementa la Subsonic API —la versión mínima recomendada por los clientes modernos es la 1.16.1— lo que significa que puedes usar cualquier cliente diseñado para Subsonic o Airsonic. La configuración en todos ellos es la misma: URL del servidor con puerto si no usas reverse proxy, usuario y contraseña.

Los clientes que he probado y funcionan bien con Navidrome:

  • Symfonium (Android): el más pulido visualmente, con integración en Android Auto.
  • DSub (Android): veterano, open source, fiable aunque la interfaz es más austera.
  • Substreamer (iOS): buena opción en iPhone, gestiona bien la caché offline.
  • Ultrasonic (Android): open source y en desarrollo activo.

El endpoint base para configurar los clientes es http://IP:4533, o tu dominio si ya tienes reverse proxy. Si el servidor está corriendo y el usuario existe, la conexión funciona desde el primer intento.

Calidad de streaming según la red

Los clientes Subsonic permiten configurar el bitrate máximo de streaming. En casa por WiFi puedes dejarlo sin límite y recibir FLAC directamente si el cliente lo soporta. En datos móviles, limitar a 192 kbps MP3 reduce consumo sin sacrificio perceptible en la mayoría de auriculares.

Navidrome transcodifica al vuelo si el cliente pide un bitrate inferior al del archivo original. Es ahí donde el ffmpeg que configuraste antes entra en juego.

Acceso desde fuera de casa

Navidrome, tal cual instalado, solo es accesible desde tu red local. Para usarlo desde fuera tienes dos caminos: un reverse proxy con dominio o DDNS, o una VPN hacia tu red doméstica. Ninguna de las dos opciones es trivial si no lo has hecho antes, pero tampoco son inabordables con un poco de documentación.

Reverse proxy con Caddy o nginx

Caddy es la opción más directa porque gestiona HTTPS automáticamente mediante Let’s Encrypt. Un bloque básico de Caddyfile:

musica.tudominio.com {
    reverse_proxy localhost:4533
}

Necesitas que el puerto 443 (y 80 para el challenge ACME) llegue a tu servidor desde el exterior, lo que implica abrir puertos en el router y tener IP fija o DDNS actualizado. Con ISPs que usan CG-NAT el tráfico entrante puede no llegar directamente a tu máquina: en ese caso el reverse proxy no sirve sin un intermediario.

VPN como alternativa más privada

Si no quieres exponer ningún puerto, una VPN hacia tu red local es una opción sólida. WireGuard, Tailscale o ZeroTier permiten que el cliente móvil acceda a Navidrome como si estuviera en casa, sin abrir nada al exterior. La contrapartida es que la VPN tiene que estar activa en el móvil cuando quieres escuchar música.

Para uso ocasional desde fuera, una VPN es suficiente. Para un setup con varios usuarios externos o acceso frecuente, el reverse proxy con dominio propio resulta más cómodo a largo plazo.

Scrobbling y gestión de usuarios

Navidrome incluye scrobbling nativo a Last.fm y ListenBrainz. Cada usuario configura su propia cuenta desde el panel de perfil, sin tocar archivos de configuración. Lo que escuchas en el cliente móvil aparece en tu historial como con cualquier otro reproductor compatible.

En cuanto a usuarios, puedes crear cuentas independientes con permisos diferenciados: un administrador que gestiona la biblioteca y otros que solo reproducen. El historial de reproducción y las valoraciones son independientes por usuario, no se mezclan.

  • Cada usuario tiene su propia contraseña y sesión independiente.
  • Los administradores pueden forzar rescans y ver logs desde la interfaz web.
  • El scrobbling funciona por usuario: cada uno conecta su propia cuenta de Last.fm o ListenBrainz.

Una advertencia práctica: si compartes el servidor con varios usuarios que transcodifican simultáneamente —especialmente en hardware ARM— la CPU se nota. En un mini PC x86 moderno con cuatro núcleos no hay problema; en una Raspberry Pi 4 con tres usuarios activos es posible que aparezca buffering en los clientes.

Preguntas frecuentes

Q: ¿Funciona Navidrome fuera de casa sin configuración extra?

A: No de forma automática. Para acceder desde fuera de tu red local necesitas un reverse proxy con dominio o DDNS, o una VPN. El servidor escucha en tu red interna y no expone nada al exterior por defecto.

Q: ¿Qué pasa si mis archivos tienen etiquetas mal puestas?

A: La navegación y búsqueda se resienten directamente: álbumes duplicados, artistas fragmentados, portadas que no cargan. Navidrome lee los metadatos embebidos (ID3v2, Vorbis Comments, MP4 tags) tal cual están; si el etiquetado es caótico, la experiencia también lo será.

Q: ¿Vale Navidrome para escuchar música que no tengo?

A: No. Navidrome sirve únicamente tu biblioteca local; no tiene catálogo propio ni discovery algorítmico. Si buscas explorar música nueva o escuchar lo que no tienes descargado, necesitas mantener Spotify u otro servicio de streaming en paralelo.

Q: ¿Cuánto carga el transcoding en tiempo real al servidor?

A: Depende del hardware. En un PC o servidor x86 moderno es marginal con pocos usuarios simultáneos. En ARM de gama baja (una Pi Zero o similar) puede convertirse en un cuello de botella real si varios usuarios reproducen a la vez con transcoding activo.

Q: ¿Qué clientes móviles puedo usar con Navidrome?

A: Cualquiera compatible con la Subsonic API: DSub, Symfonium, Substreamer y Ultrasonic son las opciones más usadas. Navidrome implementa la Subsonic API (versión mínima recomendada 1.16.1), así que la compatibilidad con estos clientes está bien probada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *