Tutoriales, noticias y soluciones informáticas

PiServer con Docker – Parte 10: Instalación de Navidrome.

Ordenador usando Navidrome

Seguro que después del artículo anterior en el que os expliqué cómo instalar un proxy en vuestro equipo, estáis deseando instalar algo que genere una página web. Voy a cumplir vuestros deseos. Vamos a empezar con una instalación de las más sencillas de este tipo. En esta ocasión instalaremos Navidrome, que se trata de un programa para gestionar nuestra biblioteca de música. Navidrome viene a funcionar de forma similar a Spotify pero autoinstalado. Vas poniendo los álbumes de música en una carpeta y Navidrome te genera una web para escucharlos en línea al estilo Spotify. De hecho si instalas en el móvil la aplicación «Substreamer» (disponible para iOS y Android) puedes tener algo similar a un «spotify» personal y sin anuncios en tu móvil y que puedes escuchar en cualquier lado.

Bah, pues ya me dirás. ¿Qué me da esto que no pueda hacer con spotify?

Pues en primer lugar, que no dependes de un tercero para gestionar la música que te gusta. Pero además no tienes que pagar ningún tipo de suscripción ni tienes que soportar anuncios entre canción y canción, además de poder compartir contenidos con familia y amigos creándoles usuarios.

Pantalla de Navidrome

Aunque voy a ser sincero: empezamos con este Docker en concreto porque es extremadamente simple. Tanto, que vamos a utilizarlo en el próximo tutorial (en el número 11) para «torturarlo» y hacerle la vida imposible. Pero no adelantemos acontecimientos. Vamos a ver cómo podemos hacer la instalación de Navidrome de forma sencilla.

1- Creamos la estructura en la carpeta de Dockers

Desde que empezamos los tutoriales, tenemos una carpeta creada dentro de la carpeta home de nuestro usuario, que se llama Docker. La carpeta es la siguiente:

/home/<tu_usuario>/docker/

Pues bien: vamos a crear dentro de esa carpeta la estructura que necesita Navidrome para funcionar. Crearemos dos carpetas. A la primera la llamaremos «data» (Contendrá cachés y la base de datos) y la segunda la llamaremos «music» (Contiene los archivos de música que vamos a subir a nuestra web). Todo eso lo haremos con estos comandos.

cd docker
mkdir navidrome
cd navidrome
mkdir data && mkdir music

2- Creamos el archivo docker-compose.yml

Dentro de la carpeta «navidrome» vamos a crear el archivo de configuración de este docker compose en concreto. Para ello empezamos a editar el archivo con este comando.

sudo nano docker-compose.yml

Y le pondremos exactamente este contenido (no modifiquéis nada).

version: "3"
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_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - $DOCKERDIR/navidrome/data:/data
      - $DOCKERDIR/navidrome/music:/music:ro

Terminamos la edición pulsando Control + O para guardar los cambios y Control + X para salir del editor nano. Como siempre, hemos definido algunos parámetros en variables de entorno.

3- Creamos el archivo de variables de entorno

En la misma carpeta dónde vive el archivo «docker-compose.yml» vamos a crear un archivo oculto de variables de entorno. Lo empezaremos a editar con este comando:

sudo nano .env

Al archivo le pondremos este contenido (por favor, modifica el nombre de usuario por el usuario de tu equipo).

DOCKERDIR=/home/<tu_usuario>/docker

Al igual que antes, guardamos cambios con Control + O y salimos de nano con Control + X.

4- Protegemos el archivo de variables de entorno.

Para evitar posibles problemas de seguridad, vamos a cambiar los permisos del archivo que acabamos de crear. Le daremos privilegios completos únicamente a nuestro usuario para que pueda operar con él. Lo haremos con el siguiente comando:

sudo chmod 600 .env

5- Desplegamos Navidrome

Desde la carpeta en la que está el archivo docker-compose.yml desplegamos la máquina con el siguiente comando.

sudo docker-compose -p "navidrome" up -d

Después de unos segundos (Este docker se despliega rápido) ya tendremos Navidrome listo para empezar a ser usado.

6- Comprobación del funcionamiento

Si queréis compobar que todo ha ido bien, podéis ir a esta dirección en un navegador de algún ordenador que esté en la misma red local que vuestro servidor.

http://<ip.de.la.raspberry>:4533

