← Accueil · Stacks & langages · Toute la doc
Express + MongoDB + Redis + BullMQ sur OKS
Une API Express, MongoDB pour la souplesse du document, Redis et BullMQ pour les jobs : un classique des startups Node. Sur OKS, chaque brique devient un Deployment, l’API et ses workers montent en charge avec l’HPA, et Outscale opère le control plane.
oks : control plane cp.mono.master, nodepool de 3 nœuds tinav6.c4r8p2, Kubernetes 1.34. Deployments api, web, worker BullMQ, MongoDB et Redis ; backups MongoDB vers OOS. Estimation bige-ops : 457,65 € HT par mois, plus les LBU créés par les Services exposés.
flowchart TB
U["Internet"] -->|"HTTPS"| L1["LBU · api"]
U -->|"HTTPS"| L2["LBU · web"]
subgraph OKS ["OKS · control plane managé par Outscale"]
API["Deployment api
Express · HPA"]
WEB["Deployment web"]
WK["Deployment worker
BullMQ"]
MG[("MongoDB 8.0
ClusterIP")]
RD[("Redis 8
ClusterIP")]
end
L1 --> API
L2 --> WEB
API --> MG
API --> RD
WK --> RD
WK --> MG
MG -.->|"mongodump"| OOS[("OOS · backups")]
Pourquoi cette stack tourne bien sur Outscale
- Kubernetes managé, rien qu’à toi : OKS te donne un cluster dédié, avec son control plane isolé et sans partage de ressources. Tu déploies tes services, Outscale opère le cluster. OKS
- Des bases rapides et stables : Les volumes io1 garantissent jusqu’à 13 000 IOPS par volume : tes requêtes gardent des temps de réponse réguliers, même sous charge. Volumes
- Un réseau privé et des sauvegardes sûres : Tes bases restent dans le réseau privé de ton projet, jamais exposées à Internet. Les sauvegardes partent vers l’Object Storage, compatible S3 et répliqué entre plusieurs zones.
- Prêt pour les clients exigeants : Régions qualifiées SecNumCloud 3.2 pour le secteur public, certification HDS pour la santé. Pourquoi Outscale · SecNumCloud 3.2
Architecture sur Outscale
- Cluster OKS en
eu-west-2: Outscale opère le control plane ; bige-ops part surcp.mono.masteret Kubernetes 1.34, et génère cluster, nodepool et manifests (oks-clipuiskubectl apply). - Nodepool de 3 nœuds
tinav6.c4r8p2: 12 vCPU et 24 GiB pour les pods. - api (Express, 2 réplicas par défaut, HPA sur le CPU possible), web (2 réplicas), worker BullMQ (1 réplica, à monter selon la file).
- MongoDB 8.0 et Redis 8 en pods, Services internes. Les pods de bases démarrent sur
emptyDir: leurs données vivent avec le pod, et le filet est le backup vers OOS, activé ici.
OKS est disponible en eu-west-2 et en cloudgouv-eu-west-1 (SecNumCloud) et s’active sur demande auprès du support Outscale ; la simulation et l’estimation n’en dépendent pas. Détail : OKS & pods.
Coût mensuel estimé
Calculé avec bige-ops estimate --json sur le catalogue public Outscale synchronisé le 17 septembre 2026, Région eu-west-2, en € HT par mois (730 heures). Estimation indicative, sur la grille publique ; le trafic sortant est à 0 € HT au catalogue public de cette Région.
| Ligne bige-ops | Ce que c’est | € HT / mois |
|---|---|---|
| OOS express-app-backups — 50 GiB | sauvegardes MongoDB | 1,25 € |
| OKS control plane — cp.mono.master | control plane OKS (1 master) | 29,20 € |
| Nodepool default — tinav6.c4r8p2 × 3 | 3 nœuds : 12 vCPU, 24 GiB, disques inclus | 427,20 € |
| Total estimé | 457,65 € |
LBU des Services exposés. api et web sont des Services LoadBalancer : OKS crée un LBU pour chacun, à 21,90 € HT par mois l’unité au même catalogue, soit 43,80 € de plus : 501,45 € HT par mois au total.
Variante production. Le même cluster avec un control plane haute disponibilité cp.3.masters.small (3 masters, jusqu’à 50 nœuds) : 523,35 € HT par mois estimés, 567,15 € avec les deux LBU. C’est la recommandation d’Outscale pour la production.
Le projet utilisé, à reproduire chez toi :
bige-ops init -n stack-express-mongodb-redis-oks bige-ops add layout custom --name app --runtime nodejs --web same --worker \ --db mongodb --db redis --topology oks --lbu # puis project.yaml ajusté comme ci-dessous bige-ops validate bige-ops estimate --json
name: stack-express-mongodb-redis-oks
region: eu-west-2
components:
- type: stack
name: app
topology: oks
services: [api, web, worker, mongodb, redis]
images: {mongodb: 'mongo:8.0', redis: 'redis:8-alpine'}
service_config:
mongodb:
backup: {enabled: true, oos_bucket: express-app-backups}
- {type: oos_bucket, name: express-app-backups, bucket: express-app-backups, size: 50, purpose: backups}
Bases de données : versions, backups, failles connues
| Base | Image épinglée | Backup vers OOS | Failles connues |
|---|---|---|---|
| MongoDB | mongo:8.0 | mongodump → tar → bucket OOS | fiche OpenCVE |
| Redis | redis:8-alpine | snapshot RDB / AOF → bucket OOS | fiche OpenCVE |
MongoDB. Le tag mongo:8 par défaut de bige-ops suit la dernière 8.x ; la simulation épingle mongo:8.0, la branche de référence de la génération 8. Côté durcissement : l’authentification activée dès l’initialisation (utilisateur root et utilisateur applicatif distincts), une écoute limitée au réseau privé, et la checklist sécurité MongoDB.
Redis. La simulation garde redis:8-alpine, le tag par défaut de bige-ops : il suit la dernière Redis 8. Épingle la mineure (par exemple 8.10) si tu veux un build strictement reproductible. Côté durcissement : un mot de passe ou des ACL, le protected mode actif, aucune exposition publique, et les commandes d’administration réservées à un utilisateur dédié (sécurité Redis).
Côté Node, Mongoose (failles connues de Mongoose) et BullMQ se branchent sur les Services internes mongodb:27017 et redis:6379. Les réplicas de pods ne forment pas un replica set MongoDB : voir bases complexes.
Le backup est activé dans la simulation (backup.enabled + bucket OOS) : bige-ops crée le bucket, protégé contre la destruction, et prépare backup.sh (bucket, endpoint, planning) où tu branches le dump. Sans backup, Visual, preflight et plan te le signalent. Détail : OOS & backups.
Exposition : ce qui est ouvert, et à qui
- Entrées publiques : l’API Express (
api) et le front (web). Chacune est un ServiceLoadBalancer, donc un LBU Outscale ; le HTTPS se branche avecexpose.tls.server_certificate_id(ORN d’un certificat EIM) et le LBU termine le TLS, sans Ingress ni cert-manager à maintenir. - Bases et brokers : Services internes (ClusterIP), joignables seulement depuis le cluster. Jamais de
type: LoadBalancerni de NodePort vers une base. - API Kubernetes : à l’apply, l’accès admin du cluster est restreint à ton IP publique (
/32) ou au CIDR deOKS_ADMIN_CIDR. - Nœuds : workers jetables gérés par OKS ; ne fonde aucune règle sur leurs IP.
Détail : OKS & pods, réseau · ouvrir ou non, load balancers dans OKS.
Vulnérabilités : ce que bige-ops vérifie
Des failles, il y en aura toujours : l’important est de voir d’abord celles qui sont exposées. bige-ops lit le code de tes dépôts sur ton poste, compare tes bibliothèques à la base publique des failles connues des bibliothèques open source (OSV) et, avec ta clé OpenCVE, les composants de ta stack au registre mondial des vulnérabilités (CVE). Puis il classe tout par urgence : ce qui est exposé à Internet d’abord. Pourquoi le refaire toi-même ? C’est chez toi, sur ton poste, et c’est gratuit. La méthode complète : ce que bige-ops vérifie.
Avec ta clé API OpenCVE (Settings), l’onglet Vulnérabilités lit ta simulation : chaque composant reconnu, image Docker ou paquet installé, est rapproché de sa fiche éditeur / produit, à raison d’une requête par produit. Les failles connues qui remontent sont classées par risque :
- Gravité : chaque faille a une note sur 10 (CVSS) ; critique dès 9, haute dès 7, moyenne dès 4. Une faille déjà exploitée par des attaquants (elle figure sur la liste KEV de la CISA, l’agence américaine de cybersécurité) compte au moins comme haute.
- Exposition dans ta simulation : un composant joignable depuis Internet, directement ou derrière le LBU, garde sa gravité ; un composant en subnet privé descend d’un cran, sauf si la faille est déjà exploitée.
- Départage : à risque égal, les failles déjà exploitées d’abord, puis la note sur 10, puis la probabilité d’être exploitée prochainement (EPSS). Le filtre « important » ne garde que les failles déjà exploitées ou notées 7 et plus.
Le rapprochement se fait au niveau du produit, pas de la version : à toi de recouper
avec la version que tu as épinglée. Une image en latest ressort en plus
comme « version non épinglée ». Le résultat est mis en cache dans la simulation et se
rafraîchit à la demande.
| Composant | Fiche OpenCVE | Dans bige-ops |
|---|---|---|
| MongoDB | MongoDB | reconnu automatiquement depuis l’image mongo:8.0 · exposition : privée (pod interne) |
| Redis | Redis | reconnu automatiquement depuis l’image redis:8-alpine · exposition : privée (pod interne) |
| Kubernetes (OKS) | Kubernetes | reconnu automatiquement (topologie oks) · exposé par les LBU |
| Node.js | Node.js | reconnu depuis l’image de base de ton Dockerfile (FROM node), à la lecture de tes dépôts |
| Express | Express | fiche de référence (pas encore reconnu automatiquement) ; version npm vérifiée dans OSV |
Sur ton poste, sans clé ni IA (le mode direct) : bige-ops repère les routes Express (et Fastify, Koa, Hono si tu les mélanges), vérifie qu’elles demandent une connexion, cherche les erreurs classiques dans le code et vérifie tes dépendances npm (Express, Mongoose, BullMQ…) dans OSV. Détail : Node.js sur Outscale.
bige-ops advanced va plus loin avec ta propre clé d’IA : un agent d’audit relit les pistes déjà repérées (pages ou API accessibles sans être connecté, passages de code à risque, pièges connus du framework), confirme les vraies failles, écarte les fausses alertes et classe chacune par type de faille, selon le catalogue de référence (CWE), avec son urgence (de P0, la plus urgente, à P3), son exposition et un ticket GitHub (issue) prêt à ouvrir. Les appels partent de ton poste, avec des extraits ciblés de ton code ; l’agent n’applique rien et ne lit pas tes secrets. Voir l’audit approfondi.
Ce que bige-ops vérifie avant le deploy
bige-ops validate: structure du projet, services custom (une image est requise pour un pod), HTTPS parexpose.tls.server_certificate_id(ORN EIM).bige-ops preflight: clés Outscale présentes, OMI résolue, stack déclarée, IP des hôtes après l’apply, Dockerfile trouvé, secrets de build et d’exécution présents dans le coffre, jeton GitHub pour les dépôts privés, et alerte si une base n’a pas de backup vers OOS. Une erreur bloque le deploy.bige-ops plan: le plan Terraform et les specs OKS avant tout apply, avec les risques de perte de données signalés ; les buckets OOS sont protégés contre la destruction.- Vulnérabilités : composants de la stack comparés aux failles connues avec OpenCVE et classés selon leur exposition, images en
latestsignalées, dépôts relus sur ton poste, sans clé ni IA.
OpenCVE, la source des failles connues
Pour savoir quelles failles connues touchent les briques de ta stack, bige-ops s’appuie sur OpenCVE. OpenCVE rassemble les failles publiées dans le registre mondial des vulnérabilités (CVE) et ses sources officielles (NVD, MITRE, liste KEV des failles déjà exploitées tenue par la CISA, l’agence américaine de cybersécurité…), donne à chacune sa note de gravité sur 10 (CVSS) et sa probabilité d’être exploitée (EPSS), et les range par éditeur et par produit, consultables dans son explorateur. Le projet est open source : son code, ses issues et les contributions de sa communauté vivent sur GitHub, et il s’installe aussi chez toi. Merci à ses mainteneurs et à tous ceux qui font vivre ce référentiel : c’est grâce à eux que chaque composant de ta simulation a sa fiche de failles à jour.
Docs officielles
Langages : Node.js.
Pour aller plus loin : layouts & topologies, VMs, OKS, volumes BSU, OOS, LBU, réseau, régions, bases de données, catalogue de prix. Toutes les stacks : stacks & langages.