Déploiement
Guide de déploiement de Roadmaps Faciles sur différentes plateformes.
Section technique
Cette page s'adresse aux équipes techniques en charge du déploiement et de l'hébergement de l'instance.
Prérequis
- Node.js 24 ou supérieur
- PostgreSQL 18 - Base de données principale
- Redis - Cache et sessions
- SMTP - Envoi d'emails (magic links, invitations)
Plateformes supportées
Scalingo
Roadmaps Faciles supporte nativement le déploiement sur Scalingo. Le fournisseur de domaine Scalingo gère automatiquement les certificats TLS et l'ajout de domaines personnalisés via l'API Scalingo.
Variables d'environnement spécifiques :
DOMAIN_PROVIDER=scalingoouDOMAIN_PROVIDER=scalingo-wildcardDOMAIN_SCALINGO_API_TOKEN,DOMAIN_SCALINGO_API_URL,DOMAIN_SCALINGO_APP_ID
Clever Cloud
Le déploiement sur Clever Cloud est supporté avec la gestion automatique des domaines personnalisés.
Variables d'environnement spécifiques :
DOMAIN_PROVIDER=clevercloudDOMAIN_CLEVERCLOUD_*(consumer key, secret, token, app ID)
Docker / VPS
Pour un déploiement sur serveur dédié ou VPS, utilisez Caddy comme reverse proxy pour la gestion TLS on-demand :
DOMAIN_PROVIDER=caddyDOMAIN_CADDY_ADMIN_URL- URL de l'API admin Caddy
Caddy interroge l'endpoint /api/domains/check?domain=... avant d'émettre un certificat, pour vérifier que le domaine est autorisé.
Coolify (self-host)
Roadmaps Faciles peut être déployé sur une instance Coolify self-hosted, qui orchestre Docker Compose + Traefik + ressources managées (PostgreSQL, Redis). Configuration complète, Dockerfiles et workflows GHA fournis dans le dépôt.
L'architecture recommandée s'appuie sur :
- Wildcard DNS (Gandi LiveDNS ou équivalent) pour couvrir les sous-domaines tenants en un seul certificat Let's Encrypt
- DNS challenge Traefik (provider
gandiv5) pour la génération automatique des certificats wildcard - MinIO comme stockage S3-compatible self-hosted (ou S3 externe)
STORAGE_S3_KEY_PREFIXpour mutualiser un bucket S3 entre environnements (review apps notamment)
3 environnements isolés : production (deploy sur tag v*), staging (deploy sur push dev), review (preview deployment par PR). Chaque PR ouverte spawn une app éphémère avec sa propre DB Postgres (créée à la volée par l'entrypoint) et un préfixe S3 dédié, automatiquement nettoyés à la fermeture de la PR.
Déploiement automatisé (CI/CD)
Le dépôt fournit un workflow d'exemple .github/workflows/deploy.yml qui couvre un schéma classique trois-tiers : staging, production, review apps. Il peut servir de base pour votre propre instance, à adapter selon votre plateforme cible.
Pattern recommandé :
| Événement | Environnement | Action |
|---|---|---|
Push sur la branche d'intégration (ex: dev) | Staging | Déploiement automatique après passage des jobs CI |
Tag de release (ex: pattern v*) | Production | Déploiement automatique sur tag stable |
workflow_dispatch | Staging ou Production | Déclenchement manuel ponctuel |
| Pull request | Review app | Spawn d'une instance éphémère par PR |
Quel que soit l'orchestrateur utilisé (Scalingo, Clever Cloud, Coolify, k8s…), les review apps méritent une attention particulière : prévoir une DB par PR (créée à la volée à l'entrypoint, ou via une instance partagée + base par PR) et un stockage S3 isolé (bucket dédié, ou bucket partagé avec préfixe par PR via STORAGE_S3_KEY_PREFIX=pr-<n>/). Le cleanup à la fermeture de PR (drop DB + purge prefix S3) est typiquement géré par un workflow GHA dédié.
Les secrets de la plateforme (token API, credentials S3, etc.) gagnent à être scopés par GitHub Environment (staging, production, review-cleanup) plutôt qu'en secrets globaux du dépôt.
Variables d'environnement principales
| Variable | Description | Obligatoire |
|---|---|---|
DATABASE_URL | URL de connexion PostgreSQL | Oui |
REDIS_URL | URL de connexion Redis | Oui |
SECURITY_JWT_SECRET | Secret pour les tokens JWT et HMAC | Oui |
SECURITY_WEBHOOK_SECRET | Secret pour la signature des webhooks | Oui |
MAILER_SMTP_HOST | Hôte du serveur SMTP | Oui |
MAILER_FROM_EMAIL | Adresse d'expédition des emails | Oui |
NEXT_PUBLIC_SITE_URL | URL publique de l'instance | Oui |
ADMINS | Identifiants des super-administrateurs (séparés par virgule) | Oui |
DOMAIN_PROVIDER | Fournisseur de domaine (noop, scalingo, caddy...) | Non |
DNS_PROVIDER | Fournisseur DNS (noop, manual, ovh, cloudflare) | Non |
PLATFORM_DOMAIN | Domaine de la plateforme d'hébergement (ex: scalingo.io) - redirige vers NEXT_PUBLIC_SITE_URL | Non |
SENTRY_DSN | DSN Sentry pour le suivi d'erreurs (vide = désactivé) | Non |
La liste complète des variables est documentée dans le fichier .env.development du projet.
Observabilité
| Composant | Description |
|---|---|
| Logs structurés | Pino (JSON en production, formaté en dev). Logger serveur uniquement. |
| Suivi d'erreurs | Sentry (optionnel, activé par SENTRY_DSN). Auto-instrumente RSC, Server Actions, Prisma. |
| Health check | GET /api/healthz - Vérifie la connectivité DB et Redis. HTTP 200 si OK, 503 sinon. |
| Correlation ID | UUID généré par requête, propagé via l'en-tête x-correlation-id (requête et réponse). |