La web os invitará a crear un usuario y contraseña y os dejará entrar. Pero evidentemente no habrá música aún dentro de Navidrome. Para ponerla, la forma más sencilla es copiar alguna carpeta con un álbum de música dentro del directorio «music» que hemos creado.

¿Y eso cómo lo hago? Recuerda que mi Raspberry no tiene entorno gráfico. 

Podría hacerse de varias formas, pero la más sencilla es usar WinSCP en Windows (o Cyberduck en Mac, o Filezilla en Linux). Te conectas por SSH a esa carpeta y le subes toda la música que quieras. Luego, en el interface web tendrías que pulsar el icono del electrocardiograma y luego pulsar en el botón de recargar para que se actualicen los cambios en Navidrome. Así podrás ver por fin en Navidrome las carpetas que has subido.

Menú de Navidrome

Con esto ya realizado estoy convenido de que lo que más te importa ahora mismo es asociar este servicio a tu dominio, porque tal y cómo está en estos momentos sólo se puede acceder a él desde la red local. Así que allá vamos.

7- Acceso a través de internet.

Para poder acceder a nuestro servicio por internet, debemos irnos al Nginx Proxy Manager que instalamos en el anterior artículo (o configurar el proxy que tengamos en nuestra red local en caso de que tengamos uno distinto). En el Nginx nos iríamos a «Hosts» y luego a «Proxy Hosts».

Configuración del proxy

En la parte de arriba a la derecha pulsaríamos en «Add Proxy Host» y cubriríamos los campos:

  • Domain name: pondríamos un subdominio de nuestro dominio principal. Algo como «música.midominio.com».
  • Scheme: Poned http
  • Forward Hostname / IP: Poned la ip local de vuestra Raspberry.
  • Forward Port: 4533 (Que es el puerto en el que opera Navidrome por defecto).

Una vez creado el proxy, nos iríamos de nuevo a la configuración de lo que acabamos de hacer y en la pestaña «SSL» configuraríamos el certificado de seguridad de la web.

Si tenéis alguna duda del proceso, consultad de nuevo cómo se configura un proxy que apunte a un sitio web en el anterior artículo.

Con esto nuestro Navidrome debería funcionar ya en nuestro dominio sin problema alguno.

8- Actualización de este Docker.

No tengo ninguna duda de que a estas alturas esta parte podríais resolverla vosotros sólos, pero vamos a repasarla.

Lo que hicimos en su momento para actualizar los Dockers que hemos ido probando fué crear un pequeño bash script que primero nos actualizaba el sistema operativo y luego iba actualizando, uno por uno, todos los dockers que habíamos ido montando.

El archivo del script lo habíamos dejado en nuestra carpeta «home», en /home/<tu_usuario> y lo habíamos llamado actualizar.sh (para modificarlo, como ya sabéis, el comando que deberíais usar es sudo nano actualizar.sh)

Lo que debemos hacer es insertar las siguientes líneas en ese archivo:

cd /home/<tu_usuario>/docker/navidrome
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f

De forma que el archivo final quedaría así (sustituyendo siempre <tu_usuario> por el usuario de la Raspberry en las líneas en las que aparezca):

sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
cd /home/<tu_usuario>/docker/pihole
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/wireguard
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now
cd /home/<tu_usuario>/docker/amule
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now
cd /home/<tu_usuario>/docker/transmission
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/plex
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
cd /home/<tu_usuario>/docker/navidrome
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now

Si Navidrome es el único Docker que os interesa tener en vuestro equipo, el archivo sería bastante más pequeño y quedaría tal que así:

sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
cd /home/<tu_usuario>/docker/navidrome
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
sudo shutdown -r now

Acordaos que si este archivo lo creáis ahora, debéis hacerlo ejecutable con el comando chmod +x actualizar.sh y que para ejecutarlo sólo tenéis que poner en el terminal el comando ./actualizar.sh y en ese momento se actualizará a su última versión tanto el sistema operativo como el docker que acabamos de instalar.

Con esto tenemos ya funcionando a la perfección nuestra primera página web disponible en Internet. Pero… quizá antes de pasar a ver más servicios interesantes que podamos instalar, podemos darle una vuelta a esta instalación de Navidrome. A lo mejor si pensáis un poco , mediante Docker podéis añadir a Navidrome alguna funcionalidad que no tiene implementada por defecto. No os voy a desvelar más. En el próximo artículo estrujaremos un poco este Docker y aprenderemos a hacer muchas cosas interesantes con todos nuestros Dockers.

