Vous êtes ici : Accueil / Debian GNU/Linux / Applications Web / Statistiques / Installer Piwik sur Debian

Installer Piwik sur Debian

Par Pierre-Yves Landuré Dernière modification 22/01/2019 09:03

Piwik est un outil de statistiques de fréquentation similaire à Google Analytics. Ce guide facilite son installation sur Debian.

Ce guide est testé sur:

  • Debian 6.0 Squeeze
  • Debian 7.0 wheezy

Ce guide est testé avec ces versions de Piwik:

  • 1.8
  • 1.11.1

Prérequis

Ce guide nécessite :

Paramètres

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

DOMAIN="piwik.domain.com"

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

MYSQL_HOST="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) (optionnel, recommandé):

SSL_KEY_NAME="${DOMAIN}"

Installation

Déterminez le chemin d'installation:

INSTALL_PATH="/opt/piwik/${DOMAIN}"

Déterminez le chemin du cache:

CACHE_PATH="/var/cache/piwik/${DOMAIN}"

Assurez-vous que le dossier parent existe:

command mkdir --parent "$(command dirname "${INSTALL_PATH}")"

Préparation de l'environnement

Installez les logiciels nécessaires:

command apt-get install apg unzip php5-mysql php5-gd php5-cli php5-geoip sudo

Adaptez la configuration PHP aux besoins de l'outil:

command php-tools --for="piwik" --set "memory_limit" "128M"
command php-tools --for="piwik" --fix "always_populate_raw_post_data" "\-1"
command php-tools --for="piwik" --set "suhosin.request.max_value_length" "2048"
command php-tools --for="piwik" --set "suhosin.get.max_value_length" "2048"
command php-tools --for="piwik" --set "xdebug.max_nesting_level" "500"

Rechargez la configuration de PHP:

command php-tools --reload

Mise en place de l'application

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

command wget "https://builds.matomo.org/matomo-latest.zip" \
    --output-document="/tmp/matomo.zip"

Décompressez l'archive:

command unzip -d "/tmp" "/tmp/matomo.zip" "matomo/*"

Supprimez l'archive:

command rm "/tmp/matomo.zip"

Déplacez le dossier obtenu vers son emplacement final:

command mv "/tmp/matomo/" "${INSTALL_PATH}"

Autorisez l'application à modifier ses fichiers de configuration:

command chown -R www-data:www-data "${INSTALL_PATH}/config"

Créez la configuration du serveur HTTP:

if [ -n "${SSL_KEY_NAME}" -a -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then
  command a2tools --ssl="${SSL_KEY_NAME}" "${DOMAIN}" "${INSTALL_PATH}"
fi
command a2tools "${DOMAIN}" "${INSTALL_PATH}"

L'outil est maintenant disponible sur le domaine spécifié en HTTP et HTTPS si possible.

Mise en conformité avec la LSB

Mettez en place une architecture de dossier conforme à la LSB:

command mkdir --parent "$(command dirname "${CACHE_PATH}")"
if [ -d "${INSTALL_PATH}/tmp" ]; then command mv "${INSTALL_PATH}/tmp" "${CACHE_PATH}" command chown -R www-data:www-data "${CACHE_PATH}" command ln -s "${CACHE_PATH}" "${INSTALL_PATH}/tmp" fi

Création de la base de données

Créez la base de données:

command mysql-tools --server="${MYSQL_HOST}" --with-ssh \
--auto-hosts --db-prefix="piwik" --create "${DOMAIN}"

Notez les informations de connexion fournies.

Configuration initiale

Accédez à la configuration initiale de l'outil en utilisant l'URL affichée par:

echo "http://${DOMAIN}/"

Configurez l'outil pour utilisez la base de données crée précédemment.

Important : Afin d'améliorer la sécurité contre les attaques par injection SQL, modifiez le préfixe des tables par une valeur aléatoire telle que générée par:

echo "Table prefix for Piwik : $(command apg -q -a 0 -n 1 -M NCL)_"

Générez un mot de passe aléatoire pour le compte d'administration:

echo "Admin account password : '$(command apg -q -a 0 -n 1 -M NCL)'"

Sécurisation

Une fois l'application correctement configurée, renforcez sa sécurité en retirant l'accès en écriture au dossier config:

command chown -R root:root "${INSTALL_PATH}/config"

Configuration avancée

Les configurations qui suivent nécessitent pour la plupart la présence de la section "[General]" dans le fichier de configuration. Assurez-vous que soit bien le cas:

if [ -z "$(command grep "[General]" "${INSTALL_PATH}/config/config.ini.php")" ]; then
  command echo "
[General]" >> "${INSTALL_PATH}/config/config.ini.php"
fi

Auto-archivage des données

Si les sites analysés génèrent beaucoup de trafic, il est préférable de configurer l'archivage régulier des données afin que ces dernières soient exploitables depuis l'interface de l'outil.

Configurez le script d'archivage dans le dossier cron.hourly afin qu'il soit exécuté toutes les heures :

command touch "/var/log/piwik-archive-${DOMAIN}.log"
command chown www-data:adm "/var/log/piwik-archive-${DOMAIN}.log"
CLEAN_DOMAIN="$(echo "${DOMAIN}" | command tr '.' '-')" echo -e "# Hourly archiving for ${DOMAIN}. 0 * * * * www-data test -f ${INSTALL_PATH}/console -a -x /usr/bin/php5 && /usr/bin/php5 ${INSTALL_PATH}/console core:archive --url='http://${DOMAIN}' > '/var/log/piwik-archive-${DOMAIN}.log'" \ > "/etc/cron.d/${CLEAN_DOMAIN}" command service 'cron' 'reload'

Vérifiez que le script d'archivage fonctionne correctement:

sudo -u 'www-data' /bin/sh ${INSTALL_PATH}/misc/cron/archive.sh

Désactivation de l'archivage par l'interface Web

Si les sites analysés génèrent de nombreuses visites, il est recommandé de désactiver l'archivage des données lorsqu'un utilisateur utilise l'interface Web :

command sed -i -e '/\[General\]/a\
time_before_archive_considered_outdated = 3600 \
enable_browser_archiving_triggering = false' \
    "${INSTALL_PATH}/config/config.ini.php"

Forcer l'utilisation du HTTPS pour l'identification

Si possible (accès HTTPS configuré), forcez l'utilisation du protocole HTTPS pour l'identification des utilisateurs:

command sed -i -e '/\[General\]/a\
force_ssl = 1' \
    "${INSTALL_PATH}/config/config.ini.php"

Fonctionnement derrière un reverse proxy

Si vous utilisez un reverse proxy, configurez l'outil pour récupérer l'adresse IP des visiteurs dans l'entête HTTP XForwardedFor:

command sed -i -e '/\[General\]/a\
proxy_client_headers[] = "HTTP_X_FORWARDED_FOR"' \
    "${INSTALL_PATH}/config/config.ini.php"

Une alternative possible si l'outil est hébergé sur un serveur Apache 2 est de suivre le guide Obtenir l'adresse IP réelle d'un visiteur accédant à un serveur Apache 2 à travers un reverse proxy.

Si le reverse proxy supporte le HTTPS, indiquez le à l'outil:

command sed -i -e '/\[General\]/a\
assume_secure_protocol = 1' \
    "${INSTALL_PATH}/config/config.ini.php"

Sauvegardes

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

command backup-manager-tools add "${INSTALL_PATH}"

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

Mise à jour

Renseignez le domaine de l'installation obsolète:

DOMAIN="piwik.domain.com"

Déterminez le chemin d'installation:

INSTALL_PATH="/opt/piwik/${DOMAIN}"

Nettoyez le chemin:

INSTALL_PATH="$(echo "${INSTALL_PATH}" | sed -e 's|/$||g')"

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

command wget 'https://builds.matomo.org/matomo-latest.zip' \
    --output-document='/tmp/matomo.zip'

Décompressez l'archive:

command unzip -d "/tmp" "/tmp/matomo.zip" "matomo/*"

Récupérez le fichier de configuration et le dossier cache:

command cp -a "${INSTALL_PATH}/config/config.ini.php" "/tmp/matomo/config/"
command rm -r "/tmp/matomo/tmp"
command cp -a "${INSTALL_PATH}/tmp" "/tmp/matomo/tmp"

Sauvegardez l'installation mise à jour:

command mv "${INSTALL_PATH}" "${INSTALL_PATH}.old"

Mettez en place la nouvelle version:

command mv "/tmp/matomo" "${INSTALL_PATH}"

Mettez à jour la base de données:

if [[ -e "${INSTALL_PATH}/console" ]]; then
sudo -u 'www-data' php "${INSTALL_PATH}/console" core:update
else
sudo -u 'www-data' php "${INSTALL_PATH}/index.php" -- 'module=CoreUpdater'
fi

L'application est maintenant à jour. Videz le cache PHP:

command php-tools --reload

Vérifiez que tout fonctionne correctement, et effacez les fichiers téléchargés et la sauvegarde:

command rm "/tmp/piwik.zip"
command rm -r "${INSTALL_PATH}.old"

Remerciements