Installer Intaro Pinboard sur Debian
Intaro Pinboard est une interface Web permettant de visualiser de manière simple les statistiques générées par Pinba. Elle permet d'identifier rapidement et simplement les pages PHP consommant beaucoup de ressources.
Ce guide est testé sur:
- Debian 7.0 Wheezy
- Debian 9.0 Stretch
Ce guide est testé avec ces versions de Intaro Pinboard:
- 1.5.2
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 disposant de l'engine Pinba, comme décrit par Installer l'engine MySQL Pinba 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).
- Une installation globale de Composer, comme décrit par Installer Composer sur Debian.
Ce guide recommande:
- L'extension Pinba pour PHP, comme décrit par Installer l'extension PHP Pinba sur Debian.
Paramètres
Renseignez le nom de domaine où sera disponible l'application:
domain="pinboard.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"
Paramètres de sécurisation
Renseignez un nom d'utilisateur utilisé pour accéder à l'application (optionnel):
userName="admin"
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/pinboard/${domain}"
Déterminez l'utilisateur pour l'utilisation de composer:
projectUser='composer'
Détectez le nom des paquets PHP disponibles:
phpVersion='5'
if [ -n "$(command apt-cache pkgnames php-cli)" ]; then
phpVersion=''
fi
Assurez-vous que le dossier d'installation existe:
${cmdProxy} mkdir -p "${installPath}"
${cmdProxy} chown "${projectUser}" "${installPath}"
Préparation de l'environnement
Installez les logiciels nécessaires:
${cmdProxy} apt-get install "php${phpVersion}-mysql" "php${phpVersion}-gd" \
"php${phpVersion}-cli" git apg sudo
Rechargez la configuration de PHP:
${cmdProxy} php-tools --reload
Configuration de la base de données
Créez l'utilisateur destiné à accéder à la base de données "pinba" avec mysql-tools:
mysqlParams="$(command mysql-tools --server="${mysqlHost}" --with-ssh \
--auto-hosts --database="pinba" --user-prefix="p" --adduser="${domain}")"
Récupérez les paramètres du nouvel utilisateur:
mysqlDb="$(echo "${mysqlParams}" | command grep -e "^MYSQL_DB" \ | command cut --delimiter="=" --fields="2-")" mysqlUser="$(echo "${mysqlParams}" | command grep -e "^MYSQL_USER" \ | command cut --delimiter="=" --fields="2-")" mysqlPassword="$(echo "${mysqlParams}" | command grep -e "^MYSQL_PASSWORD" \ | command cut --delimiter="=" --fields="2-")" echo "${mysqlParams}"
Mise en place de l'application
Téléchargez la dernière version de l'application:
sudo -u "${projectUser}" git clone 'https://github.com/intaro/pinboard' "${installPath}"
Placez-vous dans le dossier des sources:
command pushd "${installPath}"
Affichez les réponses aux questions posées par l'outil de configuration:
command echo "Settings for pinboard are:
host (localhost): ${mysqlHost}
name (pinba): ${mysqlDb}
user (user): ${mysqlUser}
pass (password): ${mysqlPassword}"
Installez les bibliothèques PHP nécessaires à l'application:
sudo -u "${projectUser}" composer install
Quittez les sources:
command popd
Configuration de l'application
Ajustez les permissions du dossier Command:
${cmdProxy} chown www-data:www-data "${installPath}/src/Pinboard/Command"
Initialisez la base de données:
sudo -u 'www-data' "${installPath}/console" migrations:migrate
Configurez l'agrégation des données (la fréquence doit être similaire à celle de l'option "pinba_stats_history" l'engine Pinba (par défaut 15 minutes)):
${cmdProxy} tee "/etc/cron.d/pinboard-${domain//./-}" \
<<< "*/15 * * * * www-data test -x '${installPath}/console' && ${installPath}/console aggregate > '/dev/null'"
Rechargez la configuration cron:
${cmdProxy} service cron reload
Lancez une première agrégation:
sudo -u 'www-data' "${installPath}/console" 'aggregate'
Sécurisation
Générez un mot de passe aléatoire pour l'utilisateur:
userPassword="$(command apg -q -a 0 -n 1 -M NCL)"
Mettez en place l'utilisateur si nécessaire:
if [ -n "${userName}" ]; then
${cmdProxy} sed -i \
-e '/secure:/,/enable:/{s/enable:.*$/enable: true/}' \
"${installPath}/config/parameters.yml"
${cmdProxy} "${installPath}/console" add-user "${userName}" "${userPassword}"
fi
Si le système utilise PHP FPM, mettez en place le correctif nécessaire:
if [[ -n "$(command ps aux | command grep 'fpm')" && -n "${userName}" ]]; then
${cmdProxy} sed -i -e '/<\/IfModule>/i\
RewriteCond %{HTTP:Authorization} ^(.*)\
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]' \
"${installPath}/web/.htaccess"
fi
Affichez les paramètres de connexion:
if [ -n "${userName}" ]; then
echo "URL: http://${domain}/
Username : ${userName}
Password : ${userPassword}"
fi
Notez les informations obtenues.
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}/web"
else
${cmdProxy} a2tools --overrides='All' "${domain}" "${installPath}/web"
fi
L'outil est maintenant disponible sur le domaine spécifié en HTTP ou HTTPS si possible.
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'
sudo -u '${projectUser}' git pull --quiet > '/dev/null'
command chown www-data:www-data '${installPath}/src/Pinboard/Command'
sudo -u '${projectUser}' php '${installPath}/composer.phar' self-update > '/dev/null'
sudo -u '${projectUser}' php '${installPath}/composer.phar' update > '/dev/null'
sudo -u '${projectUser}' php '${installPath}/console' migrations:migrate <<< 'y' > '/dev/null' 2>&1
popd > '/dev/null'
}" \
| ${cmdProxy} tee "/etc/cron.daily/${domain}-update"
${cmdProxy} chmod +x "/etc/cron.daily/${domain}-update"
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
- Merci aux développeurs de Intaro Pinboard (en).