Skip to main content

Navidrome

Qué es Navidrome?

Navidrome es un [servicio] de streaming de música que, esencialmente, lee un directorio o carpetas que le indicamos, recolecta todos los archivos de audio que se encuentran, los organiza por su metadata (la información sobre lx artista, el álbum, el track, etc, que se encuentra dentro del mismo archivo), y nos permite acceder y escuchar nuestra música a través de una interfaz similar a Spotify (con una notable ausencia: las recomendaciones algorítmicas). Soporta un protocolo muy conocido, llamado subSonic, lo que nos permite usar no sólo la interfaz web que el programa trae, sino además varias aplicaciones (de celular o de computadora) para acceder a nuestra librería musical. Si no tenemos [acceso externo] a nuestro servidor, estas aplicaciones muchas veces nos permiten bajar la música que queremos tener a mano, así que también podemos usarlas para llevarnos música para escuchar fuera de casa.

Instalar Navidrome

La instalación de Navidrome es muy simple, ya que la realizamos a través de docker, usando específicamente su plugin docker compose. (Acá podemos ver un desglose básico de cómo funciona el docker compose.)

Crear directorios

Lo primero que vamos a tener que hacer va a ser designar un directorio para muestra música y otra para nuestra data (data, en este caso, refiere a cosas como lxs usuarixs que creemos, las playlist, favoritos, y demás de ellxs, cosas así). El directorio de la música podría ser el que antes definimos a través del lvm (ver en prerrequisitos), o podría ser un directorio nuevo que creemos. Para este ejemplo, vamos a suponer que el directorio para nuestra música se va a encontrar en /mnt/musica, ya que lo creamos para montar un [volumen lógico] específico allí. Nuestro directorio de data lo vamos a crear en nuestro directorio home, en la siguiente dirección: ~/docker/navidrome/data (~ representa el path a nuestro directorio home): mkdir -p docker/navidrome/data

Crear y configurar docker compose

Hechos nuestros directorios de música y data, vamos a crear un archivo llamado docker-compose.yaml. Este archivo lo podemos hacer donde queramos, pero yo normalmente creo un directorio llamado composes en el directorio de docker, y dentro de ese directorio creo directorios con los distintos servicios que voy a subir (ya que el archivo donde vamos a poner el docker compose siempre se va a llamar docker compose):

mkdir -p ~/docker/composes/navidrome
nano ~/docker/composes/navidrome/docker-compose.yaml

Dentro del archivo docker-compose, vamos a copiar lo siguiente:

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    # environment:
      # Optional: put your config options customization here. Examples:
      # ND_LOGLEVEL: debug
    volumes:
      - "/path/to/data:/data"
      - "/path/to/your/music/folder:/music:ro"

Vamos a tener que prestar atención a dos cosas:

  • Que el usuarix 1000 sea dueño de los volúmenes (los directorios) donde almacenemos nuestra música y data
  • Que modifiquemos el path hacia los volúmenes correctamente

Chequear que lx usuarix sea dueñx de los volúmenes

Para chequear que tengamos acceso a los volúmenes vamos a usar el comando chown, que cambia lx dueñx de un archivo o directorio. Lo vamos a usar con la opción -R para asegurarnos de que ese cambio sea recursivo, es decir que también cambie lx dueñx de los directorios y archivos dentro del directorio que indiquemos. En este ejemplo, nuestros directorios a cambiar son ~/docker/navidrome y /mnt/musica, y lx usuarix que queremos que pase a ser su dueño va a ser juli:

sudo chown -R juli:juli ~/docker/navidrome
sudo chown -R juli:juli /mnt/musica

Podemos ver cómo, por ejemplo, lx usuarix juli figura como dueñx de /mnt/musica:

ls_chown_navidrome.png

Indicar los path hacia los volúmenes

Para esto, simplemente vamos a tener que modificar dos líneas de nuestro archivo docker-compose.yaml:

"/path/to/data:/data": Vamos a tener que cambiar /path/to/data al path de nuestra carpeta de data. Para esto recomiendo que usemos paths absolutos, es decir sin usar ni el ~, ni el .. Entonces, si queremos averiguar cuál es el path absoluto hacia nuestro directorio de data, podemos usar cd para dirijirnos ahí y luego el comando pwdpara ver su path:

cd ~/docker/navidrome/data
pwd

Ahora que vimos el path, podemos cambiar la línea (recordá que para abrirlo, o incluso crearlo, tenés que usar el comando nano docker-compose.yaml desde dentro de la carpeta donde se encuentra el archivo):

"/path/to/data:/data" --> "/home/juli/docker/navidrome/data:/data"

Con /mnt/musica no necesitamos hacer esto, ya que como el path comienza con una barra diagonal, sabemos que es un path absoluto.

"/path/to/your/music/folder:/music:ro" --> "/mnt/musica:/music:ro"

Iniciar el contenedor

Cambiadas estas dos líneas, el docker-compose.yaml nos debería haber quedado así:

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    # environment:
      # Optional: put your config options customization here. Examples:
      # ND_LOGLEVEL: debug
    volumes:
      - "/home/juli/docker/navidrome/data:/data"
      - "/mnt/musica:/music:ro"

Ahora, lo único que nos queda es arrancar el servicio. Después de guardar los cambios y salir del archivo, ejecutamos (dentro del directorio donde se encuentra el archivo docker-compose.yaml) el comando docker compose up -d (puede que nos haga algún problema, y si es así, deberíamos correrlo con sudo: sudo docker compose up -d):

Acceder al contenedor y crear usuarix Admin

Una vez creado el contenedor, nuestro serivico ya va a estar corriendo! Podemos acceder a él usando la dirección <ip-del-servidor>:4533 en nuestro navegador de internet:

Como podemos ver, lo primero que nos pide va a ser crear un usuarix admin. Este usuarix es quien va a poder crear nuevas cuentas para otra gente y adminisitrar, por lo general, el servicio.

Y ya estamos! Navidrome está corriendo en nuestro servidor. Desde acá, tenemos varios pasos extra que podríamos llevar a cabo:

  • Instalar algún servicio para procurar música directamente a nuestro servidor
  • Usar Cockpit para trasladar música a nuestro servidor
  • Bajar alguna aplicación de música que utilice subSonic y conectarla al servicio

En principio, ya podés disfrutar de tu spotify casero!