Variables d’environnement et secrets
Configurez chaque application, partagez via des jeux de variables, et gardez vos secrets hors de Git.
La configuration qui change d’un environnement à l’autre — une URL de base, un jeton d’API, un drapeau de fonctionnalité — appartient aux variables d’environnement, pas au dépôt. DockBoard les stocke chiffrées et les injecte au démarrage du conteneur.
Par application
L’onglet Environnement d’une application. Ajoutez clés et valeurs, enregistrez, redéployez. Les valeurs sont chiffrées au repos et ne ressortent jamais dans un log de déploiement ou une sortie de build.
Partagées à l’échelle d’un projet
Six applications qui ont toutes besoin du même REDIS_URL ne doivent pas en porter six copies. Un jeu de variables de projet se définit une fois et atteint toutes les applications du projet.
Un jeu est soit valable pour tout le projet, soit limité à un environnement. D’où la forme réellement souhaitée : un DATABASE_URL pour la préproduction, un autre pour la production, sous le même nom de clé.
Quelle valeur l’emporte
Trois couches, de la plus large à la plus étroite. La suivante l’emporte sur la précédente :
project-wide set REDIS_URL=redis://shared:6379
↓ beaten by
environment set REDIS_URL=redis://staging:6379
↓ beaten by
the application itself REDIS_URL=redis://localhost:6379Le tableau de bord indique, pour chaque clé que l’application recevra réellement, de quelle couche elle vient. C’est la réponse à « pourquoi cette variable n’est-elle pas celle que j’ai posée » sans avoir à raisonner sur l’ordre.
Les variables que votre dépôt transporte déjà
Un déploiement depuis Git n’ignore pas les fichiers .env versionnés dans le dépôt — un projet qui démarre en local sur ses valeurs par défaut doit démarrer ici aussi. Ils sont lus depuis le clone et fusionnés sous tout ce qui est défini dans DockBoard : rien dans le dépôt ne peut donc déplacer discrètement une valeur posée depuis le tableau de bord.
Dans un même dossier, cinq noms sont lus dans cet ordre, chacun l’emportant sur les précédents :
.env.example → .env.local.example → .env.production → .env → .env.local.env.example est lu volontairement, à la priorité la plus basse : un dépôt qui ne fournit qu’un modèle se déploie quand même du premier coup. Mais si rien d’autre ne définit une clé, ce paramètre fictif devient la valeur de production — le log de build nomme donc chaque clé fournie par un seul modèle, et signale celles qui semblent non modifiées. JWT_SECRET=change_me dans un dépôt public est un secret public.Monorepos : deux dossiers, pas un
Quand une application vit dans un sous-dossier d’un monorepo, les cinq noms ci-dessus sont lus deux fois : une fois à la racine du clone, une fois dans le sous-dossier de l’application. Le sous-dossier l’emporte.
C’est ce qui fait qu’un .env à la racine d’un monorepo se comporte comme ses auteurs l’entendaient : des valeurs par défaut communes à tous les packages, chaque package restant libre de surcharger ce qui le concerne. Rien à configurer pour l’obtenir : cela s’applique dès que l’application a un chemin de sous-dossier.
L’ordre complet
Cinq couches, pour une application en monorepo déployée depuis Git dans un projet qui partage des variables. La suivante l’emporte sur la précédente, sans exception :
1 monorepo root .env* committed, shared by every package
2 sub-folder .env* committed, belongs to this application
3 project-wide set DockBoard, every environment
4 environment set DockBoard, one environment
5 the application itself DockBoard, this applicationLa ligne de partage passe entre 2 et 3 : tout ce qui est versionné dans le dépôt se situe sous tout ce qui est défini dans DockBoard. Un DATABASE_URL dans un .env versionné est une valeur par défaut de développement local ; celui de votre jeu de projet est le vrai, et il l’emporte à chaque déploiement.
.env versionné ; le log de build les nomme.Comment les secrets sont traités
- Les valeurs sont chiffrées au repos avec la clé de chiffrement de l’instance, pas stockées en colonnes claires.
- Les lire ou les écrire exige
apps:env— une permission qui ne fait pas partie du rôle en lecture seule. Voir votre application n’implique pas voir ses secrets. Voir rôles. - Modifier le jeu partagé du projet est soumis à la même permission que l’onglet par application. Il détient les mêmes secrets de production : il ne doit pas être la porte la moins gardée.
- Une clé API ne les atteint qu’avec le scope
project:apps:env, que vous pouvez refuser tout en accordant le droit de déployer.
apps:exec). Si une valeur ne doit pas être lisible par ceux qui exploitent l’application, elle n’a pas sa place dans une variable d’environnement.Les variables que DockBoard renseigne pour vous
Une base gérée expose une chaîne de connexion à coller telle quelle dans une variable, pointant déjà sur le nom du réseau de projet et non sur une adresse publique. C’est le chemin prévu : les applications joignent leur base par le réseau privé, et la base n’est jamais publiée.