Vous êtes ici : Accueil / Debian GNU/Linux / Applications Web / Multimédia / Installer Koel sur Debian

Installer Koel sur Debian

Par Pierre-Yves Landuré Dernière modification 01/04/2018 11:09

Koel est un serveur de streaming musique écrit en PHP.

Ce guide est testé sur:

  • Debian 9.0 Stretch

Ce guide est testé avec ces versions de Koel:

  • 3.6.2
  • 3.7.2

Pré-requis

Ce guide nécessite:

Paramètres

Renseignez le nom de domaine où sera disponible l'application:

domain="music.domain.com"

Renseignez le nom d'hôte du serveur MySQL:

mysqlHost="localhost"

Si le serveur MySQL n'est pas local, l'outil mysql-tools essaiera de s'y connecter avec le client MySQL, ou, en cas d'échec de connexion, via une connexion SSH.

Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure Créer un certificat SSL / TLS sur Debian ou via Let's Encrypt) (optionnel, recommandé):

sslKeyName="auto"

Renseignez l'identifiant de l'utilisateur d'administration:

adminEmail="firstname.lastname@gmail.com"

Renseignez le chemin du dossier des musiques, pour configurer proprement le module X-SendFile:

musicPath="/var/lib/music"

Services tiers

Renseignez la clef d'API de Last.fm (obtenue via Get an API Account) (optionnel):

# lastfmApiKey="d5df942424c71b754e54ce1832505ae2"
# lastfmApiSecret="34f7c61a85732099bfbf2e3e1c0457d3"

Renseignez la clef d'API de Youtube (obtenue via la création d'un nouveau Projet Google avec l'API YouTube Data API v3):

# youtubeApiKey="AIzaMlDZrElkLoLfAdIvJsLwgbUYgDWzyPl732E"

Installation

Détectez le proxy de commande (command ou sudo):

cmdProxy='command'
command type -f 'sudo' &>'/dev/null' && cmdProxy='sudo'

Déterminez le chemin d'installation:

installPath="/var/lib/koel/${domain}"

Déterminez l'utilisateur pour l'utilisation de composer:

composerUser='composer'

Détectez le nom des paquets PHP disponibles:

phpVersion='5'
if [ -n "$(command apt-cache pkgnames php-cli)" ]; then
phpVersion=''
fi

Générez un mot de passe aléatoire pour l'utilisateur 'admin':

adminPassword="$(command apg -q -a 0 -n 1 -M NCL)"

Déterminez le protocole utilisé par l'application:

proto='http'
if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || sslKeyName = 'auto' ) ]]; then
proto='https'
fi

Assurez-vous que le dossier parent existe:

${cmdProxy} mkdir -p "${installPath}"
${cmdProxy} chown "${composerUser}" "${installPath}"

Préparation de l'environnement

Installez les logiciels nécessaires:

${cmdProxy} apt-get install php${phpVersion}-mysql php${phpVersion}-gd \
php${phpVersion}-mcrypt php${phpVersion}-mbstring php${phpVersion}-zip \
unzip git ffmpeg libapache2-mod-xsendfile inotify-tools findutils

Ajustez la limite mémoire de PHP:

${cmdProxy} php-tools --for=Koel --set=memory_limit 512M

Rechargez la configuration de PHP:

${cmdProxy} php-tools --reload

Activez les modules Apache nécessaires:

${cmdProxy} a2enmod filter setenvif deflate expires rewrite headers xsendfile

Rechargez Apache:

${cmdProxy} service apache2 force-reload

Mise en place de l'application

Téléchargez la dernière version de l'application:

sudo -u "${composerUser}" git clone 'https://github.com/phanan/koel' "${installPath}"

Assurez-vous de disposer de la dernière version de l'application:

pushd "${installPath}"
sudo -u "${composerUser}" git checkout "$(sudo -u "${composerUser}" git tag | tail -n 1)"
popd

Installez les dépendances PHP du logiciel:

sudo -u "${composerUser}" composer --working-dir="${installPath}" install

Création de la base de données

Créez la base de données:

mysqlParams="$(command mysql-tools --server="${mysqlHost}" --with-ssh \
--auto-hosts --db-prefix="koel" --create "${domain}")"

Récupérez les paramètres de la nouvelle base de données:

mysqlDb="$(echo "${mysqlParams}" | command grep -e "^MYSQL_DB" \
    | cut --delimiter="=" --fields="2-")"
mysqlUser="$(echo "${mysqlParams}" | command grep -e "^MYSQL_USER" \
    | cut --delimiter="=" --fields="2-")"
mysqlPassword="$(echo "${mysqlParams}" | command grep -e "^MYSQL_PASSWORD" \
    | cut --delimiter="=" --fields="2-")"
echo "${mysqlParams}"

Configuration de l'application

Mettez à jour la configuration de l'application:

