ContenuPied de page
Roadmaps Faciles
Roadmaps Faciles
BienvenuePremiers pas

Comprendre

Utiliser

Gérer

Technique

Documentation techniqueConfiguration DNSDéploiementSelf-hostingDéploiement gouvernementalSécuritéTracking & AnalyticsFeature Flags

FAQ
Technique

Déploiement gouvernemental

Héberger Roadmaps Faciles pour un opérateur public : thème DSFR, licence Gov, ProConnect, Espace Membre et conformité.

À lire en complément

Cette page couvre uniquement la configuration spécifique au secteur public. Pour les bases du déploiement (prérequis, build, base de données, options d'hébergement), commencez par le guide Self-hosting. Les templates prêts à l'emploi (docker-compose, Caddy, Coolify, Scaleway) sont dans le repo sous docs/self-host/.

Vue d'ensemble

Un déploiement gouvernemental, pour une administration, une collectivité, un opérateur de l'État ou un incubateur beta.gouv, se distingue d'un déploiement standard sur cinq points :

  1. Thème DSFR : le Système de Design de l'État peut être activé sur un espace, sous deux conditions cumulatives (licence Gov + domaine .gouv.fr).
  2. Licence Gov : le DSFR et les features EE sont débloqués par une clé de licence GOV_LICENSED, émise manuellement après qualification.
  3. Authentification : ProConnect (fédération d'identité de l'État) et Espace Membre (beta.gouv) en plus du mot de passe et du magic link.
  4. Pages légales : mentions légales, politique de confidentialité, CGU et déclaration d'accessibilité à renseigner avec les informations de l'opérateur public.
  5. Conformité : RGAA, RGPD/CNIL, résidence des données en France ou dans l'UE.

Les variables ci-dessous (branding, pages légales, tracking, URL du site) sont lues au runtime : aucune n'est inlinée au build, donc l'image GHCR prébuildée sert n'importe quel domaine et n'importe quel branding sans rebuild. Vous les posez en variables d'environnement runtime sur votre instance ; les valeurs publiques sont exposées au navigateur via une config runtime injectée par le serveur.

Licence Gov

Roadmaps Faciles est triple-licencié (AGPL v3 / BSL 1.1 / Gov). Les features EE et le thème DSFR sont activés au runtime par une clé de licence.

VariableDescriptionDéfaut
LICENSE_KEYClé de licence au format rf_live_.... Vide = mode Community (features core uniquement)(vide)
LICENSING_SERVER_URLURL du serveur de vérification en ligne (ne pas changer en self-host)https://licensing.roadmaps-faciles.fr
INSTANCE_IDIdentifiant d'instance pour le binding de la licence. Auto-généré et persisté en base au premier lancement si non défini(auto-généré)

Vérification de licence

La vérification est principalement offline (signature Ed25519 embarquée dans la clé), avec un refresh en ligne toutes les 24h auprès du serveur de licences. Si le serveur est injoignable, une période de grâce de 7 jours maintient la licence active. Vous n'hébergez jamais le serveur de licences vous-même : il appartient au modèle SaaS root. Vous consommez uniquement la clé.

Plans disponibles :

PlanEffetÉmission
(aucune clé)Mode Community, features core uniquement-
LICENSEDToutes les features EE, mais pas le DSFRVia Stripe Checkout
GOV_LICENSEDToutes les features EE + le thème DSFRManuelle, après qualification gouvernementale

Le DSFR exige GOV_LICENSED

Une licence LICENSED standard ne déverrouille pas le thème DSFR. Seul le plan GOV_LICENSED l'active. C'est la première des deux conditions du thème DSFR (voir section suivante).

Thème DSFR : deux verrous orthogonaux

Le thème par défaut de l'application reste Default (design maison). Le thème DSFR doit être activé explicitement par espace, et il exige deux conditions indépendantes, toutes deux nécessaires :

  1. Verrou organisation (licence) : l'organisation doit avoir l'entitlement THEME_DSFR.
    • En self-host : une LICENSE_KEY de plan GOV_LICENSED valide.
    • En cloud : un plan d'organisation GOV.
  2. Verrou tenant (domaine) : le domaine personnalisé de l'espace doit se terminer par .gouv.fr. C'est une exigence de la charte DSFR : le DSFR est réservé aux sites de l'État servis sur un domaine .gouv.fr.

Les deux verrous sont contrôlés à la fois côté interface (la sélection du thème DSFR dans Administration > Général est désactivée tant que l'une des conditions manque, avec un message indiquant lequel) et côté serveur (la sauvegarde rejette le thème DSFR si le domaine personnalisé n'est pas en .gouv.fr).

Cohérence thème / domaine verrouillée

Une fois le DSFR actif sur un espace, vous ne pouvez plus retirer ni changer le domaine personnalisé vers un domaine non-.gouv.fr : il faut d'abord repasser l'espace en thème Default. Le serveur renvoie une erreur explicite sinon. Cela garantit qu'un espace en DSFR reste toujours servi sur un domaine .gouv.fr.

Activer le DSFR sur un espace :

  1. Posez une LICENSE_KEY de plan GOV_LICENSED.
  2. Configurez le domaine personnalisé de l'espace en .gouv.fr (ex : feedback.monministere.gouv.fr) depuis Administration > Général.
  3. Sélectionnez le thème DSFR dans la section thème de la même page.

Authentification

Sans configuration OAuth, la baseline fonctionne immédiatement : mot de passe + magic link (les deux nécessitent un SMTP fonctionnel, voir Mailer).

ProConnect

ProConnect est la fédération d'identité de l'État pour les agents publics. Le provider OIDC est activé uniquement si les trois variables sont posées.

VariableDescription
OAUTH_PROCONNECT_CLIENT_IDIdentifiant client OIDC fourni par ProConnect
OAUTH_PROCONNECT_CLIENT_SECRETSecret client OIDC
OAUTH_PROCONNECT_ISSUERURL de l'issuer OIDC ProConnect (endpoint de découverte). Vérifiez la valeur de production courante dans la documentation ProConnect, l'issuer évolue

Issuer requis, sinon provider ignoré

Le provider ProConnect n'est activé que si OAUTH_PROCONNECT_CLIENT_ID et OAUTH_PROCONNECT_ISSUER sont renseignés. Si l'issuer manque, le provider est ignoré (avec un avertissement dans les logs) pour éviter que la découverte OIDC ne casse la page de connexion. Renseignez les trois variables ensemble.

Espace Membre (beta.gouv)

Pour les incubateurs beta.gouv, l'intégration Espace Membre connecte les membres beta.gouv via leur compte. Les emails en @beta.gouv.fr et @ext.beta.gouv.fr sont vérifiés contre l'API Espace Membre au login : un membre inactif est bloqué, un membre actif sans compte local voit son compte créé automatiquement.

VariableDescriptionDéfaut
ESPACE_MEMBRE_API_KEYClé API Espace Membre(vide)
ESPACE_MEMBRE_URLURL de l'instance Espace Membrehttps://espace-membre.incubateur.net

OAuth optionnels

GitHub et Google restent disponibles si besoin (par exemple pour des contributeurs externes) :

VariableDescription
OAUTH_GITHUB_CLIENT_ID / OAUTH_GITHUB_CLIENT_SECRETOAuth GitHub
OAUTH_GOOGLE_CLIENT_ID / OAUTH_GOOGLE_CLIENT_SECRETOAuth Google

Chaque fournisseur OAuth doit aussi être activé explicitement par espace (ou sur le domaine racine) via Administration > Authentification pour être proposé sur la page de connexion.

Bootstrap d'une instance fraîche

L'image officielle est un bundle Next.js standalone : ni tsx ni pnpm n'y sont présents, donc prisma db seed n'y fonctionne pas. Le bootstrap d'une instance vierge se fait via la route HTTP POST /api/setup.

VariableDescriptionDéfaut
SETUP_TOKENJeton du endpoint de bootstrap. Vide = route désactivée (403)(vide)
  • La route est désactivée par défaut : sans SETUP_TOKEN, elle renvoie 403.
  • Posez SETUP_TOKEN (valeur secrète forte, ex : openssl rand -base64 32) pour l'activer.
  • Chaque appel doit fournir le header x-setup-token: <SETUP_TOKEN> (sinon 401, comparaison à temps constant).
  • La route est idempotente : 409 si la base contient déjà un espace, sans rien créer.
  • Le corps JSON est optionnel : tout champ absent retombe sur la variable SEED_* correspondante.

Champs du corps JSON :

ChampFallback envDescription
adminEmailSEED_ADMIN_EMAILEmail de l'administrateur initial
adminNameSEED_ADMIN_NAMENom affiché de l'admin
adminPasswordSEED_ADMIN_PASSWORDMot de passe de l'admin (optionnel)
adminUsernameSEED_ADMIN_USERNAMEUsername de l'admin
tenantNameSEED_TENANT_NAMENom du premier espace
tenantSubdomainSEED_TENANT_SUBDOMAINSous-domaine du premier espace ([a-z0-9-]+)
curl -X POST https://instance.example/api/setup \
  -H "x-setup-token: $SETUP_TOKEN" \
  -H "content-type: application/json" \
  -d '{"adminEmail":"admin@monministere.gouv.fr","adminPassword":"un-mot-de-passe-fort"}'

En cas de succès (201), la route crée une organisation, un espace, un administrateur OWNER et les entités de bienvenue (un board + ses statuts), puis renvoie { ok, adminEmail, tenantId, loginUrl }.

Connexion de l'admin

Si vous fournissez un adminPassword, l'admin se connecte directement par mot de passe. Sinon, il se connecte par magic link : un SMTP fonctionnel est alors indispensable. Après le bootstrap, vous pouvez retirer SETUP_TOKEN de l'environnement (la route restant de toute façon idempotente).

Mailer

Le SMTP sert aux magic links, invitations et notifications.

VariableDescriptionDéfaut
MAILER_SMTP_HOSTHôte SMTP127.0.0.1
MAILER_SMTP_PORTPort SMTP1025
MAILER_SMTP_LOGINLogin SMTP(vide)
MAILER_SMTP_PASSWORDMot de passe SMTP(vide)
MAILER_SMTP_SSLActiver TLSfalse
MAILER_FROM_EMAILAdresse d'expédition(calculé)

L'adresse from est résolue dans cet ordre : MAILER_FROM_EMAIL s'il est défini, sinon le login SMTP (MAILER_SMTP_LOGIN), sinon noreply@<domaine de l'instance> (dérivé de SITE_URL).

Posez MAILER_FROM_EMAIL sur votre domaine gouvernemental

Renseignez explicitement MAILER_FROM_EMAIL avec un email de votre domaine gouvernemental, aligné avec vos enregistrements SPF/DKIM/DMARC. Sans cela, les magic links partent en spam ou sont rejetés par les serveurs destinataires, et les agents ne peuvent plus se connecter. Format accepté : "Nom affiché <noreply@monministere.gouv.fr>" ou simplement noreply@monministere.gouv.fr.

Branding État

Le bloc-marque de l'État (République Française et son ministère de rattachement) et le logo opérateur sont les leviers principaux en contexte gouvernemental.

VariableDescriptionDéfaut
BRAND_NAMENom du serviceRoadmaps Faciles
BRAND_TAGLINEAccroche sous le nom(défaut RMF)
BRAND_MINISTRYBloc-marque de l'État (le \n force le retour à la ligne, ex : Ministère\nde l'Exemple)République\nFrançaise
BRAND_OPERATOR_ENABLEAfficher le logo opérateur (true/false)true
BRAND_OPERATOR_LOGO_URLURL du logo opérateur/img/roadmaps-faciles.png
BRAND_OPERATOR_LOGO_ALTTexte alternatif du logoRoadmaps Faciles
BRAND_OPERATOR_LOGO_ORIENTATIONOrientation du logo (vertical/horizontal)vertical

