SSD Nodes Learn 🎉 VPS desde $5.50/mes
Guías Matt ConnorPor Matt Connor

Cómo alojar Navidrome en tu propio VPS

Instala Navidrome en un VPS y reproduce tu biblioteca desde cualquier teléfono. Incluye cálculo de almacenamiento, clientes Subsonic, modo offline, TLS y copias seguras.

Qué ofrece la transmisión de música autoalojada en un VPS

La transmisión de música autoalojada en un VPS significa que usted ejecuta el reproductor y proporciona la música. El servidor almacena archivos que ya posee, y cualquier teléfono puede acceder a él por Internet con un inicio de sesión normal. Sea consciente de la limitación antes de empezar: esto sustituye al reproductor de un servicio de streaming, no a su catálogo. No aparecerá nada nuevo en su biblioteca hasta que compre la música o la extraiga y copie el archivo al servidor.

El audio exige muchos menos recursos del servidor que el vídeo. Los archivos son pequeños, los teléfonos decodifican todos los formatos habituales sin ayuda y un oyente utiliza menos ancho de banda que una videollamada. La CPU no suele ser un problema. El espacio en disco es la limitación real. Los otros dos factores que determinan si esto funcionará son la calidad de las etiquetas y si la aplicación del teléfono puede descargar música para usarla sin conexión.

Qué servidor de música elegir: Navidrome, Jellyfin o Funkwhale

Navidrome es la opción predeterminada cuando sólo necesita audio. Es un único binario de Go dentro de un solo contenedor y mantiene su estado en una única base de datos SQLite. Responde a la API de Subsonic, por lo que existe una amplia familia de aplicaciones móviles de terceros. La versión 0.63.2 era la actual en agosto de 2026. El proyecto indica que funciona correctamente en hardware tan pequeño como una Raspberry Pi Zero, por lo que el software del servidor no será el componente por el que tendrá que pagar.

Jellyfin es una opción adecuada si ya ejecuta Jellyfin como servidor multimedia en un VPS para vídeo. Su biblioteca de música funciona, y Finamp es una aplicación musical de Jellyfin para Android e iOS que descarga pistas para escucharlas sin conexión. La limitación es la API. Jellyfin no tiene un endpoint de Subsonic integrado, y el plugin de la comunidad que añadía uno dejó de actualizarse en 2022, por lo que el ecosistema de aplicaciones de Subsonic no es compatible con este servidor. En su lugar, debe usar aplicaciones que hablen con la API propia de Jellyfin, y hay menos opciones.

Funkwhale es la opción federada, y la versión 2.0 se publicó en marzo de 2026. Un servidor de Funkwhale se denomina pod, los pods se federan mediante ActivityPub (el protocolo en el que se basa Mastodon) y un usuario de un pod puede seguir una biblioteca pública de otro. También responde a parte de la API de Subsonic, con una diferencia importante: cada usuario establece una contraseña de Subsonic independiente en su propia configuración, porque el protocolo de Subsonic espera una contraseña que el servidor pueda leer. La instalación de Funkwhale es más pesada, ya que necesita PostgreSQL y una cola de tareas además de la aplicación web.

Elija Navidrome salvo que necesite federación o que Jellyfin ya esté en ejecución. El resto de esta guía configura Navidrome con Docker.

Por qué la API de Subsonic decide qué aplicación móvil utiliza

Subsonic era un servidor de música cuya API HTTP se convirtió en el lenguaje común del audio autoalojado, y OpenSubsonic es el proyecto comunitario que sigue ampliándolo. Por eso puede elegir entre varias aplicaciones para el teléfono. Navidrome no incluye una aplicación móvil propia ni la necesita, porque cualquier cliente de Subsonic inicia sesión con la dirección del servidor y los datos de su cuenta.

Esto es especialmente importante para la sincronización sin conexión, que determina si la configuración resulta útil en el uso diario. Un teléfono en un túnel no puede acceder al servidor, por lo que el cliente debe haber copiado los archivos al almacenamiento local con antelación. Todos los clientes reproducen contenido en streaming. Sólo algunos permiten descargarlo. El directorio de clientes de navidrome.org/apps indica cuáles lo permiten, y hay muchas opciones en ambas plataformas: Substreamer y Ultrasonic en Android, Amperfy y play:Sub en iOS. Varias de las mejores aplicaciones son de pago, y Symfonium en Android es la que se menciona con más frecuencia. Instale dos antes de decidir, porque esta es la parte del sistema que utilizará a diario.

¿Cuánto almacenamiento necesita una biblioteca musical?

