Airsonic una manera diferente de escuchar tu música

Airsonic es un transmisor de medios gratuito, de código abierto y multiplataforma basado en la web, derivado de Subsonic y Libresonic, que proporciona acceso ubicuo a tu música que puedes compartir con tu familia, amigos o escuchar música mientras trabajas.

Está optimizado para una navegación eficiente a través de grandes colecciones de música (cientos de gigabytes) y también funciona muy bien como una máquina de discos local. Se ejecuta en la mayoría de las plataformas, incluidos los sistemas operativos similares a Unix, como Linux, Mac OS y Windows.

1.Instalación de Java

Requerimientos:
Debian 10 (Buster)
Conexion de Internet
Almacenamiento 20gb mínimo recomendable
CPU 1 Core
RAM 1 GB

Airsonic es una aplicación de software basada en Java, por lo que se necesita instalar Java en el servidor y requiere OpenJDK 1.8.x. En los repositorios de Buster no lo encontraremos, pero usaremos los de Stretch, solo para instalarlo.

Instalamos la versión de java recomendada para Airsonic. En este caso se usará la versión libre JDK v8, apuntando a los repos de Debian 9 (Stretch), desde nuestro sistema Debian 10 (Buster). Una vez editado el “apt”, proseguimos con la instalación:

apt update
apt install openjdk-8-jdk -y
java -version

Debe devolver lo siguiente:

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1~deb9u1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

Volvemos a especificar los repos de Debian 10 (Buster). Una vez echo actualizamos:

apt update

2.Instalación de Airsonic

Airsonic provee diferentes paquetes de instalación, pero en este caso usaremos la instalación offline de WAR.
Creamos el usuario y directorio para Airsonic:

useradd airsonic
mkdir -p /opt/airsonic

Accedemos al nuevo directorio y bajamos el paquete de instalación de Airsonic:

cd /opt/airsonic
wget https://github.com/airsonic/airsonic/releases/download/v10.6.2/airsonic.war

Cambiamos el propietario del directorio «/opt/airsonic» al usuario y grupo de «airsonic»:

chown -R airsonic:airsonic /opt/airsonic

A continuación, debemos crear un servicio para Airsonic:

nano /etc/systemd/system/airsonic.service

[Unit]
Description=Airsonic Media Server
After=remote-fs.target network.target
AssertPathExists=/opt/airsonic

[Service]
Type=simple
Environment="JAVA_JAR=/opt/airsonic/airsonic.war"
Environment="JAVA_OPTS=-Xmx700m"
Environment="AIRSONIC_HOME=/opt/airsonic"
Environment="PORT=8080"
Environment="CONTEXT_PATH=/airsonic"
Environment="JAVA_ARGS="
EnvironmentFile=/etc/default/airsonic
ExecStart=/usr/bin/java \
          $JAVA_OPTS \
          -Dairsonic.home=${AIRSONIC_HOME} \
          -Dserver.context-path=${CONTEXT_PATH} \
          -Dserver.port=${PORT} \
          -jar ${JAVA_JAR} $JAVA_ARGS
User=airsonic
Group=airsonic

[Install]
WantedBy=multi-user.target

Recargamos el sistema y creamos una nueva configuración por defecto para Airsonic en «/etc/default»:

systemctl daemon-reload

Pasamos la siguiente configuración de Airsonic:

nano /etc/default/airsonic

# Set the location of the standalone war to use
JAVA_JAR=/opt/airsonic/airsonic.war

# Set any java opts separated by spaces
# Se define el consumo maximo de la memoria Java
JAVA_OPTS=-Xmx700m

# Set a different location for the airsonic home.
# If this path is /opt/libresonic or even contains "libresonic",
# the data from a previous libresonic can be used as is (i.e. without
# renaming libresonic.properties,db/libresonic*, etc
AIRSONIC_HOME=/opt/airsonic

# Change the port to listen on
PORT=8080

# Change the path that is listened to on
CONTEXT_PATH=/airsonic

# Add any java args. These are different than JAVA_OPTS in that
# they are passed directly to the program. The default is empty:
#JAVA_ARGS=

# Note that there are several settings for spring boot, not explicitly listed
# here, but can be used in either JAVA_OPTS or JAVA_ARGS. The full list
# can be found here:
# https://docs.spring.io/spring-boot/docs/1.4.5.RELEASE/reference/htmlsingle/#common-application-properties
# For example to set debug across the board:
#JAVA_ARGS=--debug

# Or to change the IP address that is listened to:
JAVA_ARGS=--server.address=127.0.0.1

Ahora iniciaremos el servicio de Airsonic y lo habilitaremos para que inicie con el sistema:

systemctl start airsonic
systemctl enable airsonic

La instalación de Airsonic esta completada y ahora se encuentra corriendo. Podemos verificar esto con el siguiente comando:

netstat -plntu | grep 8080

3. Nginx como proxy inverso

En este tutorial desplegaremos Airsonic bajo una conexión HTTPS contra un proxy inverso en Nginx por el puerto 8080.
Instalamos Nginx:

apt install nginx -y

A continuación, generaremos los certificados SSL auto-firmados con OpenSSL o tambien puedes usar Let’s Encrypt:

openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Respondemos según convenga:

