---
title: "Mettre en place Matomo sur une application Symfony en respectant la RGPD"
excerpt: "La CNIL à rendu l'utilisation de Googe Analytics interdite en France début 2022. Dans cet article nous allons voir comment mettre en place une solution d'Analytics qui respecte la RGPD."
publishDate: 2022-03-04T00:00:00.000Z
tags: ["rgpd", "symfony", "matomo"]
canonical: "https://yoandev.co/mettre-en-place-matomo-sur-une-application-symfony-en-respectant-la-rgpd"
---

<YouTube id="Z9N8keBLkN8" />

## Objectifs

Cela ne vous aura probablement pas échappé, la CNIL à rendu l'utilisation de Googe Analytics interdite en France début 2022.
Dans cet article nous allons voir comment mettre en place une solution d'Analytics qui respecte la RGPD.

Nous allons :

- Déployer en local une instance de Matomo
- Intégrer Matomo à une application Symfony existante
- Ajouter la possibilité aux visiteurs de refuser le tracking

## Le projet Symfony

Pour gagner du temp nous allons utiliser le projet [Demo](https://github.com/symfony/demo) de Symfony.

* Initialisons le projet:

```shell
symfony new --demo matomo-rgpd-symfony
```

* Démarrons le projet

```shell
cd matomo-rgpd-symfony
syùfony serve -d
```

## Mise en route d'une instance Matomo local (avec Docker)

Pour notre démonstration nous allons utiliser une instance local de Matomo (avec Docker).
Pour cela récupérons le fichier ```docker-compose.yml``` et le fichier de variables ```db.env``` proposé par [Matomo](https://github.com/matomo-org/dockers).

```shell
wget https://raw.githubusercontent.com/matomo-org/docker/master/.examples/apache/docker-compose.yml
wget https://raw.githubusercontent.com/matomo-org/docker/master/.examples/apache/db.env
```

Editons le fichier ```docker-compose.yml``` pour ajouter le mot de passe **"password1234"** à la variable  ```MYSQL_ROOT_PASSWORD=```

```yaml
services:
  db:
    image: mariadb
    command: --max-allowed-packet=64MB
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password1234
    env_file:
      - ./db.env
```

Démarrons notre stack Matomo Docker :

```shell
docker-compose up -d
```

Et rendez-vous sur l'url [http://127.0.0.1:8080/](http://127.0.0.1:8080/).

![](./images/2022-02-25-19-58-26.png)

Sur la page de configuration de la base de donnée, utilisons notre user **root** avec le mot de passe **password1234**.

![](./images/2022-02-25-20-00-08.png)

Créons un super-admin ```admin``` avec ```admin1234``` en guise de mot de passe.

![](./images/2022-02-25-20-01-10.png)

Renseignons les infos de notre application **Demo Symfony**.

![](./images/2022-02-25-20-02-16.png)

Matomo, nous propose un *bout de code* à inétgrer dans notre application, cool non !?

![](./images/2022-02-25-20-03-35.png)

En poursuivant la configuration, nous avons un message d'erreur parceque nous ne sommes pas en **HTTPS**. Pour la démo nous allons faire sans.

![](./images/2022-02-25-20-08-20.png)

Modifions le fichier ```/var/www/html/config/config.ini.php``` (à l'intérieur du conteneur, et ne faites jamais ça, c'est juste pour la démo !)

```php
[General]
salt = "2da170d47b6e6be0b0c9b41b9e3bafa1"
trusted_hosts[] = "127.0.0.1"
enable_trusted_host_check=0
```

## Ajoutons Matomo à notre application

Ajoutons le morceau de code proposé par Matomo (et le modifiant légerement, toujours pour **forcer** l'utilisation sans HTTPS) dans notre fichier ```base.html.twig``` (*dans la vraie vie faites plus propre hein, la c'est une démo !*)

```html
<!DOCTYPE html>
<html lang="{{ app.request.locale }}">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <title>{% block title %}Symfony Demo application{% endblock %}</title>
        <link rel="alternate" type="application/rss+xml" title="{{ 'rss.title'|trans }}" href="{{ path('blog_rss') }}">

        {#
            Those two blocks defines frontend entrypoint for CSS and JavaScript assets
            See https://symfony.com/doc/current/frontend.html
        #}
        {% block stylesheets %}
            {{ encore_entry_link_tags('app') }}
        {% endblock %}
        {% block javascripts %}
            {{ encore_entry_script_tags('app') }}
        {% endblock %}

        <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />

        <!-- Matomo -->
        <script type="text/javascript">
        var _paq = window._paq = window._paq || [];
        /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
        _paq.push(['trackPageView']);
        _paq.push(['enableLinkTracking']);
        (function() {
            _paq.push(['setTrackerUrl', 'http://127.0.0.1:8080/matomo.php']);
            _paq.push(['setSiteId', '1']);
            var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
            g.type='text/javascript'; g.async=true; g.src='http://127.0.0.1:8080/matomo.js'; s.parentNode.insertBefore(g,s);
        })();
        </script>
        <!-- End Matomo Code -->

    </head>
```

Nous pouvons constater dans Matomo que nous trackons désormais les visites sur notre application.

![](./images/2022-02-26-19-36-27.png)

![](./images/2022-02-26-19-39-54.png)

## Mise en conformité RGPD avec les recommandations de la CNIl

> L'objectif de cette section est de mettre en place certains paramètres dans Matomo afin d'entrer dans le périmètre d’exemption au recueil du consentementselon les [recommandations de la CNIL](https://www.cnil.fr/sites/default/files/atoms/files/matomo_analytics_-_exemption_-_guide_de_configuration.pdf).

* Suivont **à la lettre** les consignes de la CNIL pour désactiver les exports de données :

  1. Connectez vous en tant que Super User dans Matomo et allez dans Administration.
  2. Dans le menu à gauche, cliquez sur Système puis sur Paramètres généraux.
  3. Dans la page dans la section Live, cliquez sur Disable Visits log & Visitor Profile.
  4. Cliquez sur le bouton Enregistrer.

  ![](./images/2022-03-04-21-07-05.png)

* Permettons aux visiteurs de refuser d’être suivis (Opt-out)

  1. Dans Administration > Vie Privée > Désinscription des utilisateurs
  2. Copier-coller le code HTML

  ```html
  <iframe
        style="border: 0; height: 200px; width: 600px;"
        src="http://127.0.0.1:8080/index.php?module=CoreAdminHome&action=optOut&language=fr&backgroundColor=&fontColor=&fontSize=&fontFamily="
        ></iframe>
  ```
   3. Et copions le sur notresite (idéalement dans une page de politique de confidentialité). Dans notre cas nous copions ce code dans le fichier ```templates/default/homepage.html.twig```

   4. Et vérifions.

   ![](./images/2022-03-04-21-16-16.png)