ChartStorage per 1,000 albums by audio format
The data behind this chart
[
  {
    "label": "Opus 128k",
    "kbps": 128,
    "gb_per_1000_albums": 43
  },
  {
    "label": "MP3 320k",
    "kbps": 320,
    "gb_per_1000_albums": 108
  },
  {
    "label": "FLAC 16/44.1",
    "kbps": 900,
    "gb_per_1000_albums": 304
  },
  {
    "label": "FLAC 24/96",
    "kbps": "3,000",
    "gb_per_1000_albums": "1,013"
  }
]

Son cifras de orden de magnitud derivadas de la tasa de bits, no mediciones de una colección real. El cálculo es lo bastante sencillo como para compararlo con sus propios archivos. Considere que un álbum dura 45 minutos, es decir, 2,700 segundos. Multiplique la tasa de bits en kilobits por segundo por 2,700 y divida el resultado entre 8,000 para obtener megabytes. A 320 kbps, un álbum ocupa 108 MB. Por tanto, mil álbumes ocupan aproximadamente 108 GB.

El formato sin pérdida cambia el resultado. Un FLAC con calidad de CD tiene una media cercana a 900 kbps en material normal, por lo que esos mismos mil álbumes necesitan aproximadamente 304 GB. Una biblioteca en 24 bits y 96 kHz ocupa aproximadamente 1,013 GB, un terabyte completo para una colección que podría enumerar en papel. Una copia Opus optimizada para teléfonos a 128 kbps permite almacenar esos mismos mil álbumes en 43 GB. Ejecute du -sh /path/to/music sobre la biblioteca que ya tiene, porque su tasa de bits media es el único dato que importa al elegir un plan.

El ancho de banda es la parte menor de la factura. Un flujo de 320 kbps equivale a 40 kilobytes por segundo, por lo que una hora de escucha transfiere aproximadamente 144 MB. Cien horas al mes son unos 14 GB, una cantidad que ninguna cuota de transferencia de un VPS suele notar. La excepción es la primera sincronización sin conexión de un teléfono, que puede transferir decenas de gigabytes en una sola tarde.

¿Nivel de almacenamiento o nivel de cómputo?

Un servidor de música contiene una gran cantidad de datos fríos y apenas requiere capacidad de cómputo. Leer un archivo a 40 kilobytes por segundo deja cualquier disco inactivo, y la CPU sólo trabaja durante un análisis de la biblioteca o durante la transcodificación, tareas que normalmente no realizará. Por tanto, la NVMe rápida de un plan de cómputo no le aporta nada, mientras que su precio por gigabyte es lo que impide subir las copias FLAC. Este es el caso en que un VPS de almacenamiento supera a un VPS normal, porque esos planes se tarifican por terabyte y no por núcleo.

La memoria necesaria es moderada. Navidrome sirve una biblioteca personal con unos pocos cientos de megabytes, y el análisis es el momento de mayor consumo, no la reproducción. Asigne al servidor 1 GB o 2 GB de RAM y destine el resto del presupuesto al almacenamiento.

Instalar Navidrome con Docker Compose

Cree primero los directorios y asígneles como propietario el identificador de usuario con el que se ejecutará el contenedor. Si Compose es nuevo para usted, Docker Compose en un VPS explica los supuestos de este archivo.

sudo install -d -m 755 -o 1000 -g 1000 /srv/navidrome /srv/music

Escriba docker-compose.yml sin añadir prácticamente nada más y en su propio directorio:

services:
  navidrome:
    image: deluan/navidrome:0.63.2
    user: "1000:1000"
    ports:
      - "127.0.0.1:4533:4533"
    restart: unless-stopped
    environment:
      ND_LOGLEVEL: "info"
      ND_SESSIONTIMEOUT: "24h"
      ND_SCANNER_SCHEDULE: "@every 24h"
      ND_BACKUP_PATH: "/data/backup"
      ND_BACKUP_SCHEDULE: "0 4 * * *"
      ND_BACKUP_COUNT: "7"
    volumes:
      - /srv/navidrome:/data
      - /srv/music:/music:ro
docker compose up -d
docker compose ps

docker compose ps debería mostrar el servicio en ejecución, no reiniciándose. Un contenedor que se reinicia en bucle casi siempre tiene un problema de permisos en /srv/navidrome, y docker compose logs navidrome indica el nombre del archivo que no pudo escribir.

Conviene explicar cuatro detalles de ese archivo. El puerto sólo se publica en 127.0.0.1, por lo que el servidor es accesible a través del reverse proxy y no por el puerto 4533 desde Internet abierta: Docker escribe sus propias reglas de firewall, por lo que un simple 4533:4533 sigue expuesto incluso en un equipo donde ufw indica que todo está denegado. El volumen de música es de sólo lectura, lo que impide que un error del escáner elimine su única copia. ND_SCANNER_SCHEDULE está desactivado de forma predeterminada, y las guías escritas antes de Navidrome 0.55 lo llaman ND_SCANSCHEDULE, un nombre que ya no existe. Las tres opciones de copia de seguridad activan la copia de seguridad integrada de la base de datos en la que se basa la sección de copias de seguridad siguiente.

