Installer Ampache sur Debian
Ampache est une application Web de streaming audio. C'est un puissant outil de gestion de bibliothèque multimédia en ligne. La musique est accessible depuis tout terminal connecté à Internet. Ce guide aide à son installation sur Debian.
Ce guide a été testé sur:
- Debian 8.0 Jessie
- Debian 9.0 Stretch
Ce guide a été testé avec:
- Ampache 3.8.3
Prérequis
Ce guide nécessite :
- a2tools, l'outil d'administration simplifiée d'Apache 2.
- un serveur HTTP avec support du PHP, comme décrit par Installer PHP-FPM sur Debian.
- php-tools, l'outil de configuration simplifiée de PHP.
- un serveur MySQL, comme décrit par Installer et configurer MySQL sur Debian.
- mysql-tools, l'outil d'administration simplifiée de MySQL sur l'hôte local (et l'hôte du serveur MySQL, si différent).
- les dépôts Debian Multimédia, comme décrit par Configurer les dépôts Debian Multimédia.
- Une installation globale de Composer, comme décrit par Installer Composer sur Debian.
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:
adminUser="admin"
Services tiers
Renseignez la clef d'API de Last.fm (obtenue via Get an API Account) (optionnel):
# lastfmApiKey="d5df942424c71b754e54ce1832505ae2"
# lastfmApiSecret="34f7c61a85732099bfbf2e3e1c0457d3"
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="/opt/ampache/${domain}"
Déterminez le mot de passe de l'utilisateur d'administration:
adminPassword="$(command apg -q -a 0 -n 1 -M NCL)"
Déterminez le chemin des journaux:
logPath="/var/log/ampache/${domain}"
Déterminez le chemin du cache:
cachePath="/var/cache/ampache/${domain}"
Déterminez le chemin des données:
dataPath="/var/lib/ampache/${domain}"
Déterminez l'utilisateur pour l'utilisation de composer:
projectUser='composer'
Déterminez le protocole et le port HTTP du logiciel:
httpPort=80
httpProto='http'
if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]]; then
httpPort=443
httpProto='https'
fi
Détectez le nom des paquets PHP disponibles:
phpVersion='5'
if [ -n "$(command apt-cache pkgnames php-cli)" ]; then
phpVersion=''
fi
Assurez-vous que les dossiers existent:
${cmdProxy} mkdir --parent "${installPath}" "${logPath}" "${cachePath}" "${dataPath}/metadata" "${dataPath}/tmp"
${cmdProxy} chown -R "${projectUser}:${projectUser}" "${installPath}"
${cmdProxy} chown -R ${projectUser}:www-data "${logPath}" "${cachePath}" "${dataPath}"
${cmdProxy} chmod -R g+w "${logPath}" "${cachePath}" "${dataPath}"
Préparation de l'environnement
Installez les logiciels nécessaires:
${cmdProxy} apt-get install php${phpVersion}-mysql php${phpVersion}-xmlrpc \
php${phpVersion}-gd php${phpVersion}-mbstring php${phpVersion}-xml flac \ mp3splt lame faad ffmpeg vorbis-tools git timidity libav-tools \
php${phpVersion}-cli apg unzip sudo
Adaptez la configuration PHP aux besoins de l'outil:
${cmdProxy} php-tools --for="ampache" --set "memory_limit" "128M"
Rechargez la configuration de PHP:
${cmdProxy} php-tools --reload
Mise en place de l'application
Récupérez la dernière version du logiciel:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/various/sf-downloader' \
--quiet --no-check-certificate --output-document='/tmp/sf-downloader'
command chmod +x '/tmp/sf-downloader'
source="$(sudo -u "${projectUser}" /tmp/sf-downloader \
--output-directory="${installPath}" \
--generic='https://github.com/ampache/ampache/releases' \
--strip-components=0 --zip 'ampache' 'ampache-VERSION_all.zip')"
Ajustez les permissions:
sudo -u "${projectUser}" find "${installPath}" -type d -exec chmod go+rx '{}' \+
sudo -u "${projectUser}" find "${installPath}" -type f -exec chmod go+r '{}' \+
Installez les dépendances logicielles à l'aide de Composer:
command pushd "${installPath}"
sudo -u "${projectUser}" composer install --prefer-source --no-interaction
command popd
Mettez en place les fichiers .htaccess:
sudo -u "${projectUser}" ln -s "${installPath}/rest/.htaccess.dist" "${installPath}/rest/.htaccess"
sudo -u "${projectUser}" ln -s "${installPath}/play/.htaccess.dist" "${installPath}/play/.htaccess"
sudo -u "${projectUser}" ln -s "${installPath}/channel/.htaccess.dist" "${installPath}/channel/.htaccess"
Initialisez le fichier de configuration:
sudo -u "${projectUser}" cp "${installPath}/config/ampache.cfg.php.dist" "${installPath}/config/ampache.cfg.php"
Configurez la clef secrète et l'URL du logiciel:
sudo -u "${projectUser}" sed -i \
-e "s|^.*http_host[ =].*|http_host = \"${domain}\"|" \
-e "s|^.*http_port[ =].*|http_port = \"${httpPort}\"|" \
-e "s|^.*local_web_path[ =].*|local_web_path = \"${httpProto}://${domain}\"|" \
-e "s|^.*secret_key[ =].*|secret_key = \"$(command apg -q -a 1 -n 1 -m 32 -x 48 -M 'NCL')\"|" \
"${installPath}/config/ampache.cfg.php"
Configurez l'emplacement des journaux:
sudo -u "${projectUser}" sed -i \
-e "s|^.*log_path[ =].*|log_path = \"${logPath}\"|" \
"${installPath}/config/ampache.cfg.php"
Activez le cookie sécurisé si HTTPS est utilisé:
if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]]; then
sudo -u "${projectUser}" sed -i \
-e "s|^.*session_cookiesecure[ =].*|session_cookiesecure = 1|" \
"${installPath}/config/ampache.cfg.php"
fi
Activez l'import des meta-données personnalisées:
sudo -u "${projectUser}" sed -i \
-e "s|^.*enable_custom_metadata[ =].*|enable_custom_metadata = \"true\"|" \
-e "s|^.*local_metadata_dir[ =].*|local_metadata_dir = \"${dataPath}/metadata\"|" \
-e "s|^.*resize_images[ =].*|resize_images = \"true\"|" \
-e "s|^.*playlist_art[ =].*|playlist_art = \"true\"|" \
-e "s|^.*statistical_graphs[ =].*|statistical_graphs = \"true\"|" \
"${installPath}/config/ampache.cfg.php"
Activez la génération des images de prévisualisation des vidéos:
sudo -u "${projectUser}" sed -i \
-e "s|^.*generate_video_preview[ =].*|generate_video_preview = \"true\"|" \
"${installPath}/config/ampache.cfg.php"
Activez la génération des formes d'ondes:
sudo -u "${projectUser}" sed -i \
-e "s|^.*waveform[ =].*|waveform = \"true\"|" \
-e "s|^.*tmp_dir_path[ =].*|tmp_dir_path = \"${dataPath}/tmp\"|" \
"${installPath}/config/ampache.cfg.php"
Activez le support des Podcasts:
sudo -u "${projectUser}" sed -i \
-e "s|^.*postcast[ =].*|podcast = \"true\"|" \
"${installPath}/config/ampache.cfg.php"
Activez les flux RSS:
sudo -u "${projectUser}" sed -i \
-e "s|^.*use_rss[ =].*|use_rss = \"true\"|" \
"${installPath}/config/ampache.cfg.php"
Mettez en place la clef Last.fm:
if [ -n "${lastfmApiKey}" ]; then
sudo -u "${projectUser}" sed -i \
-e 's|^.*show_similar[ =].*|show_similar = "true"|' \
-e "s|^.*lastfm_api_key[ =].*|lastfm_api_key = \"${lastfmApiKey}\"|" \
-e "s|^.*lastfm_api_secret[ =].*|lastfm_api_secret = \"${lastfmApiSecret}\"|" \
"${installPath}/config/ampache.cfg.php"
fi
Autorisez le téléchargement d'archives Zip des fichiers:
sudo -u "${projectUser}" sed -i \
-e 's|^.*allow_zip_download[ =].*|allow_zip_download = "true"|' \
-e 's|^.*file_zip_download[ =].*|file_zip_download = "true"|' \
-e "s|^.*file_zip_path[ =].*|file_zip_path = \"${cachePath}\"|" \
"${installPath}/config/ampache.cfg.php"
Configurez l'adresse e-mail d'expédition des messages:
sudo -u "${projectUser}" sed -i \
-e 's|^.*mail_user[ =].*|mail_user = "no-reply"|' \
-e "s|^.*mail_domain[ =].*|mail_domain = \"$(command echo "${domain}" | command cut --delimiter='.' --fields=2-)\"|" \
"${installPath}/config/ampache.cfg.php"
Conversion à la volée
Ampache peut convertir à la volée les formats musicaux ne pouvant pas être diffusés en streaming (FLAC, MPC, etc...). Activez la conversion à l'aide de avconv:
sudo -u "${projectUser}" sed -i \
-e 's/^;\(transcode_[a-z0-9]*[ =].*\(allowed\|required\).*\)/\1/' \
-e 's/^;transcode_cmd = "avconv"/transcode_cmd = "avconv"/g' \
-e "s|^.*encode_target[ =].*|encode_target = \"mp3\"|" \
-e "s|^.*encode_video_target[ =].*|encode_video_target = \"webm\"|" \
-e "s|^.*transcode_cmd_mid|transcode_cmd_mid|" \
"${installPath}/config/ampache.cfg.php"
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="ampache" --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}"
Mettez à jour la configuration de l'application:
sudo -u "${projectUser}" sed -i \
-e "s/\(database_hostname[ =]*\).*/\1 \"${mysqlHost}\"/" \
-e "s/\(database_name[ =]*\).*/\1 \"${mysqlDb}\"/" \
-e "s/\(database_username[ =]*\).*/\1 \"${mysqlUser}\"/" \
-e "s/\(database_password[ =]*\).*/\1 \"${mysqlPassword}\"/" \
"${installPath}/config/ampache.cfg.php"
Initialisez le contenu de la base:
command mysql \
--user="${mysqlUser}" \
--password="${mysqlPassword}" \
--host="${mysqlHost}" \
"${mysqlDb}" \
< "${installPath}/sql/ampache.sql"
Mettez à jour la base de données:
sudo -u "${projectUser}" php "${installPath}/bin/install/update_db.inc" --update
Améliorez les réglages par défaut:
while read settingInfos; do
if [[ -n "${settingInfos}" ]]; then
IFS='=' read -r -a setting <<< "${settingInfos}"
command mysql \
--user="${mysqlUser}" \
--password="${mysqlPassword}" \
--host="${mysqlHost}" \
"${mysqlDb}" \
<<< "UPDATE \`user_preference\`
JOIN \`preference\` ON \`user_preference\`.\`preference\` = \`preference\`.\`id\`
SET \`user_preference\`.\`value\`='${setting[1]}'
WHERE \`preference\`.\`name\`='${setting[0]}';"
fi
done <<< "
transcode_bitrate=192
download=1
lang=fr_FR
stream_beautiful_url=1
share=1"
Si le logiciel est installé sur un serveur distant, désactivez la lecture locale au serveur, et la lecture démocratique:
while read settingInfos; do
if [[ -n "${settingInfos}" ]]; then
IFS='=' read -r -a setting <<< "${settingInfos}"
command mysql \
--user="${mysqlUser}" \
--password="${mysqlPassword}" \
--host="${mysqlHost}" \
"${mysqlDb}" \
<<< "UPDATE \`user_preference\`
JOIN \`preference\` ON \`user_preference\`.\`preference\` = \`preference\`.\`id\`
SET \`user_preference\`.\`value\`='${setting[1]}'
WHERE \`preference\`.\`name\`='${setting[0]}';"
fi
done <<< "
allow_democratic_playback=0
allow_localplay_playback=0"
Créez l'utilisateur d'administration:
sudo -u "${projectUser}" php "${installPath}/bin/install/add_user.inc" -u "${adminUser}" -l 100 -p "${adminPassword}"
Supprimez l'outil d'installation:
sudo -u "${projectUser}" rm "${installPath}/install.php" "${installPath}/test.php"
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}" --overrides='All' "${domain}" "${installPath}"
else
${cmdProxy} a2tools --overrides='All' "${domain}" "${installPath}"
fi
Remarque: Le bon fonctionnement de l'application nécessite que l'url "/play" soit disponible via le protocole HTTP. La configuration HTTPS présentée ici réponds à ce besoin.
L'application est maintenant disponible sur le domaine choisi.
Si vous le souhaitez, activez ces plugins pour obtenir des méta données et les couvertures d'albums :
- MusicBrainz
Maintenance quotidienne
Mettez en place un script de mise à jour automatique quotidienne des catalogues du logiciel:
${cmdProxy} tee "/etc/cron.d/ampache-${domain//./-}" \
<<< "# Ampache : catalog maintenance tasks for ${httpProto}://${domain}/
#Usage: catalog_update.inc [CATALOG NAME] [-c|-v|-a|-g|-t]
#if no catalog name is given, catalog_update.inc will act on all availble
#catalogs.
# Default behavior is to do all
# -c Clean Catalogs
# -v Verify Catalogs
# -a Add to Catalogs
# -g Gather Art
# -t Generate Thumbnails
0 3 * * * www-data test -x '/usr/bin/php' -a -e ${installPath}/bin/catalog_update.inc' && /usr/bin/php '${installPath}/bin/catalog_update.inc' -a -c"
Recharchez la configuration de cron:
${cmdProxy} service cron reload
Mise à jour automatique
Mettez en place un script de mise à jour automatique quotidienne du code de l'outil:
echo "#"'!'"/bin/bash
# Update ${domain} source code from Git.
test -x '/usr/bin/git' -a -d '${installPath}' && {
pushd '${installPath}' > '/dev/null'
command git pull --quiet origin master
command git checkout --quiet \"\$(command git tag | command tail -n 1)\" > '/dev/null'
popd > '/dev/null'
command composer --quiet update
test -x '/usr/bin/php' -a -e '${installPath}/bin/install/update_db.inc' \\
&& /usr/bin/php '${installPath}/bin/install/update_db.inc' --update > '/dev/null'
}" \
> "/etc/cron.daily/ampache-${domain//./-}-update"
command chmod +x "/etc/cron.daily/ampache-${domain//./-}-update"
Initialisation
Connectez-vous à l'application en utilisant les informations fournies par:
command echo "http://${domain}/
Login: ${adminUser}
Password: ${adminPassword}"
Vous disposez maintenant d'une installation d'Ampache fonctionnelle. Déposez vos fichiers audio sur le serveur, et configurez les catalogues correspondants.
Sauvegardes
Sauvegardez l'installation avec Backup Manager (voir Installer et configurer Backup Manager sur Debian):
command backup-manager-tools add "${installPath}"
N'oubliez pas de sauvegarder la base de données (voir Installer et configurer MySQL sur Debian).
Pour aller plus loin
Ce guide n'aborde que les fonctionnalités de Streaming d'Ampache. Cette application est aussi capable de lire les fichiers audio et vidéo sur l'ordinateur local. Elle permet de mettre en place une station multimédia contrôlée à distance par le réseau local. Pour obtenir ce résultat, elle s'interface avec des logiciels tels que VLC et MPD. Cette fonctionnalité n'est pas abordée dans ce guide.
Client iOS
il existe 2 clients Ampache pour iOS:
Client GNU/Linux
Il existe des plugins Ampache pour ces logiciels:
- Rhythmbox
- Banshee
Remerciements
- Merci aux développeurs d'Ampache.