Speedtest Monitor
Projet open source de Gauthier Painteaux
Un FAI promet un débit ; Speedtest Monitor vérifie qu’il est tenu. Il mesure la connexion à intervalle régulier avec le moteur de Cloudflare, conserve tout l’historique et prévient dès que le débit ou la latence se dégradent.
- Next.js
- Bun
- TypeScript
- SQLite
- Version
- v1.23.11
- Étoiles
- 4
- Licence
- MIT
- Mis à jour le

- d’historique affiché, en 5 périodes au choix
- 6 h à 30 j
- canaux d’alerte : webhook, ntfy, Discord, Slack, e-mail
- 5
- entre deux mesures, réglable à chaud
- 1 à 1440 min
Comment fonctionne Speedtest Monitor
- 1
Scheduling
Une mesure part à l’intervalle choisi.
- 2
Mesure
Cloudflare Speed Test, en HTTP pur.
- 3
Stockage
Le résultat va dans SQLite.
- 4
Push
Le dashboard le reçoit par WebSocket.
- 5
Alerte
Les seuils sont évalués à chaque mesure.
Points forts de Speedtest Monitor
Dashboard en temps réel
Chaque mesure arrive en direct par WebSocket : download, upload, latence, jitter et bufferbloat, sur 6 heures comme sur 30 jours.
Calibré pour le multi-gigabit
Download, upload, latence, jitter et bufferbloat mesurés avec Cloudflare Speed Test, et réglables pour saturer les liens multi-gigabit.
Alertes à la dégradation
Seuils sur le débit, la latence, le bufferbloat ou les échecs consécutifs, envoyés par webhook, ntfy, Discord, Slack ou e-mail, une seule fois par incident.
Comptes et SSO
Rôles administrateur et lecteur, connexion par mot de passe ou OIDC, testé avec Authelia, Authentik et Keycloak.
En images
Choix techniques de Speedtest Monitor
- Next.js + serveur Bun
- Le même serveur sert l’application et le WebSocket, donc un seul container et un seul port à exposer.
- SQLite + Drizzle
- Une base dans un fichier, sans service à côté, et des migrations versionnées appliquées au démarrage.
- Cloudflare Speed Test
- Une mesure en HTTP pur, sans navigateur, sur le réseau mondial de Cloudflare.
- Better Auth
- Sessions stockées en base et provider OIDC générique, sans réimplémenter l’authentification.
Installer Speedtest Monitor
- 1
Créer un compose.yml avec l’image publiée sur ghcr.io (amd64 et arm64).
- 2
Générer le secret d’authentification puis démarrer le container.
- 3
Ouvrir http://localhost:3000/setup et créer le premier administrateur.
services:
speedtest:
image: ghcr.io/greite/speedtest-monitor:latest
restart: unless-stopped
ports:
- "3000:3000"
environment:
AUTH_SECRET: ${AUTH_SECRET}
TZ: Europe/Paris
volumes:
- speedtest-data:/data
volumes:
speedtest-data:echo "AUTH_SECRET=$(openssl rand -base64 32)" > .env
docker compose up -d