Suba su música al servidor

Copie la biblioteca con rsync, que reanuda la transferencia en lugar de empezar de nuevo cuando se interrumpe la conexión.

rsync -av --info=progress2 ~/Music/ user@music.example.com:/srv/music/

La barra final en el origen es importante. Sin ella, obtiene /srv/music/Music. Cuando termine la copia, corrija el propietario:

sudo chown -R 1000:1000 /srv/music
id -u

El contenedor se ejecuta con el identificador de usuario 1000 y el montaje es de sólo lectura, por lo que todos los archivos deben poder ser leídos por ese identificador. Si su cuenta SSH no tiene el UID 1000 en el VPS, la copia queda asignada a otro usuario y el análisis no encuentra ninguna pista, mientras la interfaz web permanece vacía. id -u muestra su identificador real, y cómo funcionan PUID y PGID en los contenedores Docker explica completamente la correspondencia.

Un proxy inverso y TLS para que el teléfono funcione desde cualquier lugar

Apunte un registro A de DNS al VPS y, después, dé a Caddy estas tres líneas:

music.example.com {
    reverse_proxy 127.0.0.1:4533
}
sudo systemctl reload caddy

Caddy solicita el certificado en la primera petición. Los puertos 80 y 443 deben estar abiertos, porque el desafío ACME (entorno de gestión automática de certificados) se responde en el puerto 80. En nginx, añada proxy_buffering off; al bloque location: Navidrome envía eventos de progreso a la interfaz web mediante una conexión persistente, y con el almacenamiento en búfer activado, la interfaz espera mientras nginx mantiene retenida la respuesta. Si lo publica bajo una ruta como /music en lugar de usar su propio subdominio, establezca ND_BASEURL con la misma ruta; de lo contrario, la interfaz se carga como una página en blanco. Los tres proxies habituales se comparan en Nginx, Caddy y Traefik en un VPS.

Abra el sitio y cree la primera cuenta. No existe una contraseña predeterminada y al primer visitante se le solicita crear el usuario administrador. Hágalo antes de comunicar la dirección a otras personas. Después, pruebe la ruta exacta que usa un cliente de teléfono:

SALT=$(openssl rand -hex 6)
TOKEN=$(printf '%s%s' 'YOUR_PASSWORD' "$SALT" | md5sum | cut -d' ' -f1)
curl -s "https://music.example.com/rest/ping.view?u=YOUR_USER&t=$TOKEN&s=$SALT&v=1.16.1&c=curl&f=json"

