💾 Archived View for sl1200.dystopic.world › art › tutorial-navidrome.gmi captured on 2022-04-29 at 12:17:27. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2022-04-28)

➡️ Next capture (2023-01-29)

-=-=-=-=-=-=-

Navidrome, servidor de música

04-2022 | #navidrome

Prerrequisitos

En mi caso hago la instalación en mi VPS con Debian 10.

Deberás tener instalado nginx, ffmpeg y cerbot

Instalación

Actualizamos el sistema:

   sudo apt update
   sudo apt upgrade

Creamos los directorios para almacenar el ejecutable de navidrome y el directorio de trabajo, debemos poner el usuario y grupo que corresponda:

   sudo install -d -o <user> -g <group> /opt/navidrome
   sudo install -d -o <user> -g <group> /var/lib/navidrome

Descargamos el programa, lo descomprimimos y configuramos los permisos, cambia v0.XX.0 por la versión actual y pon el usuario y grupo que corresponda:

   wget https://github.com/navidrome/navidrome/releases/download/v0.XX.0/navidrome_0.XX.0_Linux_x86_64.tar.gz -O Navidrome.tar.gz
   sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
   sudo chown -R <user>:<group> /opt/navidrome

Creamos el archivo de configuración navidrome.toml en el directorio /var/lib/navidrome con este contenido en el que indicamos la ruta del directorio en el que guardaremos la música de nuestra colección, por ejemplo en la carpeta musica del usuario:

   MusicFolder = "~/musica"

Creamos el servicio navidrome. En el directorio /etc/systemd/system/ creamos el archivo navidrome.service con este contenido, recuerda poner de nuevo el nombre de usuario y grupo que corresponda:

   [Unit]
   Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
   After=remote-fs.target network.target
   AssertPathExists=/var/lib/navidrome

   [Install]
   WantedBy=multi-user.target

   [Service]
   User=<user>
   Group=<group> 
   Type=simple
   ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
   WorkingDirectory=/var/lib/navidrome
   TimeoutStopSec=20
   KillMode=process
   Restart=on-failure

   # See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
   DevicePolicy=closed
   NoNewPrivileges=yes
   PrivateTmp=yes
   PrivateUsers=yes
   ProtectControlGroups=yes
   ProtectKernelModules=yes
   ProtectKernelTunables=yes
   RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
   RestrictNamespaces=yes
   RestrictRealtime=yes
   SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
   ReadWritePaths=/var/lib/navidrome

   # You can uncomment the following line if you're not using the jukebox This
   # will prevent navidrome from accessing any real (physical) devices
   #PrivateDevices=yes

   # You can change the following line to `strict` instead of `full` if you don't
   # want navidrome to be able to write anything on your filesystem outside of
   # /var/lib/navidrome.
   ProtectSystem=full

   # You can uncomment the following line if you don't have any media in /home/*.
   # This will prevent navidrome from ever reading/writing anything there.
   #ProtectHome=true

   # You can customize some Navidrome config options by setting environment variables here. Ex:
   #Environment=ND_BASEURL="/navidrome"

Iniciamos el servicio Navidrome:

   sudo systemctl daemon-reload
   sudo systemctl start navidrome.service
   sudo systemctl status navidrome.service

Lo configuramos para que el servicio Navidrome se inicie automáticamente al reiniciar el vps:

   sudo systemctl enable navidrome.service

A partir de este momento ya tienes el servicio operativo. Sólo tienes que acceder desde un navegador. Mi dominio por ejemplo es dystopic.world, para acceder deberé ir a dystopic.world:4533 para que acceda al puerto en el que está Navidrome.

No hace falta nada más para que funcione, en los siguientes apartados explicaré como tener el servicio en un subdominio, hacer el proxy para que vaya al puerto que toca y cifrar la comunicación servidor-cliente con un certificado Let's Encrypt.

Configuración de un subdominio http y proxy para el puerto 4533 con nginx

Creamos el archivo music.conf en el directorio /etc/nginx/conf.d con el siguiente contenido, deberás poner el nombre de tu subdominio, en mi caso es music.dystopic.world

   server {
   listen 80;
   server_name music.dystopic.world;
   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;
   }
   }

Después reiniciamos nginx:

   sudo service nginx restart

Ahora ya tenemos operativo el servicio en el subdominio music.dystopic.world y no requerimos detallar el número de puerto, pero seguimos teniendo una comunicación sin cifrar entre cliente y servidor.

Obtención del certificado Let's Encript

Con este sencillo paso dotamos de certificado a nuestro sitio, en este caso music.dystopic.world

   sudo certbot --nginx

Sólo tienes que seguir las instrucciones, si ya tienes una web en nginx sólo te pedirá para qué dominio y subdominio quieres el certificado, si no tienes ninguna web ni servicio te pedirá algún dato más.

Links:

Instalación de Navidrome

Opciones de configuración

Navidrome + nginx

This work by SL1200 is marked with CC0 1.0

◄ BACK

🏠 Home