Skip to main content
Une illustration en deux panneaux comparant des solutions d'analytics web. À gauche, un tableau de bord Matomo complexe et encombré étiqueté 'Complexité'. Une flèche lumineuse pointe vers la droite, montrant un tableau de bord Plausible propre et minimaliste avec un bouclier de confidentialité, étiqueté 'Vie privée'. Le texte en bas indique 'Migration vers la Simplicité & la Confidentialité'.

Déployer Plausible avec Docker : Une alternative légère à Matomo

6 min 1,132 words

Mon besoin personnel en Web Analytics

L’analytique web implique la collecte, la mesure et l’analyse des données de comportement des utilisateurs sur un site web. Pour les entreprises construisant des produits grand public, mesurer ces données est crucial. Cela leur permet de surveiller la popularité du produit, suivre les pics d’utilisation et mesurer l’impact des nouvelles fonctionnalités—des précisions qui varient fortement selon l’audience et le type de produit.

Ce n’est pas ma situation. Je tiens un blog, et je veux simplement garder un œil sur le nombre de visites. Mon but est d’avoir une idée approximative de la popularité de mon blog, identifier les articles tendances, et obtenir des aperçus basiques sur la démographie des visiteurs et l’utilisation des navigateurs.

Lorsque l’on cherche des solutions d’analytics, le leader incontesté est Google Analytics. Cependant, comme noté dans cet article, sa part de marché décline, largement dû à des incompatibilités fondamentales avec les régulations modernes de protection des données. Google Analytics (UA/GA4) a fait face à des interdictions dans plusieurs juridictions pour manquement aux standards RGPD fixés par des autorités comme la CNIL entre 2020 et 2023. Par conséquent, les solutions axées sur la vie privée et conformes au RGPD gagnent du terrain. L’une des plus proéminentes est Matomo, une alternative complète à Google Analytics.

Je ne plongerai pas trop profondément dans Matomo, car je ne suis pas un expert et mon cas d’usage est extrêmement basique : suivre le nombre de visiteurs. Je l’ai initialement adopté pour deux raisons principales :

  1. Conformité RGPD : C’est l’une des rares solutions qui ne nécessite pas légalement de bannière de cookies.

  2. Auto-hébergement (Self-Hosting) : Au-delà de ma passion pour l’auto-hébergement, posséder l’infrastructure garantit un contrôle total sur l’utilisation des données visiteurs.

Dans cet article, je détaillerai comment installer Matomo. Ensuite, j’expliquerai pourquoi j’ai finalement cherché une alternative et pourquoi je suis passé à Plausible. Enfin, je fournirai un guide sur comment déployer Plausible sur votre propre infrastructure.

Partie 1 : Matomo

Selon ses créateurs, Matomo est “l’alternative à Google Analytics qui protège vos données et la vie privée de vos clients”. Utilisé par plus d’un million de sites web, il est reconnu comme conforme au RGPD par la CNIL.

Matomo offre à la fois une solution SaaS et une version auto-hébergée sur site (on-premise). J’ai choisi cette dernière. Elle peut être déployée via un script serveur web, un plugin WordPress ou Docker. Je me concentrerai sur l’implémentation Docker utilisant Docker Compose et MariaDB, déployée sur un Raspberry Pi 5 (Raspbian OS Lite 64-bit).

Installation

Voici le docker-compose.yml :

networks:
  matomo_default:

services:
  matomo-db:
    container_name: "matomo-db"
    environment:
      - "MARIADB_AUTO_UPGRADE=1"
      - "MARIADB_DISABLE_UPGRADE_BACKUP=1"
      - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
      - "LANG=C.UTF-8"
    expose:
      - "3306/tcp"
    image: "mariadb:latest"
    networks:
      - "matomo_default"
    restart: "always"
    volumes:
      - "matomo-db:/var/lib/mysql"

  matomo-app:
    container_name: "matomo-app"
    image: "matomo:latest"
    networks:
      - "matomo_default"
    environment:
      - "MATOMO_DATABASE_HOST=matomo-db"
    ports:
      - "8080:80/tcp"
    restart: "always"
    volumes:
      - "matomo-data:/var/www/html"