Una respuesta correcta comienza con {"subsonic-response":{"status":"ok" e identifica navidrome como tipo de servidor. Un cuerpo que contiene "status":"failed" y el código de error 40 indica que el proxy funciona y que las credenciales son incorrectas. Un error de certificado en este paso es el primero que debe corregir, porque la mayoría de los clientes de teléfono rechazan un certificado incorrecto con un mensaje que no proporciona información útil.

Por qué tu biblioteca aparece mal después del primer escaneo

Navidrome examina las etiquetas, no las carpetas, por lo que las etiquetas determinan lo que ves. Una pista sin etiqueta de artista del álbum se clasifica con su artista de pista. Por eso, una recopilación con un artista diferente en cada pista se convierte en veinte álbumes de una sola pista. Corrígelo en los archivos, no en Navidrome: MusicBrainz Picard y beets buscan el álbum en la base de datos de MusicBrainz y escriben de nuevo las etiquetas estándar.

Navidrome también separa una etiqueta con varios artistas en artistas independientes. Por eso, una banda cuyo nombre contiene un separador se divide por error; AC/DC es el ejemplo más habitual. ND_SCANNER_ARTISTSPLITEXCEPTIONS contiene los nombres que nunca deben separarse.

Los archivos nuevos se detectan unos segundos después de copiarse. El observador depende de las notificaciones de cambios del kernel. Estas notificaciones no llegan para los archivos escritos en un recurso compartido de red montado desde otra máquina. En ese tipo de configuración, el ND_SCANNER_SCHEDULE periódico es lo que mantiene actualizada la biblioteca. Un escaneo completo lee las etiquetas de todos los archivos. Esto es lento en una biblioteca grande y es una de las razones por las que conviene proteger la base de datos siguiente.

Usuarios, listas de reproducción y uso compartido

Un administrador crea las demás cuentas en la interfaz web y no existe el registro de usuarios. Cada usuario tiene recuentos de reproducciones, listas de reproducción, favoritos y valoraciones independientes, por lo que los miembros de una familia no terminan compartiendo un único perfil de gustos.

Las listas de reproducción llegan de dos formas. Una lista creada en un cliente se guarda en la base de datos. Un archivo .m3u colocado en la carpeta de la biblioteca se importa durante el análisis. Esta es la forma sencilla de transferir listas desde un reproductor de escritorio. Las listas de reproducción inteligentes son archivos .nsp: archivos JSON pequeños con reglas que se importan del mismo modo y se actualizan automáticamente cuando cambia la biblioteca.

El uso compartido está habilitado de forma predeterminada desde la versión 0.63.0, publicada en julio de 2026. Permite que un usuario cree un enlace público a un álbum que cualquiera puede abrir sin iniciar sesión. En un servidor que contiene toda la biblioteca, quizá no sea lo que necesita. Establecer ND_ENABLESHARING en false lo desactiva.

Haga una copia de seguridad de la base de datos por separado de los archivos de música

La copia de seguridad propia de Navidrome sólo incluye la base de datos. La documentación lo indica claramente: el proceso guarda la base de datos, incluidos los usuarios, los recuentos de reproducciones y el resto de los datos, pero no guarda la música ni la configuración. Esta separación es la forma correcta de plantearlo, porque ambas partes fallan de manera distinta. Los archivos de música se pueden volver a copiar desde el disco donde se extrajeron. Los recuentos de reproducciones, las valoraciones, los favoritos y las listas de reproducción no existen en ningún otro lugar, y un nuevo escaneo no los recupera.

El archivo compose ya escribe una copia nocturna en /data/backup y conserva siete copias. Cree una manualmente antes de actualizar:

sudo docker compose run --rm navidrome backup create

La restauración elimina la base de datos actual y copia la copia de seguridad en su lugar. Debe ejecutarse mientras Navidrome está detenido. Una restauración no es segura con el servidor en funcionamiento.

Esos archivos siguen estando en el mismo VPS, por lo que no sobreviven a la pérdida del VPS. Envíe /srv/navidrome a otra máquina o a un almacenamiento de objetos con una tarea programada. Para eso están diseñados restic y BorgBackup. El directorio completo es pequeño, normalmente muy inferior a un gigabyte, por lo que una copia cifrada diaria fuera del servidor cuesta muy poco y permite recuperar todo lo que un nuevo escaneo no puede recuperar.

FAQ

¿Necesito transcodificar música en un VPS?

Casi nunca. Los teléfonos y los navegadores decodifican MP3, AAC, Opus y FLAC por su cuenta, por lo que el servidor envía el archivo tal cual y utiliza casi nada de CPU. Hay un caso en el que puede ser útil activarlo: una biblioteca FLAC transmitida mediante datos móviles, donde convertir desde aproximadamente 900 kbps a Opus a 128 kbps reduce el consumo de datos aproximadamente siete veces. Navidrome puede hacerlo por usuario y por reproductor, y permanece desactivado hasta que lo active.

¿Por qué mi aplicación del teléfono no puede descargar música para escucharla sin conexión?

Porque el almacenamiento sin conexión es una función del cliente, no del servidor. La API de Subsonic permite que cualquier cliente obtenga un archivo completo, pero la aplicación decide si conserva una copia en el teléfono. Consulte el directorio de clientes en navidrome.org/apps y elija uno cuya descripción mencione descargas sin conexión o almacenamiento en caché. Algunos clientes sólo almacenan en caché lo que ya ha reproducido, lo que no equivale a sincronizar un álbum antes de un viaje.

¿Por qué un álbum se dividió en varios álbumes después del análisis?

La etiqueta del artista del álbum falta o no es coherente entre las pistas. Navidrome agrupa por etiquetas y no por carpetas, por lo que doce pistas con doce valores de artista diferentes y sin un valor común de artista del álbum aparecen como doce álbumes. Establezca la etiqueta del artista del álbum en todas las pistas del álbum, normalmente como Various Artists en el caso de una recopilación, y vuelva a ejecutar el análisis. MusicBrainz Picard o beets pueden hacerlo de una vez para toda una carpeta.

¿El streaming de música autoalojado sustituye a Spotify?

Sustituye al reproductor y a la biblioteca, no al catálogo. Tiene su propia colección en todos los dispositivos, con las listas de reproducción y los recuentos de reproducciones que ningún cambio de licencia puede quitarle. No obtiene los lanzamientos nuevos ni recomendaciones basadas en la música que escuchan otras personas. La mayoría de quienes ejecutan este sistema compran su música y mantienen una cuenta de streaming económica para descubrir música nueva.

#navidrome#music#streaming#self-hosting#media-server