Déployer dans votre infrastructure
Préparez, configurez et validez le socle applicatif Maleus dans votre cloud privé, votre datacenter ou votre plateforme orchestrée.
Dans l'appApplication · InfrastructureMis à jour 19 septembre 2026
Sur cette page
- Comprendre la topologie de référence
- Préparer votre plateforme
- Construire et publier des images immuables
- Configurer sans exposer les secrets
- Conteneur PostgreSQL
- Backend
- Frontend et SDK Maleus
- Configurer le SSO
- Orchestrer le démarrage et les migrations
- Adapter le contrat à l'orchestrateur
- Docker Compose
- Kubernetes et OpenShift
- ECS ou Nomad
- Terminer TLS, persistance et health checks


Vous recevez le socle avec des Dockerfiles de référence et un contrat d'exécution portable. Votre plateforme fournit le registre, le réseau, les secrets, la terminaison TLS, le stockage persistant et la supervision. Vous raccordez ensuite les intégrations propres à votre application.
Cette procédure vous présente les invariants à conserver, puis les choix à adapter à Docker Compose, Kubernetes, OpenShift, ECS ou Nomad.
Comprendre la topologie de référence
Le runtime nominal réunit trois rôles :
/api/*ainsi que/sso/*vers le backend ;Le navigateur accède à votre application par le frontend. Le backend et PostgreSQL restent sur le réseau privé. PostgreSQL peut être conteneurisé avec un volume persistant ou remplacé par un service managé compatible.
Les ports par défaut sont
3000pour le frontend,14000pour le backend et5432pour PostgreSQL. Ils peuvent changer tant que les services, probes et règles réseau utilisent les mêmes valeurs. Le frontend et le backend ne s'appuient pas sur leur filesystem local pour stocker les données métier.Préparer votre plateforme
Avant le premier déploiement, réunissez :
Le build part de la racine du repository afin d'inclure le workspace et son lockfile. Les Dockerfiles de référence ciblent actuellement
linux/amd64. Si votre plateforme utilise une autre architecture CPU, prévoyez un build et une recette dédiés.Les Dockerfiles utilisent la syntaxe BuildKit
docker/dockerfile:1etCOPY --parents. Utilisez Docker avec BuildKit ou, pour unBuildConfigOpenShift, Buildah 1.40 ou plus récent. La résolution de l'image de syntaxe peut aussi nécessiter un accès sortant au registre Docker pendant le build.L'image backend lance des commandes
pnpmau démarrage via Corepack. Si la version attendue de pnpm n'est pas déjà présente dans le cache de l'image, autorisez l'accès sortant àregistry.npmjs.orgou préparez cette version dans l'image avant sa publication.Construire et publier des images immuables
Construisez le frontend et le backend depuis le même commit :
Publiez un tag immuable ou un digest, puis conservez les deux références dans la preuve de recette. Aucun secret ne doit être injecté au build ou rester dans une couche d'image. Le build frontend conserve
MOCK_API=falseafin de produire votre application reliée à l'API réelle.L'image officielle PostgreSQL suffit lorsque vos migrations n'utilisent que les extensions disponibles sur votre plateforme. Le Dockerfile PostgreSQL du socle permet de dériver une image si votre projet requiert une extension supplémentaire. Fixez alors la version et les extensions dans votre matrice de compatibilité.
Configurer sans exposer les secrets
Injectez la configuration au runtime. Conservez les valeurs secrètes dans le mécanisme de secrets de votre plateforme et ne les committez jamais.
Conteneur PostgreSQL
POSTGRES_USERPOSTGRES_DBPOSTGRES_PASSWORDPGDATABackend
APP_ENVIRONMENTPOSTGRES_HOST,POSTGRES_PORTPOSTGRES_DB_NAME,POSTGRES_DB_USERPOSTGRES_PASSWORDPOSTGRES_DB_USER_PASSWORDJWT_SECRET,COOKIE_SECRET,PASSWORD_PEPPERBACKEND_URLLe backend accepte aussi des variables conditionnelles ou optionnelles :
DEFAULT_USER_PASSWORDpour le bootstrap initial ;FRONTEND_URLpour les redirections SSO ;PORT, avec14000par défaut ;POSTGRES_SSLetPOSTGRES_SSL_CApour PostgreSQL sur TLS ;NODE_EXTRA_CA_CERTSpour une PKI privée, notamment celle d'un IdP ;CORS_ALLOWED_ORIGINSpour une topologie réellement cross-origin ;COOKIE_DOMAINpour partager explicitement une session entre plusieurs hosts ;WORKSPACE_SSO_ENABLEDpour les fournisseurs SSO propres aux workspaces ;CRON_ENABLED,CRON_INSTANCE_IDetCRON_SHUTDOWN_DRAIN_MSpour les tâches planifiées ;LOG_LEVELpour le niveau des logs ;HTTPS_PROXYetNO_PROXYlorsque l'accès sortant de Corepack passe par un proxy d'entreprise ;COREPACK_HOMElorsque votre plateforme impose un UID arbitraire ;OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_SERVICE_NAME,OTEL_TRACES_EXPORTERetOTEL_SDK_DISABLEDpour OpenTelemetry.DATABASE_URLpeut configurer le pool applicatif, mais ne remplace pas les variables PostgreSQL séparées dans l'image actuelle : le bootstrap lancé au démarrage les consomme encore.OpenTelemetry reste désactivé tant qu'aucun exporteur n'est configuré.
OTEL_EXPORTER_OTLP_ENDPOINTactive l'envoi vers le collecteur,OTEL_SERVICE_NAMEidentifie votre application dans les traces,OTEL_TRACES_EXPORTER=consolesert aux vérifications locales etOTEL_SDK_DISABLED=trueforce la désactivation.Dans l'image backend actuelle, le bootstrap PostgreSQL s'authentifie avec
POSTGRES_DB_USERetPOSTGRES_PASSWORD, puis le runtime applicatif utilisePOSTGRES_DB_USERetPOSTGRES_DB_USER_PASSWORD. Avec le conteneur PostgreSQL nominal, ces valeurs désignent généralement le même compte et le même secret. Une séparation stricte entre compte d'administration et compte applicatif nécessite d'adapter le job ou l'entrypoint de bootstrap.Frontend et SDK Maleus
BACKEND_URL/api/*et/sso/*PROJECT_NAMEBACKEND_API_URLBASE_PATHPORT3000par défautFRAME_ANCESTORSMALEUS_APP_API_KEYMALEUS_API_PUBLIC_URL,MALEUS_FRONTEND_PUBLIC_URLMALEUS_PROJECT_ID,MALEUS_ENVIRONMENTMALEUS_SDK_CONFIGLe SDK Maleus est optionnel et désactivé lorsque
MALEUS_APP_API_KEYest vide. Cette clé est une information sensible de configuration à portée limitée, mais pas un secret serveur : lorsqu'elle est activée, le frontend l'injecte dansmaleus-config.jset le navigateur peut la lire. Elle ne doit accorder aucun privilège administratif ni accès aux données applicatives.MALEUS_SDK_CONFIGcontient un objet JSON valide. Une valeur absente ou invalide applique une configuration fermée qui désactive le widget et ses fonctionnalités. Lorsque le SDK est activé, les navigateurs doivent pouvoir joindre en HTTPS les origines définies parMALEUS_FRONTEND_PUBLIC_URLetMALEUS_API_PUBLIC_URL.Cette liste couvre le socle courant. Les variables propres aux fonctionnalités générées, comme le stockage objet, le SMTP, les API métier ou d'autres intégrations, sont ajoutées depuis le code et le contrat de configuration du repository livré.
Configurer le SSO
Configurez les fournisseurs OIDC ou SAML dans l'interface d'administration. Le socle les conserve en base. Leurs issuer, client ID, client secret, certificats et mappings ne sont pas des variables d'environnement du socle.
Sur le backend, définissez
BACKEND_URLetFRONTEND_URLavec l'URL publique complète de votre application, préfixe de chemin compris. Les routes de connexion et de callback utilisent le chemin/sso/...sous l’URL publique et passent par le proxy/sso/*du frontend. Le backend reste privé.Si l'IdP utilise une autorité de certification privée, montez la chaîne CA PEM dans le backend et définissez
NODE_EXTRA_CA_CERTSvers ce fichier.WORKSPACE_SSO_ENABLED=falsedésactive les fournisseurs propres aux workspaces.Orchestrer le démarrage et les migrations
Le premier backend suit une séquence ordonnée :
Le frontend reçoit du trafic lorsque le backend est prêt. Le modèle de base démarre un seul backend contre une base donnée pendant les migrations. Pour plusieurs replicas, exécutez la migration dans un job exclusif ou séparez le bootstrap du serveur avant d'autoriser le déploiement parallèle.
Avant une migration sensible, produisez une sauvegarde restaurable. Une recette de restauration valide la procédure, le temps de reprise et les permissions nécessaires.
Adapter le contrat à l'orchestrateur
Docker Compose
Le fichier de déploiement contient un volume nommé PostgreSQL, un health check
pg_isready, un backend dépendant de la base saine et un frontend dépendant du backend. Seul le port frontend est publié.Injectez les secrets sous forme de variables d'environnement à l'aide du mécanisme de votre plateforme, ou depuis un fichier local ignoré par Git pour une validation Compose. Les Docker secrets montés comme fichiers nécessitent un entrypoint d'adaptation, car les images actuelles ne lisent pas automatiquement les variantes
*_FILE.Ajoutez une politique de redémarrage aux services.
depends_onordonne le premier démarrage, mais ne garantit pas qu'un backend redémarré attendra PostgreSQL. Le backend s'arrête volontairement si son bootstrap échoue et doit alors être relancé. Validez la configuration résolue, contrôlez l'état des services et inspectez les logs. Un second démarrage doit rester idempotent.Kubernetes et OpenShift
Déployez le frontend et le backend dans des
Deploymentséparés, avec desServiceprivés. L'Ingress ou la Route cible uniquement le frontend. PostgreSQL utilise un service managé ou unStatefulSetavec volume persistant.Distinguez
startupProbe,readinessProbeetlivenessProbe. Tant que les migrations restent au démarrage du backend, conservez un replica ou lancez un job de migration exclusif. Sur OpenShift, validez aussi la politique SCC, l'UID d'exécution, le filesystem en lecture seule et les droits des volumes. Si votre plateforme impose un UID arbitraire, définissezCOREPACK_HOME=/tmp/corepacket rendez/tmpinscriptible.ECS ou Nomad
Sur ECS, le frontend et le backend peuvent partager une task et communiquer par
localhost, ou devenir des services séparés reliés par le réseau privé. L'ALB cible le frontend. Les secrets viennent du gestionnaire de secrets de votre plateforme et les logs sont centralisés.Sur Nomad, regroupez les tâches qui communiquent par loopback ou déclarez des services privés. Les checks pilotent le redémarrage et le retrait du trafic. Le volume PostgreSQL est fourni par CSI ou remplacé par une base managée. La stratégie d'update empêche deux migrations simultanées.
Terminer TLS, persistance et health checks
Le reverse proxy ou le load balancer termine TLS, redirige HTTP vers HTTPS et applique HSTS. Il transmet correctement le host et le protocole d'origine.
/api/*et/sso/*entrent par le frontend, qui relaie les requêtes vers le backend privé. Le navigateur ne joint pas directement le backend.Pour servir votre application sous
/myapp, configurezBASE_PATH=/myappetBACKEND_API_URL=/myapp/apisur le frontend, puisBACKEND_URL=https://application.example/myappet, si le SSO est utilisé,FRONTEND_URL=https://application.example/myappsur le backend. Routez tout le préfixe/myappvers le frontend sans réécriture d'URL. Le frontend sert la SPA et relaie/myapp/api/*ainsi que/myapp/sso/*. La même image frontend peut être réutilisée sans rebuild.Les contrôles de santé de référence sont :
pg_isready;GET /server/health-check;GET /api/server/health-check;BASE_PATH.Le health check backend renvoie
200lorsque les dépendances contrôlées sont saines et503dans le cas contraire. Les délais de démarrage couvrent la durée des migrations sans provoquer une boucle de redémarrage.PostgreSQL porte la persistance du socle nominal. La politique d'exploitation précise le RPO, le RTO, la rétention, le chiffrement, la supervision des sauvegardes et la fréquence des tests de restauration. Chaque stockage ajouté par le projet suit sa propre politique.