Instalación de Navidrome: Servidor de Música en Linux
Navidrome es un servidor de streaming de música ligero y moderno que implementa la API Subsonic, lo que lo hace compatible con decenas de aplicaciones cliente para iOS, Android, escritorio y web. Con soporte para MP3, FLAC, OPUS y otros formatos, indexación rápida de bibliotecas y gestión de usuarios, Navidrome es la alternativa open-source perfecta a servicios como Spotify para tu colección personal. Esta guía cubre la instalación de Navidrome en Linux.
Requisitos Previos
- Ubuntu 20.04+, Debian 11+, CentOS 8+ o Rocky Linux 8+
- Mínimo 256 MB de RAM (Navidrome es muy eficiente)
- FFmpeg instalado (para transcodificación)
- Puerto 4533 disponible
- Colección musical organizada en el servidor
Instalación de Navidrome
Instalación del Binario
# Crear usuario dedicado para Navidrome
sudo useradd -r -s /bin/false navidrome
# Crear directorios
sudo mkdir -p /opt/navidrome /var/lib/navidrome
sudo chown navidrome:navidrome /opt/navidrome /var/lib/navidrome
# Descargar la última versión de Navidrome
NAVIDROME_VERSION="0.53.3"
wget "https://github.com/navidrome/navidrome/releases/download/v${NAVIDROME_VERSION}/navidrome_${NAVIDROME_VERSION}_linux_amd64.tar.gz" -O /tmp/navidrome.tar.gz
# Extraer e instalar
sudo tar -xzf /tmp/navidrome.tar.gz -C /opt/navidrome/
sudo chown navidrome:navidrome /opt/navidrome/navidrome
sudo chmod +x /opt/navidrome/navidrome
# Verificar la instalación
/opt/navidrome/navidrome --version
Instalación de FFmpeg
# Ubuntu/Debian
sudo apt install -y ffmpeg
# CentOS/Rocky (requiere repositorio RPM Fusion)
sudo dnf install -y epel-release
sudo dnf install -y --enablerepo=epel https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm
sudo dnf install -y ffmpeg
# Verificar la instalación de ffmpeg
ffmpeg -version | head -1
Configuración de Navidrome
# Crear archivo de configuración
sudo tee /opt/navidrome/navidrome.toml << 'EOF'
# Directorio con la colección musical
MusicFolder = "/mnt/musica"
# Directorio para datos de Navidrome (base de datos, caché, etc.)
DataFolder = "/var/lib/navidrome"
# Puerto de escucha
Port = 4533
# Dirección de escucha (127.0.0.1 si usas proxy inverso)
Address = "0.0.0.0"
# Nivel de logs
LogLevel = "info"
# Intervalo de escaneo de la biblioteca (en horas, 0 = solo al inicio)
ScanSchedule = "@every 1h"
# Máximo de álbumes en la lista de reproducción por defecto
PlaylistsPath = "/var/lib/navidrome/playlists"
# Habilitar las funciones de transcodificación
TranscodingCacheSize = "1GiB"
EOF
Crear el Servicio Systemd
sudo tee /etc/systemd/system/navidrome.service << 'EOF'
[Unit]
Description=Navidrome Music Server and Streamer
After=network.target
[Service]
User=navidrome
Group=navidrome
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile /opt/navidrome/navidrome.toml
WorkingDirectory=/opt/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure
RestartSec=5
# Seguridad
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ReadWritePaths=/var/lib/navidrome
[Install]
WantedBy=multi-user.target
EOF
# Habilitar e iniciar
sudo systemctl daemon-reload
sudo systemctl enable --now navidrome
# Verificar el estado
sudo systemctl status navidrome
Instalación con Docker
# Crear estructura de directorios
mkdir -p ~/navidrome/{data,music}
# Ejecutar con Docker
docker run -d \
--name navidrome \
--restart unless-stopped \
-e ND_LOGLEVEL=info \
-e ND_SCANSCHEDULE="@every 1h" \
-e ND_SESSIONTIMEOUT=24h \
-v ~/navidrome/data:/data \
-v ~/navidrome/music:/music:ro \
-p 4533:4533 \
-u $(id -u):$(id -g) \
deluan/navidrome:latest
Con Docker Compose:
cat > ~/navidrome/docker-compose.yml << 'EOF'
version: '3'
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: "1000:1000"
restart: unless-stopped
environment:
ND_SCANSCHEDULE: "@every 1h"
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
volumes:
- ./data:/data
- ./music:/music:ro
ports:
- 4533:4533
EOF
docker compose up -d
Configuración de la Biblioteca Musical
Navidrome escanea recursivamente el directorio musical configurado. Estructura recomendada:
# Organización recomendada (Artista/Album/Canción)
/mnt/musica/
├── Pink Floyd/
│ ├── The Dark Side of the Moon (1973)/
│ │ ├── 01 - Speak to Me.flac
│ │ ├── 02 - Breathe.flac
│ │ └── cover.jpg
│ └── The Wall (1979)/
│ ├── 01 - In the Flesh.flac
│ └── cover.jpg
├── Radiohead/
│ └── OK Computer (1997)/
│ ├── 01 - Airbag.mp3
│ └── folder.jpg
# Ajustar permisos de la biblioteca musical
sudo chown -R navidrome:navidrome /mnt/musica/
sudo chmod -R 755 /mnt/musica/
# Forzar un escaneo completo de la biblioteca
curl -u admin:contrasena "http://localhost:4533/rest/startScan.view?v=1.16.1&c=scan&f=json"
# Ver el estado del escaneo
curl -u admin:contrasena "http://localhost:4533/rest/getScanStatus.view?v=1.16.1&c=scan&f=json"
Transcodificación de Audio
Navidrome soporta transcodificación en tiempo real usando FFmpeg:
# Verificar que FFmpeg está disponible para Navidrome
which ffmpeg
# Configurar perfiles de transcodificación en navidrome.toml
# Los perfiles permiten convertir FLAC a MP3/AAC para clientes con ancho de banda limitado
Los perfiles de transcodificación se configuran automáticamente. En el panel web (Configuración > Perfiles de Transcodificación) puedes ajustar:
- MP3: Máxima compatibilidad, bitrate configurable (128/192/320 kbps)
- Opus: Mejor calidad a bajo bitrate para móviles
- AAC: Para clientes iOS nativos
# Ejemplo de configuración de transcodificación en navidrome.toml
[Transcoding]
# Perfil para móviles con ancho de banda limitado
# Se activa desde la app cliente al configurar el servidor
MaxBitRate = 320
Gestión de Usuarios
El primer usuario creado al iniciar Navidrome es el administrador:
- Acceder a
http://TU-SERVIDOR:4533 - Crear cuenta de administrador en el primer inicio
- Ir a Configuración > Usuarios para agregar más usuarios
# Navidrome gestiona usuarios a través del panel web
# No hay herramienta CLI de gestión de usuarios
# Para crear usuarios via API Subsonic (compatible)
curl "http://localhost:4533/rest/createUser.view?v=1.16.1&c=admin&f=json" \
-u admin:contrasena \
-d "username=usuario1&password=pass123&[email protected]"
# Listar usuarios
curl "http://localhost:4533/rest/getUsers.view?v=1.16.1&c=admin&f=json" \
-u admin:contrasena | python3 -m json.tool
Aplicaciones Cliente
Navidrome es compatible con todos los clientes que soporten la API Subsonic:
Android:
- DSub (gratuito)
- Ultrasonic (open-source)
- Symfonium (de pago, muy recomendado)
- Substreamer
iOS:
- play:Sub
- Amperfy
- Substreamer
Escritorio:
- Sublime Music (Linux)
- Sonixd (multiplataforma, Electron)
Configuración en el cliente:
- Servidor:
https://musica.tu-dominio.com - Puerto:
443(con proxy SSL) o4533 - Usuario y contraseña de Navidrome
- Versión API:
1.16.1
# Probar la API Subsonic directamente
curl -s "http://localhost:4533/rest/ping.view?v=1.16.1&c=test&f=json" \
-u admin:contrasena | python3 -m json.tool
Proxy Inverso con Nginx
# Instalar Nginx y Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
# Obtener certificado SSL
sudo certbot --nginx -d musica.tu-dominio.com
# Configuración de Nginx para Navidrome
sudo tee /etc/nginx/sites-available/navidrome << 'EOF'
server {
listen 443 ssl http2;
server_name musica.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/musica.tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/musica.tu-dominio.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:4533;
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 https;
# Necesario para streaming de audio
proxy_buffering off;
proxy_read_timeout 600s;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/navidrome /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Solución de Problemas
La biblioteca no se escanea:
# Ver logs de Navidrome
sudo journalctl -u navidrome -f
# Docker:
docker logs navidrome -f
# Verificar permisos del directorio musical
ls -la /mnt/musica/
id navidrome # Verificar UID/GID
# Iniciar escaneo manual desde la API
curl -u admin:pass "http://localhost:4533/rest/startScan.view?v=1.16.1&c=test&f=json"
Problemas de transcodificación:
# Verificar que FFmpeg está instalado y accesible por Navidrome
sudo -u navidrome which ffmpeg
sudo -u navidrome ffmpeg -version
# Ver logs de transcodificación
sudo journalctl -u navidrome | grep -i "transcode\|ffmpeg\|error"
La app cliente no conecta:
# Probar la conexión desde el servidor
curl -s "http://localhost:4533/rest/ping.view?v=1.16.1&c=test&u=admin&p=contrasena&f=json"
# Comprobar que el puerto está abierto
sudo ufw allow 4533/tcp # Si no usas proxy inverso
# o verificar el proxy Nginx
sudo nginx -t
Conclusión
Navidrome es un servidor de música extraordinariamente eficiente que funciona incluso en servidores con recursos limitados. Su compatibilidad con la API Subsonic garantiza acceso desde cualquier cliente popular, y su bajo consumo de recursos lo hace ideal para coexistir con otros servicios en el mismo VPS o servidor baremetal.


