Thibault Mocellin

Thibault Mocellin

Développeur Full-Stack freelance basé à Annecy 🇫🇷

Utiliser Piwik avec Docker

Posted on June 14, 2017

Lorsqu’il s’agit de mesurer le traffic de son site internet on connaît tous les leaders qui proposent des outils d’analytics comme Google ou bien MixPanel et d’autres encore, mais il existe aussi d’autres alternatives comme Piwik par exemple.

Pour ceux qui ne connaitraient pas Piwik, c’est un outil d’analytics open-source que vous pouvez installer directement sur votre serveur ce qui vous permet de garder un accès total sur vos données.

Vous pouvez visiter le site pour avoir plus d’informations ou cliquer ici pour voir la démo.

Dans cet article nous allons voir comment mettre en place Piwik en HTTPS avec Docker. Pour cela nous allons utiliser docker-compose. Notre stack sera composée de NGINX, MariaDB et Piwik.

Concernant Piwik et MariaDB nous utiliserons les images fournies par BitNami :

Enfin pour ce qui est de NGINX et HTTPS nous utiliserons nginx-proxy et docker-letsencrypt-nginx-proxy-companion qui sont deux images qui vont nous permettre de générer automatiquement la configuration de NGINX ainsi que les certificats Let’s Encrypt.

Pour commencer nous allons créer un dossier srv-piwik et y ajouter notre fichier docker-compose.yml

mkdir srv-piwik && cd srv-piwik
touch docker-compose.yml

Maintenant nous allons rajouter les services nginx-proxy et ssl-companion :

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /apps/web/ssl:/etc/nginx/certs:ro
  ssl-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: ssl-companion
    volumes:
      - /apps/web/ssl:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    depends_on:
      - nginx-proxy

Ensuite nous allons ajouter MariaDB :

mariadb:
  image: 'bitnami/mariadb:latest'
  environment:
    - MARIADB_ROOT_PASSWORD=YOURROOTPASSWORD
  volumes:
    - './data/mariadb/mariadb:/bitnami/mariadb'
  1. On définit que l’on utilise l’image bitnami/mariadb.
  2. On définit la valeur du mot de passe de la base de données.
  3. On crée un volume pour pouvoir récupérer les données si l’on souhaite faire un backup.

Pour terminer on ajoute le service Piwik :

piwik:
  image: 'bitnami/piwik:latest'
  ports:
    - 80
  depends_on:
    - mariadb
  volumes:
    - './data/piwik/latest:/bitnami/piwik'
    - './data/apache/latest:/bitnami/apache'
    - './data/php/latest:/bitnami/php'
  environment:
    - VIRTUAL_HOST=analytics.yourdomain.fr
    - LETSENCRYPT_HOST=analytics.yourdomain.fr
    - LETSENCRYPT_EMAIL=mail@yourdomain.fr
    - MARIADB_PASSWORD=YOURROOTPASSWORD
  1. On définit que l’on utilise l’image bitnami/piwik
  2. On mappe le port 80 entre la machine hôte et le container
  3. On lie le service au service mariadb
  4. On définit les volumes
  5. On définit les variables d’environnement nécéssaires à NGINX et Let’s Encrypt en définissant le domaine par lequel on souhaite accéder au service. Pour terminer on définit le mot de passe de la base de données qui doit être identique à celui déclarer dans le service mariadb

Voici le fichier docker-compose.yml complet :

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /apps/web/ssl:/etc/nginx/certs:ro
  ssl-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: ssl-companion
    volumes:
      - /apps/web/ssl:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    depends_on:
      - nginx-proxy
  mariadb:
    image: 'bitnami/mariadb:latest'
    environment:
      - MARIADB_ROOT_PASSWORD=YOURROOTPASSWORD
    volumes:
      - './data/mariadb/mariadb:/bitnami/mariadb'
  piwik:
    image: 'bitnami/piwik:latest'
    ports:
      - 80
    depends_on:
      - mariadb
    volumes:
      - './data/piwik/latest:/bitnami/piwik'
      - './data/apache/latest:/bitnami/apache'
      - './data/php/latest:/bitnami/php'
    environment:
      - VIRTUAL_HOST=analytics.yourdomain.fr
      - LETSENCRYPT_HOST=analytics.yourdomain.fr
      - LETSENCRYPT_EMAIL=mail@yourdomain.fr
      - MARIADB_PASSWORD=YOURROOTPASSWORD

Il ne vous reste plus qu’à copier le fichier docker-compose.yml sur votre serveur, remplacer les variables d’environnement avec vos valeurs et lancer la commande

docker-compose up -d

Si vous voulez plus de détail sur la configuration du DNS et l’installation sur Digital Ocean vous pouvez consulter cet article.

analytics open source

Les identifiants par défaut sont :

  • Utilisateur : user
  • Mot de passe : bitnami

Ensuite il ne vous reste plus qu’à suivre les instructions pour commencer tracker les données de votre site.

Piwik

Pensez aussi à modifier les informations de connexion.

Voila nous avons maintenant un serveur Piwik à notre disposition qui est accessible via HTTPS.

Vous pouvez retrouver le fichier docker-compose ici.