Generating a RSA private key
......................................................................................+++++
..........................................................................................................+++++
writing new private key to '/etc/ssl/private/nginx-selfsigned.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CU
State or Province Name (full name) [Some-State]:HABANA
Locality Name (eg, city) []:LaHabana
Organization Name (eg, company) [Internet Widgits Pty Ltd]:EMPRESA
Organizational Unit Name (eg, section) []:REDES
Common Name (e.g. server FQDN or YOUR name) []:airsonic.empresa.midominio.cu
Email Address []:[email protected]

Ambos archivos que se crearon fueron ubicados en los subdirectorios apropiados de “/etc/ssl”.
Como estamos usando OpenSSL, deberíamos también crear un grupo fuerte de Diffie-Hellman (DH), el cual es usado en la negociación Perfect Forward Secrecy (PFS) con los clientes:

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Primero creamos un nuevo fragmento de configuración de Nginx en el directorio “/etc/nginx/snippets”.

Para distinguir apropiadamente el propósito de este fichero, le llamaremos “self-signed.conf”:

nano /etc/nginx/snippets/self-signed.conf

Dentro de este fichero, necesitamos establecer la directiva “ssl_certificate” a nuestro certificado y la directive “ssl_certificate_key” a la llave asociada. En nuestro caso, esto lucirá así:

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

Creamos el bloque de configuración de Nginx para Airsonic:

nano /etc/nginx/sites-available/airsonic.conf
server {
    listen 80;
    server_name music.empresa.midominio.cu;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen              443 ssl;
    server_name         music.empresa.midominio.cu;
    include snippets/self-signed.conf;
    
    location / {
        return 302 https://music.empresa.midominio.cu/airsonic;
        }

    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:8080;
      proxy_redirect                     http:// https://;
    }
}

Creamos un enlace simbólico para habilitar el sitio:

ln -s /etc/nginx/sites-available/airsonic.conf /etc/nginx/sites-enabled/

Verificamos que la configuración no tiene errores de sintaxis:

nginx -t

Si todo está bien, debe devolvernos lo siguiente:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reiniciamos el servicio:

systemctl restart nginx
systemctl enable nginx

El servidor web Nginx está funcionando ahora como proxy inverso, para el servicio de Airsonic en el puerto 8080, asegurado por la conexión por HTTPS.

4. Configuración de Airsonic

Accedemos a la URL de Airsonic:

https://music.empresa.midominio.cu/airsonic

Nos recibe con una página de autenticación:

Las credenciales por defecto son:

• user: admin
• password: admin

Una vez autenticados podremos ver el dashboard de Airsonic:

Cambiamos la contraseña por defecto para la administración:
Para ello vamos a Settings -> Users -> Select user admin

Devuelta a la consola, creamos los directorios donde se encontrarán los datos de este servicio, o sea, la música:

mkdir -p /data/music
chown -R airsonic:airsonic /data/music

Ahora, sería recomendable que dicho directorio estuviera en un disco de datos y que fuese un volumen lógico que fuera redimensionable. En este tutorial omitiremos este paso y asumiremos que se creó un volumen lógico.

Ahora en el dashboard de administración de Aersonic, en «Settings»:

La carpeta «Music» se encuentra ahora habilitada y disponible para el usuario «admin».

5. Transcodificación

Los transcoders son usados por Airsonic para convertir los medios de su propio disco en uno que pueda ser consumido por varios clientes. Esto se hace no solo por compatibilidad, sino también para salvar ancho de banda cuando se lidia con tipos de archivos pesados.

Instalamos el transcoder:

apt install ffmpeg -y

Dentro del directorio del transcode, creamos un enlace simbólico con ffmpeg y establecemos los permisos correctos:

cd /opt/airsonic/transcode
ln -s /usr/bin/ffmpeg
chown -h airsonic:airsonic ffmpeg
ls -alh

Una vez realizado lo anterior, si accedemos al dashboard de administración de Airsonic, en «Settings > Transcoding», veremos que ya se encuentra disponible esta función:

Podremos configurar algunas opciones generales, como las siguientes:

Transferimos la música por el medio que mejor usted entienda y en la web de administración, forzamos un escaneo para que Airsonic pueda detectar los datos y reproducirlos:

Los invitados que deseen consumir música lo pueden hacer con una cuenta creada previamente en el servidor. A continuación, se muestran los permisos otorgados a un nuevo usuario creado:

Nos autenticamos como un usuario invitado y Airsonic nos da la bienvenida con todos los medios disponibles para ser reproducidos:

Nota: La autenticación por LDAP resulta un trabajo en progreso para el grupo del proyecto. Actualmente, aun cuando se configura correctamente los filtros LDAP y el DN, la autenticación termina en un error del servidor. Por el momento, usuarios locales en Airsonic.

Airsonic da la posibilidad de resetear la contraseña, enviando un correo a la dirección de correo electrónico de la cuenta en cuestión. Sin embargo, cuando se tiene un servidor de correo por STARTTLS y altos niveles de protección, en cuanto a los mecanismos de cifrado, la autenticación del Airsonic con el servidor de correo falla.

Referencias Bibliográficas

1.“How to Install Airsonic Media Server on Ubuntu 18.04 LTS”. About Muhammad Arul.
2.“Documentación official de Airsonic”.
3. “Cómo instalar Airsonic Media Server en CentOS 7”.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.5 / 5. Recuento de votos: 4

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Franco Diaz Hurtado 27 artículos
Ing. Telecomunicaciones y Electrónica; 1er Especialista en Redes de ECASA Nivel Central

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*