---
title: "Matomo avec Docker Compose et hébergement en un clic"
description: "Matomo, la mesure d’audience open source, alternative à Google Analytics. Auto-hébergez Matomo On-Premise avec MariaDB et HTTPS en un clic."
---

[← Tous les templates](https://pethost.dev/fr/templates/) · [Audience et monitoring](https://pethost.dev/fr/templates/monitoring/)

# Déployez Matomo en un clic

La mesure d’audience open source, l’alternative à Google Analytics qui garde chaque visite

Une alternative auto-hébergée à Google Analytics.

[Déployer sur Pethost](https://console.pethost.dev/?template=matomo)

## Qu’est-ce que Matomo ?

Matomo est une plateforme open source d’analyse web et l’alternative à Google Analytics la plus connue. Un code de suivi placé sur les pages d’un site enregistre chaque visite, et les rapports montrent les visiteurs, les pages, les pages d’entrée et de sortie, les référents, les moteurs de recherche, les campagnes, les pays, les périphériques, les objectifs et les ventes e-commerce, avec des segments, des annotations, des rapports programmés par e-mail et une API HTTP. Le Journal des Visites et la page « En temps réel » montrent les visites au moment où elles ont lieu, les données ne sont jamais échantillonnées, et Matomo Tag Manager, son gestionnaire de balises, est inclus. Selon Matomo, plus d’un million d’organisations l’utilisent.

Ce template fait tourner Matomo On-Premise, l’édition gratuite sous licence GPL v3, avec l’image officielle et MariaDB. Le Super utilisateur et le premier site web sont créés à partir des champs avant que la page ne réponde à quiconque, si bien que l’installateur de Matomo n’est jamais ouvert à un visiteur. Les adresses IP des visiteurs sont anonymisées, comme Matomo le fait par défaut ; la base de géolocalisation gratuite de DB-IP est téléchargée, puis mise à jour chaque mois ; et un processus d’archivage traite les rapports toutes les 15 minutes, comme le demande la Vérification du système de Matomo. Des plugins payants comme Heatmap & Session Recording, Funnels, A/B Testing et Form Analytics s’obtiennent sur la Marketplace de Matomo.

## Hébergement de Matomo sur Pethost

1. Vous vous connectez à Pethost avec une clé d’accès, GitHub ou Google. Pas encore de machine ? Vous choisissez une offre, et le lien attend qu’elle soit prête.
2. Nouveau projet s’ouvre sur Matomo. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : **Nom d’utilisateur**, **E-mail**, **Mot de passe administrateur**, **Site web à mesurer**.
3. En une minute ou deux, Matomo tourne à sa propre adresse en HTTPS. Ses secrets sont créés au hasard, et ses données sont dans la sauvegarde nocturne.
4. C’est un projet comme les autres : vous ou votre agent pouvez le modifier, revenir à une version précédente ou le restaurer.

## Questions sur Matomo

**Matomo est-il gratuit ?**

Oui. Matomo On-Premise, que ce template fait tourner, est gratuit et open source sous licence GPL v3 ou ultérieure. Matomo Cloud est le service hébergé de son éditeur, et les plugins premium de sa Marketplace sont payants.

**Matomo ou Google Analytics ?**

Les deux mesurent les visites, les sources de trafic, les objectifs et l’e-commerce. Matomo garde chaque visite dans sa propre base de données, là où vous le déployez, sans échantillonnage, et anonymise les adresses IP par défaut. Google Analytics Importer, un plugin gratuit de Matomo, reprend l’historique d’une propriété Google Analytics.

**Faut-il un bandeau cookies avec Matomo ?**

Cela dépend de l’endroit où se trouvent vos visiteurs et de la façon dont Matomo est configuré. Matomo peut mesurer l’audience sans cookies, et sa FAQ liste les conditions dans lesquelles la CNIL française l’autorise à fonctionner sans consentement, comme l’anonymisation des adresses IP et l’absence de Journal des Visites et de User ID. Ailleurs, le consentement peut rester nécessaire.

**Comment ajouter Matomo à mon site web ?**

Sur chaque page, collez avant </head> le code de suivi qu’affiche Administration → Sites web → Code de suivi, ou installez-le avec Matomo Tag Manager. La page des intégrations de Matomo liste des plugins pour WordPress, Drupal, Joomla et bien d’autres plateformes, qui l’ajoutent pour vous.

**Puis-je utiliser mon propre domaine pour Matomo ?**

Oui. Ajoutez le domaine au projet dans Pethost, puis connectez-vous à l’adresse du projet et inscrivez-le dans Administration → Système → Paramètres généraux → Nom d’hôte de confiance de Matomo. D’ici là, Matomo refuse toute connexion sur ce domaine.

**Comment mettre à jour Matomo ?**

Changez le tag de l’image dans compose.yaml pour une version plus récente de Matomo, puis déployez. À son démarrage, le conteneur copie le nouveau Matomo dans son volume et met à jour la base de données, et la configuration, les plugins et les données restent tels qu’ils étaient.

**De combien de mémoire et de disque Matomo a-t-il besoin ?**

Matomo prend environ 250 MB de mémoire au repos avec MariaDB, et sa base de données grossit d’environ 1 GB tous les 5 millions de pages vues, selon l’estimation de Matomo. Sur Pethost, l’offre Starter lui suffit, avec de la place pour d’autres applications à côté.

## Le fichier Docker Compose de Matomo

Le template, c’est ce compose.yaml et les variables écrites dans le .env du projet à sa création. Pethost exécute le fichier tel qu’il est écrit.

**Conteneurs :** matomo (matomo:5.14-apache), archiver (matomo:5.14-apache), mariadb (mariadb:11.8).

**Volumes, dans la sauvegarde nocturne :** matomo, db.

```
services:
  matomo:
    image: matomo:5.14-apache
    restart: unless-stopped
    environment:
      HOST: ${HOST}
      MARIADB_PASSWORD: ${MARIADB_PASSWORD}
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      WEBSITE: ${WEBSITE}
    # Matomo's code is kept in the volume with its config, plugins and data, as the image does.
    # The image copies it there at the first start; this copies it again when the image brings a
    # newer Matomo than the volume holds (Matomo's own one-click update may have put a newer one
    # there already), and then updates the database.
    #
    # A new Matomo offers its installer, which makes the Super User, to whoever opens it first. So
    # while it is not installed, the installer runs on port 8081, which nobody reaches, and is
    # filled in there: the database, the Super User from the username, email and password given,
    # the website to track, and Matomo's own defaults for the rest. Only then does Apache answer
    # on port 80. A refusal stops it and says why in its log, and the installer is tried again at
    # the next start.
    command:
      - sh
      - -c
      - |
        set -e
        cd /var/www/html
        as_matomo() { runuser -u www-data -- "$$@"; }

        version() { sed -n "s/.*const VERSION = '\(.*\)';/\1/p" "$$1/core/Version.php"; }
        if php -r 'exit(version_compare($$argv[1], $$argv[2], ">") ? 0 : 1);' "$$(version /usr/src/matomo)" "$$(version .)"; then
          echo "Matomo $$(version /usr/src/matomo) into the volume, over $$(version .)"
          tar cf - --one-file-system -C /usr/src/matomo . | tar xf -
          chown -R www-data:www-data .
        fi

        # MariaDB may still be starting, as after a restart of the project.
        until php -r 'new PDO("mysql:host=mariadb;dbname=matomo", "matomo", getenv("MARIADB_PASSWORD"));' 2> /dev/null; do sleep 2; done

        installed() {
          php -r '$$c = @parse_ini_file("config/config.ini.php", true);
            exit(!empty($$c["database"]["username"]) && empty($$c["General"]["installation_in_progress"]) ? 0 : 1);'
        }
        if ! installed; then
          echo "installing Matomo on a port nobody reaches"
          as_matomo php -S 127.0.0.1:8081 -t . > /tmp/installer.log 2>&1 &
          installer=$$!
          # Each step is sent as the project's proxy sends a visitor's request, so Matomo sets
          # itself up behind it: the address, HTTPS, and the visitor's IP from X-Forwarded-For.
          step() {
            action=$$1
            shift
            curl -sS -o /tmp/step.html -w '%{http_code}' -H "Host: $$HOST" -H 'X-Forwarded-For: 127.0.0.1' -H 'X-Forwarded-Proto: https' \
              "$$@" "http://127.0.0.1:8081/index.php?module=Installation&action=$$action"
          }
          refused() {
            php -r 'preg_match("~<div class=\"alert alert-(?:warning|danger)\">(.*?)</div>~s", file_get_contents("/tmp/step.html"), $$m);
              fwrite(STDERR, "Matomo refused the " . $$argv[1] . ": " . trim(preg_replace("~\s+~", " ", html_entity_decode(strip_tags($$m[1] ?? "")))) . "\n");' "$$1"
            kill $$installer
            exit 1
          }
          until curl -s -o /dev/null http://127.0.0.1:8081/; do sleep 1; done

          [ "$$(step databaseSetup --data-urlencode host=mariadb --data-urlencode username=matomo --data-urlencode "password=$$MARIADB_PASSWORD" \
            --data-urlencode dbname=matomo --data-urlencode tables_prefix=matomo_ --data-urlencode 'adapter=PDO\MYSQL' --data-urlencode schema=Mariadb)" = 302 ] \
            || refused database
          # The tables, made new, or kept and updated where an earlier start made them.
          step tablesCreation > /dev/null
          step reuseTables > /dev/null
          # A Super User made by an earlier start is kept, and this step skipped.
          [ "$$(step setupSuperUser --data-urlencode "login=$$ADMIN_USERNAME" --data-urlencode "password=$$ADMIN_PASSWORD" \
            --data-urlencode "password_bis=$$ADMIN_PASSWORD" --data-urlencode "email=$$ADMIN_EMAIL")" = 302 ] \
            || refused "Super User"
          case "$$WEBSITE" in
            *://*) website=$$WEBSITE ;;
            *) website=https://$$WEBSITE ;;
          esac
          name=$${website#*://}
          name=$${name%%/*}
          [ "$$(step firstWebsiteSetup --data-urlencode "siteName=$$name" --data-urlencode "url=$$website" \
            --data-urlencode timezone=UTC --data-urlencode ecommerce=0)" = 302 ] \
            || refused website
          # Matomo's defaults: visitors' IPs anonymised, and DB-IP's free location database
          # downloaded now and every month.
          [ "$$(step finished --data-urlencode anonymise_ip=1 --data-urlencode setup_geoip2=1 --data-urlencode submit=1)" = 302 ] \
            || refused settings
          kill $$installer
          wait $$installer 2> /dev/null || true
          # What Matomo's System Check asks for: HTTPS only, which the proxy always serves, and the
          # reports processed by the archiver below rather than as they are opened.
          as_matomo php console config:set --section=General --key=force_ssl --value=1
          as_matomo php console config:set --section=General --key=enable_browser_archiving_triggering --value=0
          echo "Matomo is installed, with the Super User $$ADMIN_USERNAME"
        fi

        as_matomo php console core:update --yes --no-interaction \
          || echo "Matomo's database update failed: its page says how to finish it" >&2
        exec apache2-foreground
    volumes:
      - matomo:/var/www/html
    depends_on:
      mariadb:
        condition: service_healthy

  # Matomo's reports, processed in the background every 15 minutes, as Matomo advises; the Visits
  # Log and Real-time show visits at once. Its own entrypoint, so the image's does not copy Matomo
  # into the volume a second time.
  archiver:
    image: matomo:5.14-apache
    restart: unless-stopped
    init: true
    environment:
      HOST: ${HOST}
    entrypoint:
      - sh
      - -c
      - |
        cd /var/www/html
        while :; do
          if grep -q '^\[database\]' config/config.ini.php 2>/dev/null && ! grep -q '^installation_in_progress' config/config.ini.php; then
            runuser -u www-data -- php console core:archive --url="https://$$HOST/" || true
            sleep 900
          else
            sleep 10
          fi
        done
    volumes:
      - matomo:/var/www/html
    depends_on:
      - matomo

  mariadb:
    image: mariadb:11.8
    restart: unless-stopped
    stop_grace_period: 15s
    # Matomo asks for packets of 64 MB at least.
    command: --max-allowed-packet=64M
    environment:
      MARIADB_AUTO_UPGRADE: "1"
      MARIADB_DATABASE: matomo
      MARIADB_USER: matomo
      MARIADB_PASSWORD: ${MARIADB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
    volumes:
      - db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      timeout: 5s
      retries: 10
      start_period: 30s

volumes:
  matomo:
  db:
```

[compose.yaml](https://pethost.dev/templates/matomo/compose.yaml)[Le voir sur GitHub](https://github.com/pethost-dev/templates/tree/main/matomo)

## [Aussi dans Audience et monitoring](https://pethost.dev/fr/templates/monitoring/)

- [**Umami**Mesure d’audience pour vos sites, sans cookies](https://pethost.dev/fr/templates/umami/)
- [**Uptime Kuma**Surveillance de disponibilité avec alertes et pages de statut](https://pethost.dev/fr/templates/uptime-kuma/)
- [**Kener**Une page de statut avec sondes de disponibilité et incidents](https://pethost.dev/fr/templates/kener/)
- [**Beszel**Une surveillance légère des serveurs : CPU, mémoire, disque, réseau et statistiques Docker, avec historique et alertes](https://pethost.dev/fr/templates/beszel/)
- [**changedetection.io**Surveille des pages web et vous prévient quand elles changent : prix, retours en stock, actualités](https://pethost.dev/fr/templates/changedetection/)
- [**Checkmate**Surveillance de la disponibilité, de la vitesse des pages et des serveurs, avec pages de statut](https://pethost.dev/fr/templates/checkmate/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Templates](https://pethost.dev/fr/templates/)
- [À propos](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/fr/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Conditions](https://pethost.dev/terms/)
- [Confidentialité](https://pethost.dev/privacy/)
- [Remboursements](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bases de données

- [Postgres](https://pethost.dev/fr/postgres/)

Comparatifs

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/fr/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/fr/blog/coolify-cloud-vs-dokploy-cloud/)
- [Tarifs Railway vs Render vs Fly.io](https://pethost.dev/fr/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hébergement Docker Compose managé](https://pethost.dev/fr/blog/managed-docker-compose-hosting/)

Alternatives

- [Alternatives à Railway](https://pethost.dev/fr/blog/railway-alternatives/)
- [Alternatives à Heroku](https://pethost.dev/fr/blog/heroku-alternatives/)
- [Alternatives à Dokploy](https://pethost.dev/fr/blog/dokploy-alternatives/)
- [Alternatives à Coolify](https://pethost.dev/fr/blog/coolify-alternatives/)
- [Alternatives à Render](https://pethost.dev/fr/blog/render-alternatives/)
- [Alternatives à Sliplane](https://pethost.dev/fr/blog/sliplane-alternatives/)
