🇩🇪 Deutsch | 🇬🇧 English | 🇫🇷 Français
Stack Docker optimisé pour Matomo Analytics avec Traefik Reverse Proxy, mise en cache Redis et sauvegardes automatiques.
Optimisé pour : 10-15 sites web, ~500 utilisateurs/jour par site, ~10 000 pages vues/jour
- ✅ PHP 8.3 avec OPcache + compilateur JIT
- ✅ MariaDB 11.4 avec configuration optimisée
- ✅ Redis 7 pour le cache et les sessions
- ✅ Intégration Traefik avec middlewares de sécurité
- ✅ SSL/TLS automatique via Let's Encrypt
- ✅ Sauvegardes automatiques de la base de données toutes les 6 heures
- ✅ CronJobs Ofelia pour l'archivage et la maintenance
- ✅ Configuration de sécurité Apache (bloque /tmp/, /config/, etc.)
- ✅ tmpfs pour améliorer les performances I/O
- Prérequis
- Démarrage rapide
- Configuration Matomo
- Maintenance
- Dépannage
- Sauvegarde & Restauration
- Mise à l'échelle
-
Traefik Reverse Proxy doit être en cours d'exécution
- Réseau :
traefik_proxy_network - Middlewares requis :
security-headers@file,compression@file,rate-limit@file,redirect-to-https@file - Options TLS :
modern@file
- Réseau :
-
Ofelia CronJob Scheduler doit être en cours d'exécution
- RAM : Au moins 6 Go disponibles
- CPU : 2+ cœurs recommandés
- Stockage : SSD avec min. 50 Go d'espace libre
- Docker : Version 24.0+
- Docker Compose : Version 2.20+
git clone https://github.com/csaeum/DockerStackMatomo.git
cd DockerStackMatomomkdir -p volumes/html volumes/sqlcp .env.example .env
nano .envParamètres importants dans .env :
COMPOSE_PROJECT_NAME=matomo
BACKUPVOLUME=/chemin/vers/votre/sauvegarde
HOSTRULE=Host(`matomo.votre-domaine.fr`)
# Générer des mots de passe sécurisés :
# openssl rand -base64 32
REDIS_PASSWORD=VOTRE_MOT_DE_PASSE_GENERE
SQL_PASSWORD=VOTRE_MOT_DE_PASSE_GENERE
SQL_ROOT_PASSWORD=VOTRE_MOT_DE_PASSE_GENEREdocker compose up -d- Ouvrir le navigateur :
https://votre-domaine.fr - Suivre l'assistant de configuration Matomo :
- Hôte de base de données :
sql - Nom de la base de données :
MatomoDB - Utilisateur :
MatomoUser - Mot de passe : Votre
SQL_PASSWORDdu fichier.env
- Hôte de base de données :
Éditer volumes/html/config/config.ini.php :
docker exec -it matomo-php-apache nano /var/www/html/config/config.ini.phpAjouter à la fin :
[Cache]
backend = redis
[RedisCache]
host = "redis"
port = 6379
password = "VOTRE_MOT_DE_PASSE_REDIS"
database = 0
timeout = 0.0
[QueuedTracking]
backend = "redis"
host = "redis"
port = 6379
password = "VOTRE_MOT_DE_PASSE_REDIS"
database = 1Dans le même fichier config.ini.php :
[General]
enable_browser_archiving_triggering = 0
browser_archiving_disabled_enforce = 1docker compose restart php-apacheConfigurés via Ofelia (dans docker-compose.yaml) :
- Archivage : Toutes les heures (génère des rapports pour tous les sites)
- Suppression des logs : Tous les jours à 2h (supprime les logs de plus de 180 jours)
- Nettoyage temporaire : Tous les jours à 3h (purge les anciennes données d'archive)
docker logs -f ofelia
# Test manuel
docker exec matomo-php-apache php /var/www/html/console core:archivedocker compose logs -f
docker compose logs -f php-apache
docker compose logs -f sqldocker compose restart
docker compose restart php-apachedocker compose pull
docker compose up -d
docker image prune -fdocker compose ps sql
docker compose logs sql
docker exec matomo-sql mariadb-admin ping -uroot -p"${SQL_ROOT_PASSWORD}"docker logs ofelia
docker exec matomo-php-apache php /var/www/html/console core:archivedocker exec matomo-redis redis-cli -a "${REDIS_PASSWORD}" ping
docker compose logs redisLes sauvegardes SQL sont créées automatiquement par le conteneur sqlbackup :
- Fréquence : Toutes les 6 heures
- Emplacement :
${BACKUPVOLUME}/matomo/ - Rétention : 12 dernières sauvegardes
- Compression : GZIP Niveau 9
docker exec matomo-sql mariadb-dump \
-uroot -p"${SQL_ROOT_PASSWORD}" \
--single-transaction \
MatomoDB > backup_$(date +%Y%m%d_%H%M%S).sqldocker compose down
docker compose up -d sql
docker exec -i matomo-sql mariadb -uroot -p"${SQL_ROOT_PASSWORD}" MatomoDB < backup.sql
docker compose up -dInstaller le plugin QueuedTracking :
- Dans Matomo : Administration → Marketplace
- Rechercher "QueuedTracking" et installer
- Ajouter dans
docker-compose.yaml:
- ofelia.job-exec.${COMPOSE_PROJECT_NAME}-queue-worker.schedule=* * * * *
- ofelia.job-exec.${COMPOSE_PROJECT_NAME}-queue-worker.command=php /var/www/html/console queuedtracking:process# Dans docker-compose.yaml
sql:
deploy:
resources:
limits:
memory: "8G" # de 4G à 8G
redis:
command:
- --maxmemory
- 2gb # de 1gb à 2gbMettre à jour configs/sql/custom.cnf :
innodb_buffer_pool_size = 6G # 75% de 8G- Documentation Matomo : https://matomo.org/guides/
- Labels Traefik : https://github.com/csaeum/DockerStackTraefik/blob/main/LABELS-CHECKLIST.md
- CronJobs Ofelia : https://github.com/csaeum/DockerStackOfelia
- FAQ Performance : https://matomo.org/faq/on-premise/how-to-configure-matomo-for-speed/
- ✅ Version initiale
- ✅ Optimisé pour 10-15 sites, ~500 utilisateurs/jour
- ✅ Intégration du cache Redis
- ✅ Middlewares de sécurité Traefik
- ✅ Configuration de sécurité Apache
- ✅ Sauvegardes automatiques
- ✅ CronJobs Ofelia
- ✅ MariaDB optimisé pour les performances
- ✅ PHP 8.3 avec OPcache + JIT
Ce projet est sous licence GPL-3.0-or-later.
Fait avec ❤️ par WSC - Web SEO Consulting
Ce projet est gratuit et open source. S'il vous a aidé, j'apprécie votre soutien :
- 🐛 Rapports de bugs : GitHub Issues
- 💬 Discussions : GitHub Discussions
- 📧 Contact : [email protected]