← Tous les articles
Mer. 3 juin 2026 · 5 min de lecture

📊 OpenPanel : analytics open-source, self-hostĂ©, sans cookie

OpenPanel

📚 Introduction

Je viens de basculer arkoder.dev sur OpenPanel aprĂšs plusieurs annĂ©es passĂ©es chez Vercel Analytics, et avant ça chez Plausible. À chaque migration, la mĂȘme question revient : qui regarde mes donnĂ©es, oĂč sont-elles hĂ©bergĂ©es, et combien ça me coĂ»te vraiment quand le trafic monte.

OpenPanel rĂ©pond aux trois questions d’un coup. C’est open-source sous AGPL-3.0, ça s’auto-hĂ©berge en quelques commandes Docker, et la version managĂ©e dĂ©marre Ă  20 $/mois pour 5 000 events (auto-hĂ©bergement gratuit et illimitĂ©). Surtout, le pĂ©rimĂštre fonctionnel dĂ©passe largement Plausible : events typĂ©s, funnels, rĂ©tention, session replay, A/B testing. Quelque part entre Plausible et Mixpanel, sans le tarif de Mixpanel.

Dans ce post, je raconte pourquoi j’ai migrĂ©, comment j’ai installĂ© OpenPanel Ă  cĂŽtĂ© de mes sites Coolify, et ce qui m’a plu (et un peu moins) aprĂšs quelques jours d’utilisation.

🎯 Pourquoi pas Plausible ou Posthog

J’aime Plausible. Son tracking est minimaliste, le script pùse 1 Ko, et le dashboard est lisible. Mais dùs qu’on veut suivre des conversions ou comprendre un parcours sur plusieurs pages, on atteint vite le plafond. Plausible reste un outil de pageviews enrichi, pas un outil produit.

Posthog est l’inverse : l’outil produit complet, mais avec un dashboard qui ressemble Ă  un cockpit d’avion. Pour un site vitrine et un blog, c’est trop. Et l’auto-hĂ©bergement nĂ©cessite un cluster Kubernetes que je n’ai pas envie de maintenir pour 500 visiteurs/jour.

OpenPanel atterrit pile au milieu. UI inspirée de Plausible, capacités proches de Mixpanel, et une stack Docker compose qui tourne sur un VPS modeste.

đŸ› ïž Le stub script

OpenPanel propose un script web minuscule qui crée un proxy en attendant que le vrai SDK soit chargé. Les events appelés avant le chargement sont mis en queue puis rejoués. Pratique avec un defer :

<script>
	window.op =
		window.op ||
		(function () {
			var n = [];
			return new Proxy(
				function () {
					arguments.length && n.push([].slice.call(arguments));
				},
				{
					get: function (t, r) {
						return 'q' === r
							? n
							: function () {
									n.push([r].concat([].slice.call(arguments)));
								};
					},
					has: function (t, r) {
						return 'q' === r;
					}
				}
			);
		})();
	window.op('init', {
		apiUrl: 'https://openpanel.arkoder.dev/api',
		clientId: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
		trackScreenViews: true,
		trackOutgoingLinks: true,
		trackAttributes: true,
		sessionReplay: { enabled: true }
	});
</script>
<script src="https://openpanel.dev/op1.js" defer></script>

trackAttributes: true permet d’attacher un event sur n’importe quel Ă©lĂ©ment en ajoutant data-track="signup_click" (et autant de data-* supplĂ©mentaires que tu veux pour les propriĂ©tĂ©s) sans toucher au JS. TrĂšs propre pour les boutons CTA d’une landing.

🚀 Self-hosting avec Docker

L’install se rĂ©sume Ă  un fichier docker-compose.yml officiel. Quelques services :

  • op-api : le service Node qui ingĂšre les events
  • op-dashboard : l’UI Next.js
  • op-worker : le consumer qui traite les events en batch
  • op-ch : ClickHouse, la base colonne qui stocke les events
  • op-db : PostgreSQL, pour les comptes, projets, dashboards
  • op-kv : Redis, utilisĂ© comme queue (BullMQ) et cache
  • op-proxy : Caddy en frontal, gĂ©rĂ© nativement

