5.8 KiB
title: Self-Hosted Metrics created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, development, analytics, metrics, web, privacy] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=Development, https://github.com/pbeck/self-hosted-metrics]
💻 Self-Hosted Metrics
Métriques web minimalistes et respectueuses — alternative légère à Plausible et Umami, pensée pour les sites à petit trafic et les utilisateurs qui veulent juste des compteurs de visites sans dashboard compliqué.
📋 Informations Générales
| Champ | Valeur |
|---|---|
| Site web | self-hosted-metrics.pbeck.com |
| GitHub | pbeck/self-hosted-metrics |
| License | MIT |
| Langage | Node.js (Express) + SQLite |
| Étoiles GitHub | 161 ⭐ |
| Catégorie | Development, Web Analytics |
| Référence | selfh.st Development |
📝 Description
Self-Hosted Metrics est un tracker web analytics minimaliste conçu comme une alternative ultra-légère à Plausible et Umami. Le projet se positionne sur la simplicité radicale : un script de tracking de 1 Ko, zéro cookie, zéro tracking personnel, et un dashboard qui affiche le strict minimum (visiteurs uniques, pageviews, top pages, sources de trafic).
Là où Plausible mise sur le SaaS payant (12 $/mois pour le cloud, 69 $/an pour le self-host officiel) et Umami sur une stack React/Node/PostgreSQL/MySQL, Self-Hosted Metrics fait le choix inverse : Node.js + SQLite, interface volontairement dépouillée, un seul binaire à lancer. C'est un outil pour les blogs personnels, les portfolios, les petits SaaS qui veulent savoir si leur site reçoit du trafic sans se prendre la tête.
⚠️ Notes importantes : le projet a relativement peu d'étoiles (161) et reste niche dans l'écosystème analytics self-hosted. Pour des besoins sérieux (filtres avancés, événements custom, funnels, e-commerce tracking), Plausible ou Umami restent préférables et plus éprouvés. Ce projet est pertinent pour les personnels sites, blogs Jekyll/Hugo, vitrines où 3 chiffres sur un dashboard suffisent.
Fonctionnalités : tracking JS léger (1 Ko), SQLite, dashboard temps réel minimaliste, pas de cookie, RGPD-friendly par défaut, export CSV des données brutes, multi-sites via data-site-id, pas de JavaScript framework côté front (HTML pur).
🚀 Installation
Via Docker (recommandé)
# docker-compose.yml
version: '3.8'
services:
shm:
image: ghcr.io/pbeck/self-hosted-metrics:latest
container_name: shm
restart: unless-stopped
ports:
- "3000:3000"
environment:
PORT: "3000"
DB_PATH: "/data/metrics.db"
ADMIN_USER: "admin"
ADMIN_PASS_HASH: "bcrypt-hash-ici"
volumes:
- shm_data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.shm.rule=Host(`metrics.example.com`)"
- "traefik.http.routers.shm.entrypoints=websecure"
- "traefik.http.routers.shm.tls.certresolver=letsencrypt"
volumes:
shm_data:
Installation manuelle
git clone https://github.com/pbeck/self-hosted-metrics.git
cd self-hosted-metrics
npm install
npm run build
ADMIN_USER=admin ADMIN_PASS=motdepasse npm start
⚙️ Configuration
- Compte admin : définir
ADMIN_USERetADMIN_PASS_HASH(bcrypt) avant le premier lancement. - Créer un site : dashboard > Add Site > copier le
site-idgénéré. - Script de tracking :
<script async defer src="https://metrics.example.com/tracker.js" data-site-id="votre-site-id"></script>. - Reverse proxy : laisser passer
X-Forwarded-For(Traefik) pour des IPs sources correctes derrière le proxy. - Filtrage de bots : par défaut, le tracker exclut les user-agents connus (Googlebot, etc.) — vérifiable dans la config.
🔗 Alternatives
- Plausible — Référence privacy-first, open source, interface élégante, mais 12 $/mois en cloud.
- Umami — Très populaire, multi-sites, événements custom, plus complet mais plus lourd (Node + MySQL/PostgreSQL).
- Ackee — Alternative légère, Node + MongoDB, dashboard moderne.
- GoatCounter — Ultra-léger, Go, gratuit en SaaS, self-host possible.
- Matomo — L'alternative « complète » à Google Analytics, mais stack LAMP lourd.
🔒 Sécurité
- 🔐 HTTPS obligatoire via app-traefik : le script de tracking et l'API collectent des IPs en clair sinon.
- 🔒 Admin password hashé : jamais de mot de passe en clair dans l'env, utiliser bcrypt (
htpasswd -bnBC 12 "" monpass | tr -d ':\n'). - 🛡️ IP anonymisation : configurer la rétention d'IPs à 0 (ou ne pas les stocker du tout) pour RGPD maximal.
- 🛡️ Filtrage par IP : si le dashboard est exposé, ajouter une allowlist (Traefik IPAllowList) ou un BasicAuth devant.
- 🛡️ Backups SQLite :
metrics.dbcontient l'historique — sauvegarder régulièrement (volumeshm_data). - 🛡️ CSP : ajouter une
Content-Security-Policyautorisantmetrics.example.comsur les sites tracked.
📚 Ressources
🔗 Pages Liées
- cat-development — Catégorie Development
- app-plausible — Alternative plus éprouvée (analytics web privacy-first)
- app-traefik — Reverse proxy HTTPS
- securisation-home-lab — Bonnes pratiques de sécurité
- recettes-docker-compose — Templates Docker Compose