volumes:
    matomo-db:
    matomo-data:

Vous devez créer un fichier .env contenant un mot de passe root fort pour MariaDB :

MYSQL_ROOT_PASSWORD=un_mot_de_passe_super_fort_et_secret

Note : Si vous préférez lier les volumes à des dossiers locaux de l’hôte, assurez-vous d’assigner la bonne propriété. Pour un dossier nommé matomo-data :

sudo chown -R www-data:www-data matomo-data

Lancez la stack :

docker compose up -d

Ensuite, configurez votre DNS pour pointer votre domaine vers le port 8080 de votre hôte (via reverse proxy). Si vous n’êtes pas familier avec cela, consultez mon guide précédent sur le DNS et le routage.

Astuce : Effectuez l’assistant de configuration via l’URL publique de votre domaine. Cela vous évite d’éditer manuellement les fichiers de config PHP plus tard pour whitelister votre domaine.

Première étape de la configuration MatomoPremière étape de la configuration Matomo

Suivez l’assistant :

  • Serveur de base de données : matomo-db

  • Login : root

  • Mot de passe : (celui de votre fichier .env)

  • Nom de la base de données : matomo

  • Adaptateur : PDO/MYSQL

Deuxième étape de la configuration MatomoDeuxième étape de la configuration Matomo

Créez vos identifiants admin, définissez l’URL de votre site web, et copiez le code de tracking fourni.

Dernière étape de la configuration MatomoDernière étape de la configuration Matomo

Insérez cet extrait dans le <head> de votre site web. Si vous utilisez des en-têtes Content Security Policy (CSP), vous devez whitelister Matomo :

script-src-elem
    ...
    https://matomo.laromierre.com/matomo.js
    https://matomo.laromierre.com/index.php

connect-src
    ...
    https://matomo.laromierre.com/

Pour en savoir plus sur les CSP, voir mon article sur les en-têtes de sécurité Hugo.

Addendum : Politique de Confidentialité

Même avec des outils respectueux de la vie privée, la transparence est clé. Je recommande de rédiger une politique de confidentialité inspirée de la propre politique de Matomo et d’inclure une iframe d’opt-out :

<div id="matomo-opt-out"></div>
<script src="https://my-matomo-site.org/index.php?module=CoreAdminHome&action=optOutJS&div=matomo-opt-out"></script>

Passer de Matomo à Plausible

Matomo est fiable et robuste, mais je l’ai trouvé excessif (“overkill”). Mes besoins sont minimes : pages vues et nombre de visiteurs. Je n’ai pas besoin de funnels complexes ou de heatmaps.

Je voulais quelque chose de léger, compatible Docker, et ultra simple à configurer. Mes recherches m’ont mené à Plausible.

Pourquoi Plausible ?

Plausible se positionne comme une “alternative à Google Analytics facile à utiliser et respectueuse de la vie privée”. Il est :

  1. Open Source : Disponible sur GitHub.

  2. Auto-hébergé : S’intègre à mon infrastructure.

  3. Léger : Le script fait < 1 KB (vs le payload plus lourd de Matomo).

  4. Sans cookies : Il va plus loin que Matomo en n’utilisant aucun cookie.

Matomo vs Plausible : En un coup d’œil

Avant d’installer, voici un récapitulatif rapide de pourquoi Plausible convenait mieux à mes besoins :

FonctionnalitéMatomo (On-Premise)Plausible (Auto-hébergé)
ComplexitéÉlevée (Beaucoup de fonctions)Faible (Métriques essentielles uniquement)
Taille du Script~22 KB< 1 KB
CookiesOui (Peut être désactivé)Non (Sans cookie par design)
Base de donnéesMariaDB/MySQLClickHouse + PostgreSQL
UI/UXDense, type EntreprisePropre, Minimaliste
Utilisation RessourcesModérée à ÉlevéeTrès Faible

