Vous êtes ici : Accueil / Debian GNU/Linux / Applications Web / Supervision / Installer Intaro Pinboard sur Debian

Installer Intaro Pinboard sur Debian

Par Pierre-Yves Landuré Dernière modification 16/08/2018 11:09

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:

Ce guide recommande:

    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