đ OpenPanel : analytics open-source, self-hostĂ©, sans cookie
đ 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 eventsop-dashboard: lâUI Next.jsop-worker: le consumer qui traite les events en batchop-ch: ClickHouse, la base colonne qui stocke les eventsop-db: PostgreSQL, pour les comptes, projets, dashboardsop-kv: Redis, utilisĂ© comme queue (BullMQ) et cacheop-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-laravelTu déclares les credentials dans .env :
OPENPANEL_CLIENT_ID=...
OPENPANEL_CLIENT_SECRET=...
OPENPANEL_URL=https://openpanel.arkoder.devEt 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.jsest connu de la plupart des listes. Je recommande de servir le script depuis un sous-domaine de ton site (/op1.jsproxifiĂ©), 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.