Airsonic-Advanced es el sucesor de Airsonic, un software de servidor multimedia enfocado en la música. Una de sus principales características es la posibilidad de reproducir música en el hardware de audio que tenga integrado nuestro servidor, por lo que si lo montamos en una Raspberry Pi podremos conectar esta a un amplificador de audio para escuchar nuestra música estando en casa. Para hacerlo funcionar en una Raspberry Pi o cualquier servidor basado en Debian (o Ubuntu) necesitamos instalar Java 11 o superior, lo cual haremos de la siguiente manera en Ubuntu 20.04, Debian 10 y posteriores
sudo apt install default-jre
Si vamos a utilizar la reproducción local necesitamos instalar ALSA
sudo apt install alsa-utils
Abrimos el mezclador de audio
alsamixer
Ajustamos los niveles de volumen y probamos la salida
speaker-test -c2 -twav -l7
Deberíamos escuchar un sonido de prueba
Creamos el directorio de trabajo de Arisonic-Advanced reemplazando $USER y $GROUP por el nombre de usuario y grupo de nuestra preferencia (el cual debe estar dentro del grupo audio para poder utilizar la reproducción local)
sudo mkdir /var/airsonic/
sudo chown -R $USER:$GROUP /var/airsonic/
Buscamos la última versión disponible en el siguiente enlace (recomiendo usar la versión Edge en lugar de la estable) y descargamos el ejecutable .war reemplazando $AIRSONIC_EXECUTABLE por la URL del ejecutable
sudo wget -O /var/airsonic/airsonic.war $AIRSONIC_EXECUTABLE
Creamos el servicio para Systemd
sudo nano /etc/systemd/system/airsonic.service
Colocamos lo siguiente reemplazando $USER y $GROUP por el usuario y grupo asignados
[Unit]
Description=Airsonic Media Server
After=remote-fs.target network.target
AssertPathExists=/var/airsonic
[Service]
Type=simple
Environment="JAVA_JAR=/var/airsonic/airsonic.war"
Environment="JAVA_OPTS=-Xmx700m"
Environment="AIRSONIC_HOME=/var/airsonic"
Environment="PORT=8008"
Environment="CONTEXT_PATH=/airsonic"
Environment="JAVA_ARGS="
EnvironmentFile=-/etc/sysconfig/airsonic
ExecStart=/usr/bin/java \
$JAVA_OPTS \
-Dairsonic.home=${AIRSONIC_HOME} \
-Dserver.servlet.contextPath=${CONTEXT_PATH} \
-Dserver.port=${PORT} \
-jar ${JAVA_JAR} $JAVA_ARGS
User=$USER
Group=$GROUP
# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# for details
DevicePolicy=closed
DeviceAllow=char-alsa rw
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 @privileged @reboot @setuid @swap
ReadWritePaths=/var/airsonic
# You can uncomment the following line if you're not using the jukebox
# This will prevent airsonic from accessing any real (physical) devices
#PrivateDevices=yes
# You can change the following line to `strict` instead of `full`
# if you don't want airsonic to be able to
# write anything on your filesystem outside of AIRSONIC_HOME.
ProtectSystem=full
# You can uncomment the following line if you don't have any media
# in /home/…. This will prevent airsonic from ever reading/writing anything there.
#ProtectHome=true
# You can uncomment the following line if you're not using the OpenJDK.
# This will prevent processes from having a memory zone that is both writeable
# and executeable, making hacker's lifes a bit harder.
#MemoryDenyWriteExecute=yes
[Install]
WantedBy=multi-user.target
Instalamos ffmpeg para que la transcodificación funcione
sudo apt install ffmpeg
sudo mkdir /var/airsonic/transcode
cd /var/airsonic/transcode/
sudo ln -s /usr/bin/ffmpeg
sudo chown -Rh $USER:$GROUP ffmpeg
Configuramos nuestro servidor web existente en caso de necesitar cifrado SSL
En caso de usar Apache necesitamos habilitar los siguientes módulos
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
Nuestro archivo de configuración sería similar a este
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName frank.asgardius.company
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
ProxyPass /airsonic http://127.0.0.1:8008/airsonic
ProxyPassReverse /airsonic http://127.0.0.1:8008/airsonic
RequestHeader set X-Forwarded-Proto "https"
SSLCertificateFile /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/frank.asgardius.company/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
En caso de usar NGINX sería similar a este otro
server {
server_name frank.asgardius.company;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /airsonic {
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;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Host $http_host;
proxy_max_temp_file_size 0;
proxy_pass http://127.0.0.1:8008;
proxy_redirect http:// https://;
}
location ~ /\.ht {
deny all;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/frank.asgardius.company/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = frank.asgardius.company) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name frank.asgardius.company;
return 404; # managed by Certbot
}
Iniciamos Airsonic-Advanced
sudo systemctl daemon-reload
sudo systemctl enable --now airsonic
Después de un par de minutos podremos acceder a nuestra instancia de Airsonic-Advanced desde el navegador accediendo a https://domnio.example.com/airsonic. e iniciamos sesión con el nombre de usuario admin y contraseña admin (la página de inicio de sesión nos lo indica)
Nos vamos a los ajustes en la sección de usuarios. Seleccionamos el usuario inicial y agregamos credenciales nuevas
Nos vamos a sección Credenciales, marcamos la que tiene el ID 0 y la eliminamos. Nos vamos a la sección de carpetas multimedia y agregamos carpetas con música, las escaneamos y le damos acceso a nuestro usuario desde la sección usuarios. Actualmente soporta los formatos mp3, ogg, flac y aac. El codec opus no está soportado
Recomiendo crear una cuenta con privilegios limitados para el uso diario. Es compatible con la mayoría de clientes de Subsonic, yo recomiendo DSub, el cual se puede descargar desde F-Droid o desde su repositorio en Github
Referencias