Infrastructure de base — vue d'ensemble
Procédure complète de déploiement de l'infrastructure staging Nex. La référence est éclatée en 4 pages thématiques, plus la checklist globale ci-dessous.
Objectif
À la fin de ce parcours, l'environnement staging dispose de :
- Un VPC avec réseau segmenté (public / privé / données)
- Un cluster Kubernetes (EKS) opérationnel avec des nœuds prêts
- Une base PostgreSQL accessible depuis le cluster
- Un cache Redis accessible depuis le cluster
- Des buckets S3 pour les backups
- Le DNS Cloudflare configuré et les certificats TLS prêts
- Les secrets injectables via Doppler
Pré-requis : operations/variables-et-stack lu, tous les comptes créés, outils CLI installés.
Plan de déploiement (4 sous-pages)
| Page | Phases | Contenu |
|---|---|---|
| Réseau | 1 → 3 | Backend Terraform state, VPC AWS, Security Groups |
| Data | 4 → 6 | RDS PostgreSQL, ElastiCache Redis, S3 buckets |
| Compute | 7 → 8 | Cluster EKS, composants K8s (ingress, cert-manager, external-secrets) |
| DNS, secrets et NestJS | 9 → 11 | DNS Cloudflare + certificats, Doppler / External Secrets, config NestJS des services |
Checklist globale — fin du parcours
Toutes ces vérifications doivent passer avant d'entamer operations/cicd-services.
Infrastructure AWS
- [ ] VPC créé avec CIDR
10.0.0.0/16danseu-west-3 - [ ] 6 subnets sur 2 AZ (public, privé, data)
- [ ] NAT Gateway actif
- [ ] 4 Security Groups (alb, eks-nodes, rds, redis)
- [ ] SG cluster EKS ajouté aux inbound de
sg-rdsetsg-redis - [ ] RDS PostgreSQL 16.13 disponible, encrypted, backups 30j, Performance Insights activé
- [ ] User applicatif
nex_appcréé avec droits restreints (ounex_admintemporairement) - [ ] Redis disponible, TLS activé, auth token configuré
- [ ] Bucket S3 backups créé, encrypted, lifecycle configuré
- [ ] Terraform state stocké dans S3 avec lock DynamoDB
Kubernetes
- [ ] Cluster EKS actif avec 2 nœuds Ready
- [ ] 6 namespaces permanents créés (
nex-staging,nex-production,nex-monitoring,ingress-nginx,cert-manager,external-secrets) - [ ] Ingress NGINX Controller avec NLB (hostname récupéré)
- [ ] cert-manager avec ClusterIssuers Let's Encrypt (prod + staging) Ready
- [ ] External Secrets Operator connecté à Doppler
- [ ] Secret
nex-secretssynchronisé dansnex-staging - [ ] Secret
gitlab-registrycréé pour le pull d'images - [ ] Resource Quotas appliqués (staging + production + template review)
- [ ] Overlay Kustomize review prêt (
infrastructure/kubernetes/overlays/review/)
DNS & Certificats
- [ ]
dev.paywithnex.compointe vers le NLB via Cloudflare (proxy activé) - [ ]
*.review.paywithnex.compointe vers le NLB via Cloudflare (proxy activé) - [ ]
admin.paywithnex.compointe vers Firebase Hosting - [ ]
bo.paywithnex.compointe vers Firebase Hosting - [ ] SSL/TLS Full Strict configuré dans Cloudflare
- [ ] HSTS activé
- [ ] Records SPF, DKIM, DMARC pour Resend
Secrets
- [ ] Doppler (projet
paywithnex, configstg) contient toutes les variables - [ ] Variables critiques :
POSTGRES_SSL=true,REDIS_TLS=true - [ ] Noms corrects :
POSTGRES_HOST(pasDATABASE_HOST),REDIS_PASSWORD(pasREDIS_AUTH_TOKEN) - [ ] URLs inter-services configurées (
RISK_ENGINE_SERVICE_URL, etc.) - [ ] Les endpoints Terraform sont synchronisés dans Doppler
- [ ] Les secrets sont accessibles depuis les pods K8s
Services NestJS
- [ ] Tous les services ont un endpoint
GET /healthexclu du prefix global - [ ] Tous les services avec TypeORM ont SSL configuré (
app.module.tsETdata-source.ts) - [ ] Les services Redis (
auth,notifications) ont TLS activé - [ ] Les images Docker sont buildées en
linux/amd64et pushées sur GitLab Registry
Connectivité
- [ ] Un pod dans
nex-stagingpeut joindre RDS sur le port 5432 (avec SSL) - [ ] Un pod dans
nex-stagingpeut joindre Redis sur le port 6379 (avec TLS) - [ ]
curlsurhttps://dev.paywithnex.comretourne une réponse (même 404) - [ ]
curlsurhttps://test.review.paywithnex.comrésout vers le NLB (wildcard DNS OK) - [ ] Les dashboards Firebase Hosting répondent sur leurs domaines
Si un point est rouge → corriger avant de passer à operations/cicd-services.