Reprenez la main sur votre analytics avec Matomo

Installer & configurer matomo


À l'heure ou la guerre fait rage entre l'Union Européenne et les géants du web américains (Google & Facebook), il devient primordial en tant qu'acteur du web, de savoir qui, comment et où vont les données de vos utilisateurs. Le principal canal de collecte de données personnelles restant les collecteurs analytics, on comprend mieux pourquoi google, avec 75% de part de marché grâce au service google analytics devint la cible principale de la CJUE (Cour de Justice de l'Union européenne).


Ce chiffre alarmant pour la Commission européenne est à l'origine d'une flopée de lois et taxes à l'encontre du géant trans-atlantique. En cause, principalement le transfert en masse des données vers les États-Unis. En effet, depuis 2016, la CJEU s'est rendu compte de la dichotomie entre les règles du RGPD, du privacy Shield et autres normes censés protéger la vie privée des Européens et le droit américain. Comme en témoigne, entre autres, l'ingérence avéré et répétée des autorités publiques américaines dans le traitements des données personnelle sur son territoire.


Concrètement, aujourd'hui, le seul moyen de collecter dans les règles de l'art les données analytiques de vos visiteurs reste de le faire vous-même. C'est là qu'intervient Matomo, cette plateforme open source vous offre, d'entrée de jeu les mêmes fonctionnalités que google analytics, en termes de collecter et traitements analytics sans externalisation de services. Vous délestant ainsi de tous ou une grande partie des vérifications nécessaires au respect des normes comme RGPD, pricavy SHIELD, les CCT ( clauses contractuelles types, autorisé par l'arrêté Schrems II du16 juillet 2020). Néanmoins, pour ceux pour des raisons opérationnelles, marketing ont besoin d'externaliser une partie de ces données, vous pourrez toujours le faire. Matomo au travers de ces centaines de plugins gratuits assure une interopérabilité avec l'ensemble acteurs/outils BI du marché, tout en gardant la main sur la nature, le type de données envoyé à ces services.


Maintenant, il est temps de rentrer dans le vif du sujet, l'installation et la configuration de votre instant matomo. Ce tuto s'adresse principalement aux développeurs de votre établissement, si vous n'êtes pas technicien et que vous souhaitez quand même utiliser matomo, vous pouvez soit vous rapprochez de matomo (https://matomo.org/)  notamment leurs services SAAS à partir de 13 euros/mois. Soit nous contacter au travers du formulaire suivant, si vous souhaitez déployer votre propre instance.


Email professionnel

Visites sur les sites qui seront trackés par Matomo

Avant toute chose, il faut s'assurer que votre serveur possède les ressources nécessaires pour lancer une instance matomo. Certains utilisateurs se plaignent des performances de l'outil, souvent parce qu'ils ont soit mal configuré, soit parce qu'ils n'ont pas tenu compte de la symbiose nécessaire entre la volumétrie de leur trafic et la capacité intrinsèque du serveur hébergeant matomo. Ainsi, pour une performance optimale, il faut au minium une machine avec :

 2GB de RAM
 2 CPU
 20GB de SSD en disque dur

Cette configuration vous permettra de suivre les données analytics de plusieurs sites à la fois (test effectué par notre équipe sur 5 sites de plus 30.000 Page views mensuelles).
Autre précision importante, l'installation décrite ci-dessous a été effectuée sur un serveur Ubuntu LTS 18, la procédure restera la même vous la majorité des distros linux.


1- Installation et configuration PHP

Nous allons commencer par installer et configurer php7, nous vous conseillons de faire de même, même si matomo supporte d'autres versions php allant de la 5 à la 8 sous matomo 4. 

sudo apt-get install php7.2 php7.2-curl php7.2-gd php7.2-cli mysql-server php7.2-mysql php-xml php7.2-mbstring 


Il est conseillé de permettre aux scripts php matomo de consommer jusqu'à 1GB de mémoire lors de leurs exécutions, notamment lors de la génération des rapports.

Pour cela il faut modifier le php.ini ( /etc/php/7.2/fpm/php.ini ):

memory_limit = 1G


Matomo & OPCache
Sous php-fpm le caching n'est pas automatiquement activé, même si matomo gère par défaut cette techno.
Il faudra quand  activer cette dernière dans le php_ini si vous voulez jouir de cette fonctionnalité.


2- Installation et configuration de la base de données

Maintenant, nous allons installer et configurer la base de données  percona 5.7 (version conseillée pour des raisons de performance):

 sudo apt-get install gnupg2 unzip
 wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
 sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
 sudo apt-get update
 sudo apt-get install percona-server-server-5.7

Commandes facultatives mais conseillés:

sudo mysql -e "CREATE FUNCTION fnvla_64 RETURNS INTEGER SONAME 'libfnvla_udf.so'"
sudo mysql -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
sudo mysql -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"

Durant l'installation, il vous sera demandé de renseigner les identifiants de l'administrateur (root) de la base de données. Aussi, normalement, après l'installation, la base de données sera automatique en état de marche. Vous pouvez vérifier son état en lançant 

 sudo service mysql status 
 
 ## au cas où le service ne serait pas en marche, le démarré avec:
 sudo service mysql start


Maintenant nous allons configurer l'utilisateur et la base de données matomo.
Tout d'abord se connecter à la base de données avec les identifiants admin renseignés au moment de l'install: 

 EX. sudo mysql -u root -p

Une fois dans mysql lancer les commandes suivantes afin de créer l'utilisateur et la base matomo: 

 mysql> CREATE DATABASE matomo;
 mysql> CREATE USER 'matomo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'votre-mot-de-passe';
 mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK 
        TABLES ON matomo_db_name_here.* TO 'matomo'@'localhost';
 mysql> GRANT FILE ON *.* TO 'matomo'@'localhost';
 mysql> exit;

Il reste plus qu'à tester que l'utilisateur a été correctement crée avec la commande:

$ mysql -u matomo -p



3- Installation des fichiers Matomo

Nous allons procéder à l'installation de Matomo, pour cela, il faut télécharger décompresser le zip  matomo dans le dossier  /var/www/analytics/matomo :

cd /var/www/
mkdir analytics && cd analytics
wget https://builds.matomo.org/matomo.zip
unzip matomo.zip
Ce tutoriel a été réaliser avec la version 3.14.1 de matomo.

4- Configuration du serveur Http Nginx

Il est conseillé d'utiliser les serveurs http nginx et similaires éviter apache, sur les install Matomo.

sudo apt install nginx #(ou nginx-extras)

Ci-joint la configuration du serveur http à adapter à votre environnement notamment pour ce qui est du nom de domain et du certificat ssl:


 Le fichier
/etc/nginx/sites-available/fr.analytics.monsite :