sudo -u "${composerUser}" sed -i \
    -e "s|DB_CONNECTION=.*|DB_CONNECTION=mysql|" \
    -e "s|DB_HOST=.*|DB_HOST=${mysqlHost}|" \
    -e "s|DB_DATABASE=.*|DB_DATABASE=${mysqlDb}|" \
    -e "s|DB_USERNAME=.*|DB_USERNAME=${mysqlUser}|" \
    -e "s|DB_PASSWORD=.*|DB_PASSWORD=${mysqlPassword}|" \
-e "s|APP_URL=.*|APP_URL=${proto}://${domain}|" \
-e "s|STREAMING_METHOD=.*|STREAMING_METHOD=x-sendfile|" \
    -e "s|ADMIN_EMAIL=.*|ADMIN_EMAIL=${adminEmail}|" \
    -e "s|ADMIN_NAME=.*|ADMIN_NAME=admin|" \
    -e "s|ADMIN_PASSWORD=.*|ADMIN_PASSWORD=${adminPassword}|" \
    -e "s|FFMPEG_PATH=.*|FFMPEG_PATH=$(which 'ffmpeg')|" \
    -e "s|LASTFM_API_KEY=.*|LASTFM_API_KEY=${lastfmApiKey}|" \
    -e "s|LASTFM_API_SECRET=.*|LASTFM_API_SECRET=${lastfmApiSecret}|" \
-e "s|YOUTUBE_API_KEY=.*|YOUTUBE_API_KEY=${youtubeApiKey}|" \
-e "s|MAIL_HOST=.*|MAIL_HOST=localhost|" \
  "${installPath}/.env"

Affichez les informations de configuration:

echo "Username: admin
Email: ${adminEmail}
Password: ${adminPassword}
Media path: ${musicPath}"

Initialisez la base de données:

pushd "${installPath}"
sudo -u "${composerUser}" php artisan koel:init

Quittez le dossier:

popd

Autorisez la modification par le serveur des caches et emplacements de données:

while read writeablePath; do
${cmdProxy} chown -R composer:www-data "${installPath}/${writeablePath}"
${cmdProxy} chmod -R g+rw "${installPath}/${writeablePath}"
done <<< "bootstrap/cache
storage
public/img/artists
public/img/covers"

Configurez logrotate pour gérer la rotation des journaux:

${cmdProxy} tee '/etc/logrotate.d/koel' <<< \
"# Logrotate configuration file for Koel \"$(command dirname "${installPath}")/*/storage/logs/*.log\" { weekly missingok rotate 12 copytruncate compress delaycompress create 664 composer www-data
su composer www-data
}"

Mise en place de l'hôte virtuel

Créez la configuration du serveur HTTP pour le domaine:

if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]]; then
  ${cmdProxy} a2tools --ssl="${sslKeyName}" --xsendfile="${musicPath}" --overrides='All' "${domain}" "${installPath}"
else
${cmdProxy} a2tools --xsendfile="${musicPath}" --overrides='All' "${domain}" "${installPath}"
fi

Connectez-vous à l'application en utilisant les informations fournies par:

command echo "http://${domain}/
Login: ${adminEmail}
Password: ${adminPassword}"

Configurez l'emplacement des fichiers musicaux, fourni par la commande:

echo "${musicPath}"

Si le logiciel à des difficultés à recenser le contenu de la bibliothèque musicale via l'interface Web, lancer le recensement en ligne de commande:

pushd "${installPath}"
sudo -u www-data php artisan koel:sync
popd

Surveillance des mises à jour de la bibliothèque musicale

Mettez en place un script cron scannant la totalité de la bibliothèque musicale une fois par semaine:

echo "# Koel cron tasks for ${domain}
0 4 * * 7    www-data    test -e '${installPath}/artisan' -a -x /usr/bin/php && php '${installPath}/artisan' --quiet koel:sync
" | ${cmdProxy} tee "/etc/cron.d/koel-${domain//./-}"

Recharchez la configuration de cron:

${cmdProxy} service cron reload

Mettez en place un service pour surveiller en temps réel les mises à jour dans le dossier des musiques:

${cmdProxy} tee "/etc/systemd/system/koel-${domain//\./-}.service" <<< "[Unit]
Description=koel-${domain//\./-}
Requires=network.target local-fs.target
After=mysql.service postgresql.service


[Install]
WantedBy=multi-user.target

[Service]
User=www-data
Group=www-data
Restart=always

Environment='COMMAND=inotifywait -mrse move,close_write,delete --format \"%e %w%\"\"f\" \"${musicPath}\" | while read file; do php artisan koel:sync \"\${file}\"; done'
ExecStart=/bin/bash -c \${COMMAND}
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s TERM \$MAINPID

WorkingDirectory=${installPath}

PrivateTmp=true"

Activez le service et ajoutez le au démarrage de l'hôte:

${cmdProxy} systemctl daemon-reload
${cmdProxy} systemctl enable "koel-${domain//\./-}"

Démarrez le service:

${cmdProxy} service "koel-${domain//\./-}" start

Sauvegardes

Sauvegardez l'installation avec Backup Manager (voir Installer et configurer Backup Manager sur Debian):

${cmdProxy} backup-manager-tools add "${installPath}"

N'oubliez pas de sauvegarder la base de données (voir Installer et configurer MySQL sur Debian).

Remerciements