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

Installer Ampache sur Debian

Par Pierre-Yves Landuré Dernière modification 29/10/2017 20:31

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 :

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.

Pièces jointes