Navidrome

Tu propio Spotify Self-Hosted

Roberto Lodeiro

Los servicios de música en streaming están de moda, pero si eres de los que tiene su propia biblioteca de música, esto te va a interesar.

Navidrome es un servidor de música Self-Hosted y Opensource, con cliente web y diversos clientes para dispositivos móviles. Vamos a ver como instalarlo.


1. Instalación

Para la instalación vamos a usar Docker, ya que facilita el despliegue del servicio y configuración del mismo. Si todavía no tiene Docker en tu máquina, puedes leer este post donde explico como instalarlo.

He incluido la configuración de env ND_DEVACTIVITYPANEL=FALSE para que el cliente web funcione de forma fluida, sin esta configuración presentaba grandes problemas el funcionamiento de la interfaz.

Podemos elegir entre docker-compose o la linea de comandos:

1.1 Docker-Compose

version: "3"
services:
    navidrome:
        image: deluan/navidrome:latest
        user: 1000:1000
        ports:
            - "4533:4533"
        restart: always
        environment:
            ND_LOGLEVEL: info 
            ND_DEVACTIVITYPANEL: FALSE
        volumes:
            - "/directorio/de/datos:/data"
            - "/directorio/de/musica:/music:ro"

1.2 Command line tool

$ docker run -d \
--name navidrome \
--restart=always \
--user $(id -u):$(id -g) \
-v /directorio/de/musica:/music \
-v /directorio/de/datos:/data \
-p 4533:4533 \ 
-e ND_LOGLEVEL=info \
-e ND_DEVACTIVITYPANEL=FALSE \
deluan/navidrome:latest

Tenemos que sustituir la ruta de los volúmenes, por un lado data que será donde Navidrome guarde la configuración y otros archivos necesarios, y por otro lado music, que será el directorio donde tenemos que tener toda nuestra biblioteca de música para que Navidrome la indexe y la sirva.

Es importante que el usuario que indiquemos tenga permisos en los directorios especificados para los volúmenes.

2. Interfaz web

Una vez arranque el contenedor, podemos acceder a la interfaz de Navidrome en http://localhost:4533.

Primero nos pedirá crear un usuario admin, desde el cual podremos gestionar todo Navidrome además de comenzar a escuchar nuestra música. Desde este usuario podremos crear todos los usuarios que queramos que usen nuestro servidor.

Una vez configurado, la apariencia será así:

3. Cliente Android/iOS

Navidrome es compatible con cualquiera de los clientes desarrollados para Subsonic o Airsonic.

Tras probar muchos, recomiendo substreamer, está disponible tanto para Android como para iOS, y entre muchas otras cosas permite gestionar la descarga de música para escucharla offline.

4. Nginx reverse proxy

Si queremos usar un nombre de dominio para acceder a nuestro nuevo servidor de música, así como asegurarlo por https, tan solo tenemos que crear un reverse proxy con Nginx.

server {
    listen 80;
    server_name dominio.local;
    # enforce https
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl http2;
    server_name dominio.local;
    ssl_certificate /directorio/certificado.pem;
    ssl_certificate_key /directorio/llave.key;
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        proxy_pass http://localhost: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 $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_buffering off;
    }
}

Tenemos que sustituir el nombre de dominio por el adecuado, así como la ruta y nombre de nuestro certificado ssl.

Con esto, ya estamos listos para disfrutar de nuestra biblioteca de música en todos nuestros dispositivos, tanto online como offline!


Espero que sea útil, ¡gracias por leerme!