meta données pour cette page
Airsonic pour de la musique en streaming
Cet outil est une très bonne substitution à Spotify ou à Google Play Music car il a une interface web pour accéder aux documents multimédia. Il est compatible avec de nombreuses applications fonctionnant sous Android ou Apple. Ainsi, il est par exemple possible avec l'application Subsonic installé sur mon Replicant ( une version Android sans logiciels Google ) de me connecter à Airsonic pour écouter de la musique en streaming en plus d'avoir l'avantage de conserver les données téléchargé tant qu'il ne dépasse pas son quota d'espace disque.
Le bémol : C'est uniquement en lecture seule. Il n'y a donc pas moyen de déplacer ou de supprimer un élément.
Sources :
- Alternative ? https://dadall.info/article623/streamer-sa-musique
Installation
D'abord, nous avons besoin d'installer Java avec quelques librairies :
apt install openjdk-8-jre-headless libjfreechart-java libjackson2-core-java libjackson2-databind-java libspring-web-java libspring-beans-java
Un fois fait, on veut que l'application soit uniquement utilisé par le compte utilisateur www-data et à l'emplacement suivant :
mkdir /var/www/airsonic chown www-data: /var/www/airsonic cd /var/www/airsonic
On télécharge l'application Java :
sudo -u www-data wget https://github.com/airsonic/airsonic/releases/download/v10.1.2/airsonic.war
L'unité systemd
Pour que le service soit lancé proprement au démarrage de la machine, on créé une unité dont voici :
nano /etc/systemd/system/airsonic.service
After=remote-fs.target network.target AssertPathExists=/var/www/airsonic [Service] Type=simple Environment="JAVA_JAR=/var/www/airsonic/airsonic.war" Environment="JAVA_OPTS=-Xmx384m" Environment="AIRSONIC_HOME=/var/www/airsonic" Environment="PORT=4040" Environment="CONTEXT_PATH=/" 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=www-data Group=www-data [Install] WantedBy=multi-user.target
Rapidement, on voit qu'elle contient des variables d'environnements qui seront aussi présent dans le fichier /etc/default/airsonic. On voit aussi que l'unité sera lancé aprs les services réseaux et lancé par l'utilisateur www-data.
Voici le fichier utilisé pour la déclaration des variables :
nano /etc/default/airsonic
JAVA_JAR=/var/www/airsonic/airsonic.war JAVA_OPTS=-Xmx384m AIRSONIC_HOME=/var/www/airsonic PORT=4040 CONTEXT_PATH=/ JAVA_ARGS=--debug JAVA_ARGS=--server.address=127.0.0.1
Celui-ci précise l'emplacement de l'application à lancer, la taille mémoire qu'il peut allouer, son espace de travail, l'IP et le port d'écoute qui sera utilisé une fois l'application lancé. Par ailleurs, le mode débug activé qui aide à la résolution de potentiels problèmes si une configuration est incorrecte.
On recharge la configuration de chaque daemon du système :
systemctl daemon-reload
On peut enfin lancer le programme :
systemctl start airsonic
Le port 4040 sera maintenant accessible en local sur la machine ( http://127.0.0.1:4040 ) . S'il y a des erreurs, elles seront lisible dans ce fichier de log suivant : /var/www/airsonic/airsonic.log
Ajouter un vhost dans Nginx
Pour que l'application soit accessible depuis un nom de domaine ( tel que airsonic.mon-domaine.com ) et via le port 80, on peut utiliser le service Nginx. Je vous laisse gérer le coté DNS où il s'agit seulement de faire pointer le sous-domaine vers l'IP publique du serveur.
Techniquement on va rediriger (proxifier) les requêtes HTTP(S) vers l'application.
On a besoin de ce paquet :
apt install nginx
Et de créér ce vhost :
nano /etc/nginx/sites-enabled/airsonic.mon-domaine.com
Avec ces directives :
server { listen 0.0.0.0:80; listen 0.0.0.0:443 ssl; server_name airsonic.mon-domaine.com; # access_log /var/log/nginx/airsonic.mon-domaine.com.nginx.access; # error_log /var/log/nginx/airsonic.mon-domaine.com.nginx.error; location / { proxy_pass http://127.0.0.1:4040; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_max_temp_file_size 0; } }
On vérifie qu'il n'y a pas d'erreurs de syntaxes et on relance le service!
nginx -t systemctl reload nginx
Cela est maintenant accessible à https://airsonic.mon-domaine.com
Externaliser la BDD dans Postgres
Pour gagner en temps de chargement, on peut utiliser Postgres qui est similaire à Mysql mais avec une meilleure gestion de la mémoire :
apt install postgresql-9.6 postgresql-client-9.6 libpostgresql-jdbc-java
On définit les accès au service :
nano /etc/postgresql/9.6/main/pg_hba.conf
On s'assure de retrouver ces lignes :
local all postgres peer local airsonic airsonic password local all all peer host all all 127.0.0.1/32 md5
On le relance pour qu'il puisse prendre en compte ces changements :
systemctl restart postgresql
On définit un utilisateur, sa base et son accès :
sudo -u postgres createuser -P airsonic sudo -u postgres createdb -O airsonic airsonic sudo -u postgres psql -U airsonic -W GRANT ALL PRIVILEGES ON DATABASE airsonic TO airsonic;
Il reste plus qu'a configurer l'application :
nano /var/www/airsonic/airsonic.properties
On ajoute ceci :
DatabaseConfigType=embed DatabaseConfigEmbedDriver=org.postgresql.Driver DatabaseConfigEmbedUrl=jdbc:postgresql://127.0.0.1:5432/airsonic?stringtype=unspecified DatabaseConfigEmbedUsername=airsonic DatabaseConfigEmbedPassword=airsonic DatabaseUsertableQuote=" DatabaseMysqlMaxlength=512
On a plus qu'a relancer le service et vérifier qu'il ne crache rien de provoquant dans le fichier de log :
systemctl restart airsonic less /var/www/airsonic/airsonic.log