¿Os ha resultado complicado seguir este artículo? ¿Habéis tenido algún problema con el despliegue de Navidrome? Como siempre, estaré atento a vuestros comentarios.

Share

7 comentarios

  1. Carlos

    Que buena Marcos,
    Deseando empezar cone are docker. Gracias por compartirlo!

  2. Jose Miguel

    Lo que no entiendo es por qué hacemos un reboot en actualizar.sh

    A ver actualizamos el sistema, hacemos limpieza, actualizamos las imágenes y las montamos deshaciéndonos de imágenes viejas. No entiendo qué beneficio trae el reboot salvo que se haya actualizado el kernel. Pero seguro que se me escapa algo, ya me diréis.

    • Carlos

      En ocasiones lanzar el upgrade de raspios exige alguna interacion, osea apretar un ok … por eso creo que es mejor separar la actualizacion de los dockers de la del Sistema Operativo, asi lo dejamos en un crontab y listo.

    • Marcos

      Hago todo esto junto porque lo enfoco a usuarios que no tienen mucha idea de linux en general. Hacer todo eso junto obliga al usuario a actualizar el sistema y todos los dockers. Si le das libertad al usuario, al final dejará cosas sin actualizar y se acaba montando un follón. Por eso hago un script juntando todo.

      Si sabes lo que estás haciendo, lo normal sería actualizar el sistema operativo por un lado y los dockers por el otro, automatizando al menos el tema de los dockers en el crontab (que tampoco lo hago por no complicar el asunto). Tal y cómo dice Carlos, a veces la actualización del sistema operativo te pide aceptar alguna condición y si se automatiza en el crontab pueden quedar componentes sin actualizar o con la actualización hecha a medias. Con los dockers es algo más complicado que esto pase, pero incluso puede que una actualización de un docker en concreto obligue a modificar el docker-compose para que se haga bien (me ha pasado por ejemplo con Vikunja), así que no está de más vigilarlas también. Por eso no doy indicaciones de cómo hacerlas desde el crontab. Prefiero que un usuario que no tenga mucha idea las haga manualmente con ese script, que así tengo la absoluta certeza de que pase lo que pase (aunque se actualice el kernel) la actualización va a llegar a buen término.

      El reboot es conveniente si se actualiza el sistema operativo y no tienes mucha idea de lo que estás haciendo (que es lo que supongo). Si sabes lo que haces, evidentemente muchas veces sabes que no hace falta aplicarle un reinicio al servidor. Pero imagina que un usuario aprendiendo estas cosas empieza a tener errores que se deben a que algún componente crítico se ha actualizado y está esperando un reinicio para funcionar. Meter el reboot en una línea nueva y no darle datos de cómo se pone en el crontab hace que cualquier usuario, por muy novato que sea, pueda hacer la actualización correctamente. No es por otro motivo. Y efectivamente: Si quieres quitar el reboot del scritp e incluso la actualización del sistema operativo es una medida buena si sabes lo que haces.

      • Jose Miguel

        Perfecto, gracias. Lo voy a dejar como está. Tampoco es que un reinicio tarde horrores.

  3. Aglak

    Buenas tardes, cuando dices «Una vez creado el proxy, nos iríamos de nuevo a la configuración de lo que acabamos de hacer y en la pestaña «SSL» configuraríamos el certificado de seguridad de la web», he visto que al ir a configurarlo te da la opción de utilizar uno que ya tienes (en mi caso el del transmission que creamos). Se debe (ya he comprobado que se puede) o conviene crear uno nuevo. Saludos y gracias

    • Marcos

      Si te pasa lo que me indicas, eso significa que el certificado lo has creado anteriormente era para todo tu dominio. Eso no debería ser problema. Si el mismo certificado te permite gestionar todos los dominios que cuelgan de él, entonces perfecto.

      Yo siempre me pongo en el peor de los casos para que el que siga el tutorial pueda terminarlo sí o sí. Por eso siempre voy a decir que creéis un certificado nuevo para cada uno, pero si os sirve el que tenéis, no debería haber problema alguno.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

© 2024 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies