Introduction
Matomo est une alternative libre à Google Analytics qui permet d’analyser le trafic de votre site Internet. En auto hébergeant Matomo, vous êtes seul propriétaire de toutes les données qui seront collectées. Aucun tiers ne viendra intercepter les données de vos visiteurs. Cela permet d’être conforme au RGPD et de respecter la vie privée de vos visiteurs..
Pour cette installation, j’utilise l’image officielle qui est présente ici : https://github.com/matomo-org/docker.
Remarque : Nous aurons besoin aussi des autres containeurs MariaDB, Swag et Duck DNS (ou un équivalent). Reporter-vous aux 3 articles consacrés en cliquant sur les liens précédents..
Remarque : J’ai créé au préalable un utilisateur omdocker (voir l’article création d’un utilisateur). J’ai créé aussi un répertoire qui contiendra toutes mes installations docker. Dans ce blog, j’utiliserais pour exemple le chemin /volume/docker.
Nous allons créer aussi le répertoire ‘matomo’ en ligne de commande sur le NAS (connexion en SSH) dans notre répertoire docker : /volume/docker. Cette étape est facultative, le containeur créera le répertoire automatiquement lors du déploiement si celui-ci n’existe pas.
mkdir matomo
Le fichier de configuration
Si vous souhaitez sécuriser le lancement de ‘matomo‘, je vous engage à parcourir l’article sécuriser Docker.
Il est important de bien respecter l’indentation des fichiers de configurations : pas de tabulation. Attention aussi à la version du fichier, il y a des légères évolutions de syntaxe d’une version à l’autre.
Le fichier yml en détails. Il faut remplacer pour votre configuration :
- passwd : Le mot de passe ROOT pour acceder à la base de données mariaDB,
- PUID et PGID : celui de votre utilisateur Docker (omdocker pour ce blog),
- TZ : Votre zone de temps,
- /data/docker : Le chemin vers le répertoire de votre application.
Remarque : La containeur ‘matomo’ doit être relier aux réseaux de ‘swag’ et ‘mariadb’. Nous rajoutons donc deux sections réseaux dans le ficher.
version: "2.9"
services:
matomo:
container_name: matomo
image: matomo
restart: always
networks:
- mariadb_default
- swag_default
external_links:
- mariadb
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- MYSQL_ROOT_PASSWORD=passwd
volumes:
- /volume/docker/matomo:/var/www/html
labels:
- com.centurylinklabs.watchtower.monitor-only=true
networks:
swag_default:
external: true
mariadb_default:
external: true
Vous copiez le contenu de ce fichier dans votre interface de gestion Portainer en allant dans ‘Stacks‘ et ‘Add stack‘.
Donnez un nom à votre pile, par exemple ‘matomo‘, puis déployer cotre containeur en cliquant en bas sur ‘Deploy the stack’.
Après une phase de téléchargement de l’image, puis d’installation de l’application, vous devriez arriver sur cet écran si tout s’est bien passé :
Configuration de Swag
La configuration d’un containeur avec ‘swag’ est la plupart du temps très simple. ‘swag’ propose par défaut des fichiers de configurations prédéfinis pour de nombreux services.
Ces fichiers se trouvent dans le répertoire d’installation de swag : /volume/docker/swag/nginx/proxy-confs/
Nous allons simplement recopier ce fichier et le renommer ‘matomo.subdomain.conf’.
cp matomo.subdomain.conf.sample matomo.subdomain.conf
Nous relançons le containeur swag soit via ‘Portainer’, soit en ligne de commande sudo docker restart swag pour qu’il prenne en charge la redirection du containeur ‘matomo’.
Nous pouvons maintenant nous connectez à ‘matomo’ avec l’URL : https//matomo.subdomain.duckdns.org.
Si vous avez oublier une étape (relancer swag, relier votre containeur au réseau swag…) vous risquer de tomber sur cet écran :
Si tout s’est bien passé par contre, vous arriverez sur l’écran d’accueil de configuration de ‘matomo’ :
Nous continuons la configuration de ‘matomo’ qui effectue avec une vérification du système :
Nous arrivons à l’étape de création de la base de données ‘matomo’. Il faudra bien préciser le nom de votre containeur ‘mariadb’ comme adresse de serveur de bases de données. Vous pouvez remplir les champs comme ceci en choisissant un mot de passe pour votre base de données ‘matomo’ :
Une fois la configuration terminée, il est possible qu’une mise à jour de la base de donnée soit nécessaire. Accepter cette mise à jour. Vous devriez après arriver à l’accueil du tableau de bord :
Pour aller plus loin
Configuration de fail2ban
‘fail2ban’ est un analyseur de log qui vise à bannir les adresses IP faisant du spamming sur vos applications hébergées. La configuration se fait au niveau du containeur ‘swag’ en deux étapes. Nous allons l’activer pour ‘matomo’ et bannir les adresses IP après 4 tentatives consécutives infructueuses.
Nous nous déplaçons en premier temps dans le répertoire /volume/docker/swag/fail2ban/filter.d/ et nous créons le fichier ‘matomo.conf’ avec le contenu suivant :
Remarque : Je pars du principe que votre ‘subdomain’ se prénomme ‘matomo’.
[Definition]
failregex = ^<HOST> \- \S+ \[\] \"POST \/.*? \S+\" 403 .+ \"https:\/\/matomo.+\" .+$
ignoreregex =
datepattern = {^LN-BEG}%%ExY(?P<_sep>[-/.])%%m(?P=_sep)%%d[T ]%%H:%%M:%%S(?:[.,]%%f)?(?:\s*%%z)?
^[^\[]*\[({DATE})
{^LN-BEG}
Nous revenons ensuite dans le répertoire parent /volume/docker/swag/fail2ban/ et nous ouvrons le fichier ‘jail.local’ pour lui rajouter le bloc suivant à la fin :
[matomo]
enabled = true
filter = matomo
port = http,https
logpath = /config/log/nginx/access.log
maxretry = 4
Nous relançons le containeur ‘swag’ soit via Portainer, soit en ligne de commande : sudo docker restart swag.
Vérification du système
Nous cliquons sur la roue crantée en haut à droite pour accéder aux paramètres. Il est probable que ‘matomo’ vous indique qu’il a détecté des problèmes dans la configuration initiale. Cliquer sur le lien ‘afficher le rapport complet’ pour avoir le détails des corrections à appliquer :
Intégration de matomo sur votre site Internet
Matomo propose plusieurs méthodes d’intégration à un site web : Par ‘JavaScript’, ou avec une image ou alors avec un code d’API compatible avec les CMS. Pour voir toutes ces méthodes d’intégrations, cliquez sur ‘sites web’, puis ‘code de suivi’.