Sous le capot de NorminUp
Yann1 min de lectureRead it in English
Ce qui fait tourner NorminUp aujourd’hui : une API, des agents qui font les vérifications, des files d’attente, et un déploiement que je peux annuler.
Quand on est seul à faire tourner un service, chaque choix technique doit rester simple à comprendre et à réparer à 2 h du matin. Voici sur quoi repose NorminUp aujourd’hui.
Le site et le tableau de bord
Le site, le tableau de bord et les pages de statut sont faits avec Next.js 16 et React 19, stylés avec Tailwind. Une seule application sert la vitrine, la documentation et l’espace client, selon l’adresse visitée.
L’API
L’API est écrite en Node.js avec Express. Les données sont dans MySQL, en SQL écrit à la main, sans ORM : je sais exactement quelle requête part vers la base, ce qui aide beaucoup quand il faut comprendre une lenteur.
Les vérifications
Les vérifications de vos services ne sont pas faites par l’API. Elles sont confiées à des agents, depuis la France, qui se partagent les services à surveiller. L’API reste disponible même quand les vérifications sont nombreuses, et ajouter un agent suffit pour en absorber davantage.
Les files d’attente
Tout ce qui peut attendre quelques secondes passe par des files d’attente BullMQ, sur Redis : l’envoi des alertes, les webhooks, la génération des exports. Si un service tiers répond lentement, rien ne bloque le reste.
Le déploiement
Tout tourne dans des conteneurs Docker, orchestrés par Docker Compose sur un serveur chez OVH, derrière Caddy qui gère le HTTPS. À chaque déploiement, les images sont construites par l’intégration continue, puis le serveur les récupère, vérifie que tout répond, et revient tout seul à la version précédente si ce n’est pas le cas.
Rien de révolutionnaire : des outils éprouvés, assemblés pour que je puisse dormir.