server { 

	root /var/www/analytics/matomo; 

	index index.php; 

	server_name analytics.monsite.fr; 
        
        # A décommenter si un fichier.htpasswd en place
        # location ~ ^/(index.php) {
	#	auth_basic "Restricted";
	#	auth_basic_user_file /etc/nginx/.htpasswd;
	#	include snippets/fastcgi-php.conf; 	
	#	#try_files $fastcgi_script_name =404; 
	#	fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
	#	fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
	# }


	location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs)\.php {
		include snippets/fastcgi-php.conf; 	
		#try_files $fastcgi_script_name =404; 
		fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
	}


	location ~* ^.+\.php$ {
		deny all;
		return 403;
	}


	location / { 
		try_files $uri $uri/ =404; 
	}


	location ~ ^/(config|tmp|core|lang) {
		deny all;
		return 403; # replace with 404 to not show these directories exist
	}


	location ~ /\.ht {
		deny  all;
		return 403;
	}

	location ~ js/container_.*_preview\.js$ {
		expires off;
		add_header Cache-Control 'private, no-cache, no-store';
	}

	location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
		allow all;
		expires 1h;
		add_header Pragma public;
		add_header Cache-Control "public";
	}

	location ~ ^/(libs|vendor|plugins|misc/user|node_modules) {
		deny all;
		return 403;
	}


	location ~/(.*\.md|LEGALNOTICE|LICENSE) {
		default_type text/plain;
	}






	listen 443 ssl http2; 
	access_log /var/log/nginx/matomo.access.log;
	error_log /var/log/nginx/matomo.error.log;


	ssl_certificate /etc/letsencrypt/live/analytics.madit.fr/fullchain.pem; # managed by Certbot
	ssl_certificate_key /etc/letsencrypt/live/analytics.madit.fr/privkey.pem; # managed by Certbot
	#include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
	ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

	include /etc/nginx/matomo-ssl.conf;
	add_header Referrer-Policy origin always; # make sure outgoing links don't show the URL to the Matomo instance
	add_header X-Content-Type-Options "nosniff" always;
	add_header X-XSS-Protection "1; mode=block" always;

} 
server {
    if ($host = analytics.monsite.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

 

  listen 80; 

  server_name analytics.madit.fr;

  location / {
	  return 301 https://analytics.monsite.fr$request_uri;
  }

    return 404; # managed by Certbot


}

Le fichier /etc/nginx/matomo-ssl.conf :

## 
## Modern profile created with the Mozilla SSL Configuration Generator
## Oldest compatible clients: Firefox 27, Chrome 30, IE 11 on Windows 7, Edge, Opera 17, Safari 9, Android 5.0, and Java 8
## If you need to support older clients, create your own config here
## https://mozilla.github.io/server-side-tls/ssl-config-generator/

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# modern configuration. tweak to your needs.
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

# vim: filetype=nginx
Commenter ssl_session_cache shared:SSL:50m; si vous l'avez déjà activer dans nginx.conf ou autres config nginx.

5- Configuration de la géolocalisation
Maintenant nous allons installer les outils qui vont nous permettre d'activer la géolocalisation. Ceci nous permettra de profiter de la fonctionnalité de mapping temps réel :

Dashboard matomo visiteurs temps-réel 

Télécharger le fichier contenant les correspondances IPs / geolocalisation de type maxmind sur le lien suivant GeoLite2-City.tar.gz.
Ensuite installons les outils qui vont nous permettre de compiler la librairie php de gestion geoIp.

Installation de libmaxminddb

$ git clone --recursive https://github.com/maxmind/libmaxminddb
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

Parce que nous allons installer une bdd geoip de type maxmind, il nous faut installer le reader de ce type de fichier au travers de composer.

curl -sS https://getcomposer.org/installer | php
php composer.phar require maxmind-db/reader:~1.0

Installation de MaxMind-DB-Reader-php

Ensuite, il faudra rendre dans le dossier ext dans le vendor créer par composer et lancer les commandes comme suite:

cd vendor/maxmind-db/reader/ext
phpize
./configure
make
sudo make install

Enfin,  il ne reste plus qu'à activer le module php en rajoutant dans le php.ini:

extension=maxminddb.so

Et redémarrer les services php et nginx:

sudo service php7.2-fpm restart
sudo service nginx restart

Automatiquement la configuration adéquate sera activée dans matomo se rendre sur Matomo >settings> geolocalisation pour vérifier:

Configuration geoip dashboard matomo 

 



5- Conclusion

Voilà vous n'avez plus qu'à vous rendre sur le nom de domaine affecté à votre matomo (ex: https://analytics.monsite.fr) et à suivre les instructions pour configurer vos comptes utilisateurs ainsi que les codes de tracking à placer sur vos sites. Voilà bonne chance.

PS: pour générer gratuitement un certificat ssl pour nginx voir ici.