C’est costaud sur le papier, mais sur un VPS 4 Go ça tient. Le repo officiel fournit mĂȘme un coolify.yml prĂȘt Ă  l’emploi. J’ai dĂ©ployĂ© via la fonctionnalitĂ© “Docker Compose” de Coolify en pointant sur le repo, ajustĂ© les .env, et c’était debout. Le TLS est terminĂ© en amont par Coolify, le Caddy interne d’OpenPanel s’occupe du routage applicatif. J’en parle d’ailleurs dans Coolify : le Heroku self-hosted.

🔍 Session replay : utile ou voyeur ?

C’est la feature qui peut faire grincer des dents cĂŽtĂ© privacy. OpenPanel masque par dĂ©faut les champs d’input (maskAllInputs: true) et permet de marquer des Ă©lĂ©ments avec data-openpanel-replay-mask pour exclure des zones sensibles. Le replay reste local au compte OpenPanel, pas envoyĂ© Ă  un tiers.

Pour un site vitrine, je l’ai activĂ©e pour les premiĂšres semaines : voir comment les visiteurs naviguent entre le hero et les CTAs vaut largement n’importe quel heatmap. Je couperai sans doute aprĂšs la phase de rĂ©glage UX, car les vidĂ©os pĂšsent et la valeur diminue vite quand on a stabilisĂ© le funnel.

đŸ§© IntĂ©grations et stack

CĂŽtĂ© serveur, OpenPanel propose un SDK Node officiel et plusieurs SDKs maintenus par la communautĂ©. Pour Laravel, le package qui fait rĂ©fĂ©rence aujourd’hui est bleckert/openpanel-laravel, un provider tiers trĂšs propre :

composer require bleckert/openpanel-laravel

Tu déclares les credentials dans .env :

OPENPANEL_CLIENT_ID=...
OPENPANEL_CLIENT_SECRET=...
OPENPANEL_URL=https://openpanel.arkoder.dev

Et cÎté code, tu dispatches un event applicatif :

use Bleckert\OpenpanelLaravel\Openpanel;
 
$openpanel = app(Openpanel::class);
$openpanel->setProfileId($user->id);
$openpanel->track(name: 'order.completed', properties: [
	'amount' => $order->total,
	'currency' => 'EUR',
	'product_count' => $order->items()->count(),
]);

C’est exactement le pattern qu’on voit aussi cĂŽtĂ© Laravel AI SDK : une intĂ©gration alignĂ©e sur les conventions Laravel, pas un wrapper bricolĂ©.

⚠ Quelques prĂ©cautions

  • Adblockers : openpanel.dev/op1.js est connu de la plupart des listes. Je recommande de servir le script depuis un sous-domaine de ton site (/op1.js proxifiĂ©), mĂȘme OpenPanel le suggĂšre.
  • CORS : sur l’auto-hĂ©bergement, pense Ă  autoriser ton domaine dans le projet OpenPanel sinon les events POST seront rejetĂ©s.
  • CoĂ»t Clickhouse : Ă  volume Ă©levĂ©, c’est Clickhouse qui consomme. Surveille la RAM et le stockage, et configure les TTL d’events pour ne pas garder 5 ans de pageviews.
  • AGPL : si tu forkes pour intĂ©grer dans un produit propriĂ©taire, lis la licence. Pour un usage interne ou un blog, aucun souci.

🎉 Conclusion

OpenPanel comble un vrai trou : un outil analytics qui couvre Ă  la fois le webmaster d’arkoder.dev et le dĂ©veloppeur produit qui veut suivre des funnels prĂ©cis, le tout sans envoyer une seule donnĂ©e chez Google ou Vercel. Le tarif managĂ© est honnĂȘte, et l’auto-hĂ©bergement reste tenable Ă  la main.

Si tu utilises dĂ©jĂ  Plausible et que tu commences Ă  vouloir des events typĂ©s ou des funnels, c’est probablement la prochaine Ă©tape logique. Si tu utilises Mixpanel et que tu trouves la facture lourde, c’est l’occasion de tester avant le prochain renouvellement.

🔗 Liens utiles