Pour une comparaison détaillée (bien que biaisée), consultez Plausible vs Matomo.

Installation et Configuration

Back-end (Docker Compose)

Commencez par cloner la Plausible Community Edition.

Je recommande de renommer compose.yml en docker-compose.yml et de le modifier directement au lieu d’utiliser des fichiers override pour la simplicité. Je recommande fortement d’utiliser un reverse proxy comme Traefik.

Voici un docker-compose.yml rationalisé :

services:
  plausible_db:
    image: postgres:16-alpine
    restart: always
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      start_period: 1m

  plausible_events_db:
    image: clickhouse/clickhouse-server:24.3.3.102-alpine
    restart: always
    volumes:
      - event-data:/var/lib/clickhouse
      - event-logs:/var/log/clickhouse-server
      - ./clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro
      - ./clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro
      - ./clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"]
      start_period: 1m

  plausible:
    image: ghcr.io/plausible/community-edition:v2.1.5
    restart: always
    ports:
      - "80:80"
    command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
    depends_on:
      plausible_db:
        condition: service_healthy
      plausible_events_db:
        condition: service_healthy
    volumes:
      - plausible-data:/var/lib/plausible
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    environment:
      - TMPDIR=/var/lib/plausible/tmp
      - BASE_URL=${BASE_URL}
      - SECRET_KEY_BASE=${SECRET_KEY_BASE}
      - HTTP_PORT=80

volumes:
  db-data:
  event-data:
  event-logs:
  plausible-data:

Lancez la stack :

docker compose up -d

Accédez au tableau de bord via http://<ip-hote> (ou votre domaine configuré) pour créer votre compte.

Écran de configuration PlausibleÉcran de configuration Plausible

(Pour des configurations avancées comme PostgreSQL externe ou Docker Swarm, référez-vous aux extraits dans les blocs de code originaux ci-dessus).

Configuration Front-end

Après avoir configuré votre compte et défini votre domaine, Plausible fournit un snippet :

<script defer data-domain="${label}" src="${plausible_domain}/js/script.js"></script>

En attente de la première page vue
En attente de la première page vue

Intégration avec Hugo

Pour mon blog Hugo, j’ai utilisé le module plausible-hugo, qui simplifie le processus :

  1. Ajouter le module à config.toml :

    [module]
       [[module.imports]]
       path = "github.com/divinerites/plausible-hugo"
  2. Configurer les paramètres :

    [plausible]
        enable = true
        selfhosted_domain = "myplausible.example.com"
        domain = "my-domain-id"
  3. Initialiser :

    hugo mod init github.com/divinerites/plausible-hugo
    hugo mod get -u
  4. Injecter le partial dans votre <head> :

    {{ partial "plausible_head.html" . }}

Si vous hébergez sur Netlify avec des en-têtes CSP, vous devrez “proxifier” les scripts pour éviter les bloqueurs de publicité. Ajoutez ceci à netlify.toml :

[[redirects]]
  from = "/misc/js/script.js"
  to = "https://plausible.io/js/script.js"
  status = 200
  force = true

[[redirects]]
  from = "/misc/api/event"
  to = "https://plausible.io/api/event"
  status = 200
  force = true

Et mettez à jour votre CSP :

script-src-elem https://plausible.laromierre.com/js/script.file-downloads
connect-src https://plausible.laromierre.com

Une fois déployé, visitez votre site, et votre tableau de bord Plausible devrait s’allumer !

Tableau de bord Plausible avec des donnéesTableau de bord Plausible avec des données

Conclusion

Mon parcours de Matomo à Plausible souligne l’importance de choisir le bon outil pour le travail. Les deux sont d’excellentes alternatives à Google Analytics, conformes au RGPD. Cependant, pour un blog personnel ou un petit projet, l’approche légère, orientée vie privée et “set-and-forget” de Plausible en fait le choix supérieur.

Il respecte vos ressources (RAM/CPU) et les données de vos utilisateurs de manière égale. Si vous voulez des analytics qui fonctionnent juste sans le superflu, je recommande vivement de faire le changement.