Installer Piwik sur Debian
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 :
- 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).
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
- Merci aux développeurs de Piwik (en).
- Merci à l'auteur du guide How to setup auto archiving of your reports every night (en).