Pages légales

Les valeurs par défaut pointent vers Roadmaps Faciles et son hébergeur (Scalingo). Un opérateur gouvernemental doit toutes les remplacer : elles alimentent les pages /mentions-legales, /politique-de-confidentialite et /cgu.

VariableDescriptionDéfaut
LEGAL_PUBLISHER_NAMEÉditeur du siteRoadmaps Faciles
LEGAL_PUBLISHER_ADDRESSAdresse de l'éditeur(vide)
LEGAL_PUBLICATION_DIRECTORDirecteur de la publicationLe responsable légal de Roadmaps Faciles
LEGAL_HOSTING_NAMENom de l'hébergeurScalingo SAS
LEGAL_HOSTING_ADDRESSAdresse de l'hébergeur15 avenue du Rhin, 67100 Strasbourg, France
LEGAL_HOSTING_CONTACTContact de l'hébergeursupport@scalingo.com
LEGAL_HOSTING_PRIVACY_URLPolitique de confidentialité de l'hébergeur(Scalingo)
LEGAL_CONTACT_EMAILEmail de contact publiccontact@roadmaps-faciles.fr
LEGAL_RGPD_EMAILEmail du délégué à la protection des donnéesrgpd@roadmaps-faciles.fr

Stockage et résidence des données

Roadmaps Faciles utilise un stockage S3-compatible pour les fichiers uploadés. Pour la résidence des données en France, deux options principales :

  • Garage (recommandé en self-host) : stockage S3-compatible léger, hébergé sur votre propre infrastructure. Défaut du scénario docker-compose.
  • Scaleway Object Storage : stockage S3 managé avec régions en France (fr-par), pour garantir la résidence des données sur le territoire national.
