118 lines
5.8 KiB
Markdown
118 lines
5.8 KiB
Markdown
---
|
|
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](https://self-hosted-metrics.pbeck.com/) |
|
|
| **GitHub** | [pbeck/self-hosted-metrics](https://github.com/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](https://selfh.st/apps/?tag=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é)
|
|
|
|
```yaml
|
|
# 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
|
|
|
|
```bash
|
|
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
|
|
|
|
1. **Compte admin** : définir `ADMIN_USER` et `ADMIN_PASS_HASH` (bcrypt) avant le premier lancement.
|
|
2. **Créer un site** : dashboard > Add Site > copier le `site-id` généré.
|
|
3. **Script de tracking** : `<script async defer src="https://metrics.example.com/tracker.js" data-site-id="votre-site-id"></script>`.
|
|
4. **Reverse proxy** : laisser passer `X-Forwarded-For` (Traefik) pour des IPs sources correctes derrière le proxy.
|
|
5. **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.db` contient l'historique — sauvegarder régulièrement (volume `shm_data`).
|
|
- 🛡️ **CSP** : ajouter une `Content-Security-Policy` autorisant `metrics.example.com` sur les sites tracked.
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Site officiel](https://self-hosted-metrics.pbeck.com/)
|
|
- [Documentation](https://github.com/pbeck/self-hosted-metrics#readme)
|
|
- [GitHub pbeck/self-hosted-metrics](https://github.com/pbeck/self-hosted-metrics)
|
|
- [Selfh.st — Development](https://selfh.st/apps/?tag=Development)
|
|
|
|
## 🔗 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
|