Pourquoi auto-héberger votre gestionnaire de secrets
Stocker ses secrets dans un coffre-fort SaaS, c'est faire transiter ses identifiants les plus sensibles par le serveur d'un tiers. Auto-héberger Infisical maintient chaque secret sur votre propre infrastructure, sous vos propres contrôles d'accès et journaux d'audit. Cela supprime aussi un abonnement SaaS récurrent : Infisical est sous licence MIT, gratuit à auto-héberger, et remplace directement des outils payants comme Doppler (6 $/développeur/mois) ou la complexité de HashiCorp Vault. Avec un seul VPS et un nom de domaine, toute votre équipe et chacun de vos pipelines CI peuvent récupérer les secrets par programmation — fini les fichiers .env commités par accident.
Ce que vous apporte Infisical auto-hébergé
- Un coffre-fort centralisé pour chaque environnement (dev, staging, prod) avec des politiques d'accès par environnement.
- Des SDK natifs pour Node.js, Python, Go, Java, Ruby et d'autres — injectez les secrets à l'exécution, plutôt que via des fichiers .env.
- Des intégrations GitHub Actions, GitLab CI, CircleCI et Jenkins : les secrets sont synchronisés automatiquement vers vos pipelines.
- Un contrôle d'accès basé sur les rôles, des jetons de service et des identités machine — sans identifiants root partagés.
- Un journal d'audit complet : chaque lecture, écriture et rotation est enregistrée avec l'utilisateur, l'IP et l'horodatage.
- Rotation et versionnement des secrets — revenez à une version antérieure d'un secret en un clic si un identifiant est compromis.
Infisical vs Vault vs Doppler vs Bitwarden Secrets
Faites défiler le tableau
| Outil | Modèle | Auto-hébergement | Prix indicatif | Particularité |
|---|---|---|---|---|
| **Infisical** | Open source (MIT) | Oui — Docker Compose, 4 Go RAM | Gratuit (self-hosted) | RBAC natif, rotation auto, SDK multi-langages |
| HashiCorp Vault | BSL (source available) | Oui — complexe à opérer | Gratuit (community) | Secret engines avancés, PKI, transit encryption |
| Doppler | SaaS propriétaire | Non | 6 $/dev/mois | UX soignée, sync CI/CD sans serveur |
| Bitwarden Secrets | Open source (AGPL) | Oui — serveur Bitwarden | Gratuit (self-hosted) | Intégration coffre-fort de mots de passe |
Prérequis
Un VPS doté d'au moins 2 vCPU et 4 Go de RAM sous Ubuntu 22.04 — PostgreSQL et Node.js sont gourmands en mémoire lorsqu'ils traitent des requêtes concurrentes ; en dessous de 4 Go, Infisical redémarre sous charge. Un disque de 20 Go minimum pour les journaux d'audit sur le long terme. Docker et Docker Compose installés (docker compose version doit retourner v2.x). Un nom de domaine pointant vers votre VPS — Infisical exige une URL publique pour les redirections OAuth, les liens d'invitation par e-mail et le modèle de sécurité du navigateur (SITE_URL n'est pas optionnel). Un enregistrement DNS A ou CNAME déjà propagé avant de démarrer Caddy ou nginx pour l'émission du certificat Let's Encrypt.
Déployer Infisical avec Docker Compose
Générer les secrets
Infisical a besoin de deux secrets indépendants : une
ENCRYPTION_KEY(hex de 16 octets :openssl rand -hex 16) pour chiffrer au repos les données du coffre-fort, et unAUTH_SECRET(chaîne aléatoire :openssl rand -base64 32) pour signer les jetons JWT. Stockez les deux dans un fichier.envà côté de votre fichier Compose — ne committez jamais ce fichier dans le gestionnaire de versions.Rédiger le fichier Compose
La stack comporte trois services :
postgres:14-alpine(le magasin de secrets),redis:alpine(tâches de fond et cache de session) etinfisical/infisical:latest(l'application, port 8080). RenseignezDB_CONNECTION_URI,REDIS_URL,SITE_URL(votre domaine,https://secrets.votre-domaine.com) et les deux secrets. Démarrez la stack avecdocker compose up -d.Pour épingler une version stable plutôt que
latest, consultez les releases sur GitHub et remplacez parinfisical/infisical:v0.91.1(version courante en octobre 2026).Configurer le reverse proxy avec nginx ou Caddy
Infisical exige du HTTPS — sans certificat TLS valide, le navigateur bloque les flux OAuth.
Option Caddy (recommandée) : créez
/etc/caddy/Caddyfileavecsecrets.votre-domaine.com { reverse_proxy localhost:8080 }. Caddy provisionne automatiquement un certificat Let's Encrypt. Redémarrez avecsystemctl reload caddy.Option nginx : créez un vhost avec
proxy_pass http://127.0.0.1:8080;, puis émettez le certificat via Certbot (certbot --nginx -d secrets.votre-domaine.com). Ajoutez les en-têtesproxy_set_header Host $host;etproxy_set_header X-Real-IP $remote_addr;pour que les journaux d'audit enregistrent l'IP réelle du client, pas127.0.0.1.Créer le premier compte administrateur
Ouvrez votre domaine dans un navigateur et accédez à
/admin/signup— c'est l'assistant à usage unique qui crée le compte Super Admin puis votre organisation. Le premier arrivé sur cet écran devient administrateur de l'instance. Créez ensuite votre premier projet (un espace de noms logique pour des secrets liés), ajoutez des environnements (dev,staging,prod) et invitez les membres de votre équipe.Intégrer à vos applications et à votre CI
Installez la CLI Infisical (
npm install -g @infisical/cli) ou un SDK dans votre projet. Exécutezinfisical run -- node server.jspour injecter les secrets à l'exécution — votre application litprocess.env.MY_SECRETcomme s'il provenait d'un .env local, mais la valeur vient du coffre-fort. Pour GitHub Actions, installez l'action officielle Infisical et ajoutez un jeton de service comme secret de dépôt.Se connecter la première fois
Ouvrez l'adresse
/admin/signupde votre instance tout de suite : c'est l'assistant à usage unique qui crée le compte Super Admin puis votre organisation. Le premier arrivé sur cet écran devient administrateur de l'instance.
Configuration avancée : RBAC, politiques de secrets et rotation automatique
Une fois l'instance en place, trois fonctions avancées renforcent la sécurité opérationnelle.
RBAC (contrôle d'accès basé sur les rôles) : Infisical distingue quatre rôles prédéfinis — owner, admin, developer, viewer. Attribuez le rôle viewer aux pipelines CI qui n'ont besoin que de lire, developer aux développeurs et admin aux responsables de projet. Les identités machine (Machine Identities) permettent d'associer un rôle directement à une application sans jeton de service manuel : elles s'authentifient via AWS IAM, Azure AD ou un jeton Kubernetes et sont préférables aux jetons à longue durée de vie.
Politiques de secrets : dans Settings → Project → Secret Protection, activez les approbations avant écrasement d'un secret de production. Un second administrateur devra valider chaque modification — utile pour les équipes soumises à SOC 2 ou ISO 27001.
Rotation automatique : Infisical propose des templates de rotation natifs pour PostgreSQL, MySQL, AWS IAM et GitHub. Dans l'onglet Rotation de votre projet, créez un job de rotation avec la fréquence souhaitée (ex. tous les 30 jours pour un mot de passe de base de données). Infisical génère la nouvelle valeur, la pousse dans le coffre-fort et notifie les applications via webhook — sans intervention manuelle.
Intégration CI/CD : GitHub Actions, GitLab CI, Docker Compose
GitHub Actions : ajoutez l'action officielle dans votre workflow et passez un jeton de service comme secret de dépôt (INFISICAL_TOKEN). Les secrets sont injectés comme variables d'environnement avant chaque job.
- uses: Infisical/secrets-action@v1
with:
token: ${{ secrets.INFISICAL_TOKEN }}
project-id: "<votre-project-id>"
environment: "prod"GitLab CI : utilisez la CLI Infisical dans un before_script. Ajoutez INFISICAL_TOKEN dans les variables CI/CD du dépôt.
before_script:
- infisical run --env prod -- env | grep MY_SECRETDocker Compose (runtime) : la CLI Infisical peut générer un fichier .env à la volée avant de lancer Compose, ou injecter directement via infisical run -- docker compose up -d. Évitez de stocker un .env généré dans une image — préférez l'injection à l'exécution pour ne jamais sérialiser un secret dans une couche Docker.
Dépannage : erreurs fréquentes
Error: connect ECONNREFUSED 127.0.0.1:6379 (Redis) — Redis n'est pas démarré ou le service infisical démarre avant que Redis soit prêt. Ajoutez depends_on: redis dans votre docker-compose.yml et vérifiez que le conteneur Redis est healthy avec docker compose ps. Si Redis tourne mais l'erreur persiste, contrôlez que REDIS_URL est bien redis://redis:6379 (nom du service Compose, pas localhost).
Error: unable to verify the first certificate (TLS) — le certificat Let's Encrypt n'a pas encore été émis (propagation DNS incomplète) ou Caddy/nginx ne peut pas atteindre l'ACME challenge. Vérifiez que le port 80 est ouvert dans votre pare-feu (ufw allow 80) — Caddy en a besoin pour le challenge HTTP-01 lors de l'émission initiale. Ensuite, basculez en challenge DNS-01 si l'IP est derrière un NAT.
docker compose up échoue avec Bind for 0.0.0.0:8080 failed: port is already allocated — un autre process écoute sur 8080. Changez le mapping de port dans Compose (8081:8080) et adaptez la config du reverse proxy en conséquence.
Page /admin/signup inaccessible après le premier login — c'est voulu : l'assistant ne s'affiche qu'une seule fois. Si vous avez besoin de le rejouer (instance de test), supprimez la table Organization et relancez Infisical.
Les secrets ne s'injectent pas dans GitHub Actions — vérifiez que l'environment passé à l'action correspond exactement au nom d'environnement créé dans Infisical (sensible à la casse : prod ≠ Prod).
Sauvegardes et mises à jour
Sauvegardes PostgreSQL : les secrets chiffrés vivent dans PostgreSQL. Planifiez un pg_dump quotidien avec docker exec infisical_postgres pg_dump -U infisical infisical > backup-$(date +%Y%m%d).sql. Chiffrez la sauvegarde avant de la transférer hors site — elle contient les secrets chiffrés au repos, mais une fuite de la base combinée à une fuite de ENCRYPTION_KEY expose l'ensemble du coffre-fort.
Mises à jour d'Infisical : l'image infisical/infisical:latest se met à jour à chaque nouveau tag. Pour une montée de version contrôlée, épinglez la version (v0.91.1), consultez le changelog GitHub avant chaque mise à jour (certaines versions comportent des migrations de base de données), puis procédez dans cet ordre :
1. docker compose pull pour télécharger la nouvelle image.
2. docker compose up -d — Docker Compose recrée uniquement les conteneurs dont l'image a changé.
3. Vérifiez que la page de connexion répond et que les journaux ne signalent pas d'erreur de migration.
Surveillance : exposez le endpoint /healthcheck d'Infisical dans votre outil de supervision (Uptime Kuma, Gatus) pour être alerté en cas d'interruption. Un coffre-fort de secrets inaccessible bloque tous les déploiements qui en dépendent.
Verrouillez votre instance Infisical immédiatement après l'installation
Avant d'inviter votre équipe, désactivez la page d'inscription publique dans Settings → Authentication → Allow signups. Infisical n'accepte alors que les utilisateurs invités par un administrateur. Activez également la vérification par e-mail et, si votre équipe utilise l'OAuth GitHub ou Google, configurez ces fournisseurs dans Settings → SSO — ils sont plus sûrs qu'une connexion par mot de passe seul.