VariableDescriptionDéfaut
STORAGE_PROVIDERs3 (ou noop pour désactiver l'upload)noop
STORAGE_S3_ENDPOINTEndpoint S3 (ex : http://garage:3900, ou l'endpoint Scaleway)-
STORAGE_S3_REGIONRégion (ex : garage, fr-par)us-east-1
STORAGE_S3_BUCKETNom du bucket-
STORAGE_S3_ACCESS_KEY_ID / STORAGE_S3_SECRET_ACCESS_KEYCredentials S3-
STORAGE_S3_KEY_PREFIXPréfixe de clé (optionnel, pour mutualiser un bucket)(vide)
STORAGE_MAX_FILE_SIZE_MBTaille max par fichier (Mo)5

Pour le détail du provisioning Garage (secret RPC, access keys, bucket auto-créé au premier boot), voir le scénario docker-compose.

Checklist conformité

Le secteur public impose des obligations réglementaires à traiter avant la mise en production :

  • Accessibilité (RGAA) : la page /accessibilite est livrée comme placeholder déclarant l'état "non conforme". Réalisez un audit RGAA et complétez la déclaration d'accessibilité conforme avant la mise en service.
  • RGPD / CNIL : renseignez toutes les variables LEGAL_*, désignez un DPO joignable via LEGAL_RGPD_EMAIL, et tenez à jour la politique de confidentialité (/politique-de-confidentialite).
  • Résidence des données : hébergez la base PostgreSQL et le stockage S3 en France ou dans l'UE (Garage auto-hébergé, ou Scaleway région fr-par).
  • Tracking CNIL-compatible : si vous activez l'analytique, choisissez une solution conforme (Matomo auto-hébergé sans cookie), ou désactivez le tracking avec TRACKING_PROVIDER=noop. Évitez les solutions transférant des données hors UE sans encadrement.
  • Pages légales : mentions légales (/mentions-legales), CGU (/cgu) et politique de confidentialité (/politique-de-confidentialite) renseignées avec les informations réelles de l'opérateur.
  • Secrets uniques par instance : SECURITY_JWT_SECRET, SECURITY_WEBHOOK_SECRET, INTEGRATION_ENCRYPTION_KEY, SETUP_TOKEN générés et propres à votre instance, jamais réutilisés d'un exemple.
  • SMTP de production : MAILER_FROM_EMAIL sur le domaine gouvernemental, aligné SPF/DKIM/DMARC.

Templates repo

Le guide d'hébergement détaillé par scénario et les templates prêts à l'emploi sont dans le repo sous docs/self-host/, avec un guide GOUVERNEMENTAL.md dédié.

Self-hosting

Guide complet pour déployer Roadmaps Faciles sur votre propre infrastructure.

Sécurité

Modèle de sécurité, isolation des données et mécanismes de protection.

On this page

Vue d'ensembleLicence GovThème DSFR : deux verrous orthogonauxAuthentificationProConnectEspace Membre (beta.gouv)OAuth optionnelsBootstrap d'une instance fraîcheMailerBranding ÉtatPages légalesStockage et résidence des donnéesChecklist conformité