Minilytics
Solution d'analytics web minimaliste, auto-hébergée et conforme au RGPD. Permet de suivre les sessions, événements, funnels et import de données, sans cookies.
Pourquoi Minilytics ?
Comme beaucoup d'autres développeurs, j'ai commencé à coder avec des projets web. Lorsque j'ai codé Parcoursup Explorer au lycée et que je cherchais un langage pour développer mon projet, je me suis tourné assez tôt vers PHP, puisqu'il était assez proche du HTML. Pour suivre l'évolution du projet et voir comment les visiteurs interagissent avec mon site, j'avais installé Matomo. C'était la seule solution simple à auto-héberger que j'avais trouvée, et c'est devenu mon outil par défaut, même si son interface était loin d'être belle.
Plus tard, quand j'ai lancé EcrisMaLettre, j'ai utilisé Umami Cloud pendant deux ans, jusqu'au jour où j'ai découvert que tout l'historique de plus de six mois avait été supprimé. C'est compréhensible de leur côté, puisqu'ils ne peuvent pas garder toutes les données il faut bien qu'ils vivent, mais c'était un peu frustrant pour moi.
J'ai donc cherché à auto-héberger, et là, surprise : presque toutes les solutions modernes demandent Node.js, Docker, des services en arrière-plan ou un serveur de base de données dédié. Umami et Swetrix tournent sous Node.js, Plausible sous Elixir avec PostgreSQL et ClickHouse. Mon VPS est bien trop petit pour faire tourner toute une stack juste pour savoir combien de personnes visitent mes pages ! Matomo existe toujours, mais son interface a peu évolué, et parmi les autres solutions, il manquait toujours quelque chose : les événements, les funnels, des sessions propres ou le respect du RGPD.
J'ai posé la question sur Reddit pour savoir si j'avais mal cherché. Visiblement, l'outil que je voulais n'existait pas, et les réponses m'ont convaincu de l'écrire moi-même.
C'est ainsi qu'est né Minilytics. L'idée n'est pas de réinventer la roue, mais de reprendre ce que les outils existants font de bien, en PHP avec SQLite pour les données, avec une interface moderne et sans dépendances lourdes. Il est minimaliste par conception : il tourne partout où PHP est disponible et consomme des ressources serveur négligeables.
Fonctionnalités clés
Sessions
Le parcours de chaque visiteur peut être suivi en détail : appareil, localisation et pages vues dans l'ordre chronologique. Le tableau de bord affiche aussi les principaux référents, les pages d'entrée et de sortie, ainsi que la durée des sessions, le tout sans déposer le moindre cookie côté client.
Événements
Les clics, téléchargements et interactions personnalisées apparaissent dans un flux d'activité interactif. Suivre un événement est aussi simple que d'ajouter un attribut data-minilytics-event à un élément HTML, et son évolution dans le temps permet de repérer les tendances et de mesurer l'utilisation des fonctionnalités.
Funnels
Les funnels permettent de définir des objectifs de conversion et de suivre des parcours en plusieurs étapes, du premier contact jusqu'à la conversion, pour voir exactement à quelle étape les utilisateurs décrochent.
Import de données
Ayant moi-même perdu une partie de mon historique, je tenais à ce que changer d'outil ne coûte jamais ses données. Minilytics peut importer les pages vues, événements et sessions passés depuis un export Umami, via le tableau de bord ou en ligne de commande :
php bin/import.php --zip umami-export.zip --site-id example
Des importeurs pour Google Analytics (GA4), Plausible, Matomo et Simple Analytics sont prévus.
Respect de la vie privée par défaut
Je voulais que Minilytics soit une solution plug-and-play qui ne demande aucune configuration pour respecter la vie privée. Deux modes de suivi sont disponibles :
strict(par défaut) : aucun cookie, aucun local storage ni session storage. Les paramètres et fragments d'URL sont supprimés, et ni les adresses IP brutes ni les user agents ne sont stockés. Le serveur dérive une clé visiteur propre à chaque site à partir de ces valeurs, d'un secret privé et d'un sel renouvelé chaque mois.enriched(optionnel) : nécessite le consentement explicite du visiteur (minilytics.consent()) et peut utiliser lesessionStoragepour maintenir une session. C'est quand même assez utile car ça permet par exemple de savoir si une personne revient sur le site ou non !
La géolocalisation repose sur une base DB-IP City Lite locale, et aucune donnée visiteur n'est envoyée à un service tiers.
Architecture
Le backend est écrit en PHP 8.1+ et stocke les données dans SQLite par défaut, car c'est léger et ne nécessite pas de serveur séparé. MySQL ou MariaDB peuvent être configurés directement depuis les paramètres du tableau de bord, avec un test de connexion avant l'enregistrement.
Les données sont stockées en dehors de la racine web, de sorte qu'un redéploiement ou une nouvelle extraction de l'archive ne puisse jamais les écraser ni les exposer. L'installation en production se résume à deux commandes :
curl -LO https://github.com/axthauvin/minilytics/releases/latest/download/minilytics.tar.gz
tar -xzf minilytics.tar.gz && rm minilytics.tar.gz
Il suffit ensuite d'ouvrir /dashboard/ pour créer le compte administrateur, d'ajouter un site et de coller le snippet de suivi dans son <head>.
Et la suite ?
À long terme, j'aimerais que Minilytics devienne la solution par défaut pour les développeurs indépendants, les projets perso et tous les sites qui ont juste besoin de statistiques simples et respectueuses de la vie privée.
Les prochaines étapes sont les imports depuis d'autres outils (GA4, Plausible, Matomo), et la stabilisation du projet grâce aux retours des utilisateurs. La ligne directrice, elle, ne changera pas : rester installable en quelques minutes sur n'importe quel hébergement PHP.
C'est une première version, développée seul, donc il y a forcément des bugs ! Minilytics est open source sous licence MIT : les suggestions et contributions sont les bienvenues sur GitHub.