---
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
