--- title: "Cómo instalar Navidrome en Ubuntu 24.04 con Nginx y HTTPS" description: "Instala Navidrome en Ubuntu 24.04 como servicio systemd, indexa tu colección de música, publícalo con Nginx y HTTPS y conéctalo a apps compatibles con Subsonic." category: "Servidores de Medios y Streaming" language: es source: https://cubepath.com/es/docs/servidores-de-medios-y-streaming/instalacion-de-navidrome-servidor-de-musica updated: 2026-09-25 --- # Cómo instalar Navidrome en Ubuntu 24.04 con Nginx y HTTPS Navidrome es un servidor de streaming de música ligero y open source escrito en Go. Indexa tu colección (MP3, FLAC, Opus, AAC y otros formatos), ofrece un reproductor web y es compatible con la API de Subsonic, por lo que funciona con decenas de aplicaciones para móvil y escritorio. En este tutorial instalarás Navidrome en Ubuntu 24.04 como servicio systemd con un usuario dedicado, lo publicarás con Nginx y HTTPS y conectarás una aplicación cliente. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS de 64 bits, por ejemplo un VPS de CubePath. Navidrome consume muy poco: 512 MB de RAM bastan para una colección de decenas de miles de canciones. - Un usuario no root con privilegios `sudo`. - Un subdominio (en esta guía, `music.your_domain`) con un registro DNS A que apunte a la IP pública del servidor. - Tu colección de música copiada al servidor o lista para subirla. ## Paso 1: Instalar FFmpeg y crear el usuario Navidrome usa FFmpeg para transcodificar al vuelo, por ejemplo para enviar un FLAC como Opus de 128 kbps a un móvil con datos limitados. Instálalo desde los repositorios de Ubuntu: ```bash sudo apt update sudo apt install -y ffmpeg ``` Crea un usuario de sistema sin shell para ejecutar el servicio: ```bash sudo useradd --system --no-create-home --shell /usr/sbin/nologin navidrome ``` Crea el directorio del programa, el de datos (base de datos y caché) y el de la música. Tu usuario será el dueño de la música para poder subir archivos, y el grupo `navidrome` tendrá solo lectura. Sustituye `your_user` por tu usuario: ```bash sudo install -d -o navidrome -g navidrome /opt/navidrome /var/lib/navidrome sudo install -d -o your_user -g navidrome -m 2750 /srv/music ``` El modo `2750` activa el bit `setgid`, de modo que lo que subas a `/srv/music` hereda el grupo `navidrome`. ## Paso 2: Descargar Navidrome Navidrome se distribuye como un único binario en las versiones de GitHub. Consulta cuál es la última versión publicada: ```bash VERSION=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep -Po '"tag_name": "v\K[^"]+') echo "$VERSION" ``` ```output 0.xx.x ``` Descarga el archivo para `amd64` (en un servidor ARM, cambia `amd64` por `arm64`) y extráelo en `/opt/navidrome`: ```bash curl -fL -o /tmp/navidrome.tar.gz "https://github.com/navidrome/navidrome/releases/download/v${VERSION}/navidrome_${VERSION}_linux_amd64.tar.gz" sudo tar -xzf /tmp/navidrome.tar.gz -C /opt/navidrome sudo chown -R navidrome:navidrome /opt/navidrome ``` Comprueba que el binario funciona: ```bash /opt/navidrome/navidrome --version ``` ```output 0.xx.x (xxxxxxxx) ``` ## Paso 3: Configurar Navidrome Navidrome lee su configuración de un archivo TOML. Créalo en el directorio de datos: ```bash sudo nano /var/lib/navidrome/navidrome.toml ``` Añade este contenido: ```toml MusicFolder = "/srv/music" DataFolder = "/var/lib/navidrome" Address = "127.0.0.1" Port = 4533 ScanSchedule = "@every 1h" LogLevel = "info" TranscodingCacheSize = "1GiB" ``` - `Address = "127.0.0.1"`: Navidrome solo escucha en local. Nginx será la única puerta de entrada, con HTTPS. - `ScanSchedule`: cada cuánto se revisa la carpeta en busca de música nueva. Navidrome también la escanea al arrancar. - `TranscodingCacheSize`: espacio máximo para guardar las canciones ya transcodificadas y no repetir el trabajo. Ajusta el propietario del archivo: ```bash sudo chown navidrome:navidrome /var/lib/navidrome/navidrome.toml ``` ## Paso 4: Crear el servicio systemd Crea la unidad: ```bash sudo nano /etc/systemd/system/navidrome.service ``` Añade este contenido: ```ini [Unit] Description=Navidrome Music Server After=network-online.target Wants=network-online.target [Service] User=navidrome Group=navidrome Type=simple ExecStart=/opt/navidrome/navidrome --configfile /var/lib/navidrome/navidrome.toml WorkingDirectory=/var/lib/navidrome TimeoutStopSec=20 Restart=on-failure # Endurecimiento: el proceso solo puede escribir en su directorio de datos NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/var/lib/navidrome [Install] WantedBy=multi-user.target ``` Recarga systemd, habilita el servicio y arráncalo: ```bash sudo systemctl daemon-reload sudo systemctl enable --now navidrome ``` Comprueba que está activo y escuchando en el puerto 4533: ```bash systemctl status navidrome --no-pager sudo ss -tlnp | grep 4533 ``` ```output LISTEN 0 4096 127.0.0.1:4533 0.0.0.0:* users:(("navidrome",pid=...,fd=...)) ``` ## Paso 5: Subir la música Navidrome lee las etiquetas de los archivos (artista, álbum, número de pista, carátula incrustada), no los nombres de carpeta, así que lo más importante es que la música esté bien etiquetada. Aun así, una estructura `Artista/Álbum/` facilita la gestión y permite que Navidrome encuentre portadas sueltas como `cover.jpg` o `folder.jpg`: ```text /srv/music/Pink Floyd/The Dark Side of the Moon (1973)/01 - Speak to Me.flac /srv/music/Pink Floyd/The Dark Side of the Moon (1973)/cover.jpg /srv/music/Radiohead/OK Computer (1997)/01 - Airbag.mp3 ``` Desde tu equipo local, sube un álbum con `rsync`. Con `-rt` no se copian permisos ni grupos locales, y los archivos heredan el grupo `navidrome`: ```bash rsync -rtvP "Pink Floyd" your_user@your_server_ip:/srv/music/ ``` Comprueba que el servicio puede leer lo que has subido: ```bash sudo -u navidrome ls -R /srv/music | head ``` ## Paso 6: Publicar Navidrome con Nginx y HTTPS Instala Nginx y Certbot, y abre en UFW los puertos de SSH, HTTP y HTTPS: ```bash sudo apt install -y nginx certbot python3-certbot-nginx sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable ``` Crea el sitio: ```bash sudo nano /etc/nginx/sites-available/navidrome ``` Añade esta configuración, sustituyendo `music.your_domain`: ```nginx server { listen 80; listen [::]:80; server_name music.your_domain; location / { proxy_pass http://127.0.0.1:4533; proxy_http_version 1.1; 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; # Envía el audio sin almacenarlo en búfer proxy_buffering off; } } ``` Activa el sitio, comprueba la sintaxis y recarga Nginx: ```bash sudo ln -s /etc/nginx/sites-available/navidrome /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` Solicita el certificado. Certbot añade el bloque HTTPS y la redirección desde HTTP: ```bash sudo certbot --nginx -d music.your_domain ``` ## Paso 7: Crear la cuenta de administrador La primera vez que abres Navidrome, te pide crear la cuenta de administrador. Hazlo en cuanto termine el paso anterior: visita `https://music.your_domain`, elige un nombre de usuario y una contraseña robusta, y entra. El escaneo inicial se lanza al arrancar el servicio. Si subiste la música después, fuérzalo desde el icono de actividad de la barra superior (**Escanear biblioteca**) o espera al siguiente escaneo programado. Los álbumes aparecerán en la vista **Álbumes** y podrás reproducirlos en el navegador. Para añadir más personas, entra en **Configuración** > **Usuarios** y crea una cuenta para cada una. Cada usuario tiene sus propias listas de reproducción, favoritos y estadísticas. ## Paso 8: Conectar una aplicación cliente Navidrome implementa la API de Subsonic, así que puedes usar cualquier aplicación compatible, por ejemplo: | Plataforma | Aplicaciones | |---|---| | Android | Symfonium, Tempo, Ultrasonic | | iOS | Amperfy, play:Sub, Substreamer | | Escritorio | Feishin, Supersonic | En la aplicación, añade un servidor Subsonic o Navidrome con: - **Dirección**: `https://music.your_domain` (sin puerto; Nginx atiende en el 443). - **Usuario y contraseña**: los de tu cuenta de Navidrome. Para comprobar la API desde el servidor, haz un `ping`. Sustituye el usuario y la contraseña; como la contraseña viaja en la URL, haz esta prueba solo contra `localhost`: ```bash curl -s "http://127.0.0.1:4533/rest/ping.view?u=your_admin&p=your_password&v=1.16.1&c=test&f=json"; echo ``` ```output {"subsonic-response":{"status":"ok","version":"1.16.1","type":"navidrome","serverVersion":"0.xx.x (xxxxxxxx)","openSubsonic":true}} ``` En cada cliente puedes fijar un bitrate máximo para datos móviles. Navidrome usará FFmpeg para transcodificar a ese bitrate y guardará el resultado en la caché. ## Actualizar Navidrome Para actualizar, repite la descarga del paso 2 con la nueva versión, deteniendo antes el servicio: ```bash sudo systemctl stop navidrome sudo tar -xzf /tmp/navidrome.tar.gz -C /opt/navidrome sudo chown -R navidrome:navidrome /opt/navidrome sudo systemctl start navidrome ``` Antes de actualizar entre versiones con cambios grandes, copia `/var/lib/navidrome/navidrome.db` por si necesitas volver atrás. ## Solución de problemas **La biblioteca aparece vacía.** Revisa el registro del servicio en busca de errores de permisos durante el escaneo: ```bash sudo journalctl -u navidrome --no-pager -n 50 ``` Si ves `permission denied`, comprueba que los archivos pertenecen al grupo `navidrome` y que tienen permiso de lectura para el grupo: ```bash ls -l "/srv/music/Pink Floyd" ``` **Error 502 Bad Gateway.** Navidrome no está en marcha o escucha en otra dirección. Comprueba `systemctl status navidrome` y que `Address` y `Port` del archivo TOML coinciden con el `proxy_pass` de Nginx. **Faltan álbumes o salen mezclados.** Casi siempre son etiquetas incompletas o inconsistentes, por ejemplo el mismo álbum con dos valores distintos de **Album Artist**. Corrígelas con un editor de etiquetas como MusicBrainz Picard y espera al siguiente escaneo. ## Conclusión Tienes Navidrome funcionando en Ubuntu 24.04 como servicio con permisos mínimos, publicado con HTTPS y accesible desde aplicaciones compatibles con Subsonic. Como siguientes pasos, puedes programar una copia de seguridad de `/var/lib/navidrome`, que contiene usuarios, listas y estadísticas, etiquetar tu colección con MusicBrainz Picard para obtener mejores metadatos y crear cuentas para el resto de la familia.