Déployer Subsonic avec Docker sous Debian 10

Comment déployer Subsonic avec Docker sous Debian 10 ? Introduction :

Subsonic est un logiciel gratuit équivalent à Deezer ou Spotify à installer sur votre serveur. Le problème est que la version 6 ne fonctionne pas correctement après installation. Même sur un système propre ce message d’erreur apparaît :

HTTP ERROR: 503 SERVICE_UNAVAILABLE RequestURI=/ Powered by jetty://

Sur le forum officiel beaucoup de gens se retrouvent dans une situation identique sans de trouver de réponse satisfaisante.

Afin de contourner cette difficulté je me suis tourné vers Docker, histoire que tout faire fonctionner du premier coup.

Qu’est-ce que Docker ?

Docker est un ensemble d’outil permettant de faire fonctionner des applications qui requièrent un environnement particulier que vous ne voudriez ou pourriez pas installer sur votre serveur. Pour résumé une image Docker contiens l’application et tout ce dont vous avez besoin pour la faire fonctionner sans avoir besoin de l’installer en dur sur votre serveur.

installer Subsonic avec Docker
logo Docker

La problématique

Dans mon cas pour installer Subsonic sur Debian il faut préalablement installer Java. La page des instructions à l’installation de Subsonic indique d’installer openjdk-8-jre. Pas de chance sous Debian Buster seule la version 11 d’openjdk est proposé et du coup ça marche pas !

La solution : Déployer Subsonic avec Docker sous Debian 10

La solution est donc de déployer Subsonic avec Docker, de cette façon tous les outils dont Subsonic à besoin seront intégrés au container. Passons aux choses sérieuses.

Installation de Docker

(Toutes les commandes utilisées le sont dans l’environnement utilisateur, j’utilise donc « sudo » )

La documentation officielle (en anglais) vous donnera toutes les indications pour installer docker sur votre Debian. Le lien : https://docs.docker.com/engine/install/debian/

Néanmoins pour facilité le travail à ceux qui ne comprennent pas grand-chose à l’anglais, voici les instructions résumées en français :

D’abord il faut installer quelques dépendances :

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

Ensuite on récupère la clé PGP qui assure que le dépôt est le bon, c’est une sécurité et une étape à ne pas sauter.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Dans la documentation il vous est proposé de contrôler que l’empreinte numérique est la bonne, je saute cette étape-ci.

On ajoute le dépôt Docker à notre Debian :

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"

Enfin on met à jour la liste des paquets contenus dans les dépôts et on installe docker :

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Installation de Subsonic

Pour installer Subsonic à l’aide de Docker, j’ai choisi d’utiliser cette image :

https://hub.docker.com/r/mpaganini/alpine-subsonic

Ce dépôt a été cité dans une conversation sur le forum officiel de Subsonic. Il fonctionne très bien. Bien que sur la page de l’image Docker les instructions soient présente, il manque quelques subtilités.

Installation de Subsonic sous Debian avec Docker
logo Subsonic

Déployer Subsonic avec Docker sous Debian 10 :

On commence par créer un utilisateur nommé « Subsonic ». Dans son dossier personnel nous créerons un dossier Musique qui contiendra tous les fichiers musicaux.

Pour cela la commande « adduser » sera utilisé.

sudo adduser subsonic

Choisissez un mot de passe et connectez-vous avec cet utilisateur sur votre serveur, à partir de là vous allez créer un dossier « Musique ».

mkdir Musique

Enfin il faut modifier l’ « UID » de l’utilisateur nouvellement crée et le définir à 10000.

sudo usermod -u 10000 subsonic

Installation de Subsonic depuis docker :

sudo docker pull mpaganini/alpine-subsonic

Création d’un fichier qui contiendra la base de données Subsonic ainsi que les paramètres.

sudo mkdir /var/subsonic
sudo chown subsonic /var/subsonic
sudo chmod o+rwx /var/subsonic

Enfin on crée le container et on le démarre :

sudo docker run \
--detach \
--publish 4040:4040 \
--volume "/home/subsonic/Musique:/var/music:rw" \
--volume "/var/subsonic:/var/subsonic" \
mpaganini/alpine-subsonic

Par rapport à la documentation officielle j’ai effectué quelques changements dans cette ligne :

–volume “/home/subsonic/Musique:/var/music:rw”

On indique l’emplacement du dossier de stockage des titres musicaux dans le dossier : /home/subsonic/Musique

le dossier /var/music concerne le container docker lui-même

le « rw » signifie que l’on peut écrire dans le dossier.

A ce stade Subsonic devrait fonctionner, en appelant l’ip de votre serveur sur le port 4040.

Cependant cette configuration n’est pas très conviviale et on peut améliorer tout cela en utilisant un nom de domaine, un reverse-proxy pour ne pas choisir le port 4040 et un certificat SSL pour éviter que les navigateurs ne râlent trop.

Installer subsonic sous Debian
logo Debian

Methode pour serveur web sous Apache :

Dans un premier temps faites pointer vers votre serveur votre domaine ou sous-domaine.

Ensuite création d’un hôte virtuel avec proxy inverse. Créer un fichier subsonic..conf dans le répertoire /etc/apache2/sites-available/

sudo nano etc/apache2/sites-available/subsonic.conf

Dans ce fichier recopiez et adaptez les lignes suivantes :

<VirtualHost *:80>
ServerAdmin postmaster@votredomaine
ServerName votredomaine.com
ProxyPass / http://127.0.0.1:4040/
ProxyPassReverse / http://127.0.0.1:4040/
ProxyPreserveHost On
ProxyRequests On
</VirtualHost>

Activez le mode proxy inverse et cette hôte virtuel dans apache :

sudo a2enmod proxy_http
sudo a2ensite subsonic.conf

Maintenant quand vous saisirez le nom de domaine dans votre par d’adresse vous devriez voir la page de connexion à Subsonic sans avoir besoin de saisir le numéro de port. Pour des explications plus détaillées sur la mise en place d’un reverse-proxy je vous recommande cette page : https://www.it-connect.fr/mise-en-place-dun-reverse-proxy-apache-avec-mod_proxy/

Et pour fini le certificat SSL, avec let’s encrypt.

Commencez par installer certbot, un bot qui crée des certificats automatiquement ou presque.

sudo apt-get install certbot python-certbot-apache

lancez la création de votre certificat :

sudo certbot --apache

Suivez les instructions à l’écran

Dans le dossier /etc/apache2/sites-available/. Un nouveau fichier a été créé par certbot, il se nomme subsonic-le-ssl.conf.

Ce fichier devrait contenir les informations suivantes :

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin postmaster@votredomaine
ServerName votredomaine
ProxyPass / http://127.0.0.1:4040/
ProxyPassReverse / http://127.0.0.1:4040/
ProxyPreserveHost Off
ProxyRequests On
SSLCertificateFile /etc/letsencrypt/live/votredomaine/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/votredomaine/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# DO NOT REMOVE - Managed by Certbot, VirtualHost id:  afd0c2c1a4d888fbeca6a4e43bd51577
Header always set Strict-Transport-Security "max-age=900"
</VirtualHost>
</IfModule>

Maintenant vous avez un certificat SSL officiel rattaché à votre instance Subsonic.

N’oubliez pas les sauvegardes, ça fait du boulot quand même.