Sécurité & Monitoring10 min de lecture

Passbolt sur VPS : coffre-fort d'équipe, sans abonnement

Les gestionnaires de mots de passe d'équipe atteignent 4 à 6 dollars par utilisateur et par mois en 2026, sans jamais vous donner accès au journal d'audit. Passbolt Community Edition (AGPL-3.0) transforme un VPS en coffre-fort d'équipe : chaque secret est chiffré avec la clé GPG du destinataire, aucun mot de passe ne transite en clair, et vous savez à tout moment qui a consulté quoi. Sur un seul vCPU avec 2 Go de RAM, la stack tient entièrement — et si l'équipe grandit, vous montez le serveur, vous ne renégociez pas un contrat.

Pourquoi self-héberger son gestionnaire de mots de passe d'équipe

Un SaaS de gestion de secrets d'équipe résout le problème du partage, mais il en crée un autre : vous ne contrôlez ni où les secrets résident, ni qui y a accès côté éditeur. Lorsqu'un employé quitte l'agence, la révocation dépend de la réactivité de votre administrateur sur une interface tierce — et le journal d'audit, quand il existe, est souvent réservé aux plans Enterprise.

Passbolt Community Edition retourne la logique : chaque secret est chiffré côté client avec la clé GPG du destinataire avant d'atteindre le serveur. Même un administrateur système ayant un accès root à la base de données ne peut pas lire un mot de passe en clair. Le log d'audit enregistre chaque consultation par entrée et par utilisateur — c'est ce que les équipes comptables appellent une trace non répudiable.

Ce que Passbolt CE apporte à votre agence

  • Chiffrement GPG par destinataire — le secret ne quitte jamais le client en clair ; le serveur ne stocke que des données chiffrées, illisibles sans la clé privée de l'utilisateur.
  • Log d'audit granulaire — qui a consulté, modifié ou partagé chaque entrée, avec horodatage ; indispensable lors du départ d'un membre d'équipe.
  • Partage par entrée, pas par dossier — vous partagez le secret du client A avec la personne A uniquement, sans exposer les secrets du client B.
  • API REST native — intégration possible dans vos pipelines CI/CD pour injecter des secrets à la volée sans les écrire dans le dépôt.
  • Extension navigateur officielle — disponible sur Chrome, Firefox et Edge ; remplit les formulaires comme un gestionnaire SaaS.
  • Gratuit et open source (AGPL-3.0) — pas de limite d'utilisateurs sur la Community Edition, le code est auditable sur GitHub.
  • Scalabilité verticale — si l'équipe double, on monte le VPS ; aucun renegociation de contrat, aucun palier tarifaire à franchir.

Prérequis pour l'installation

Passbolt CE avec PostgreSQL 16 tient dans 2 Go de RAM : comptez environ 1 Go pour le conteneur Passbolt et 512 Mo pour PostgreSQL, le reste couvrant l'OS et les buffers. Un seul vCPU suffit pour une équipe de moins de cinquante personnes.

Côté stack : Docker et Docker Compose installés, un nom de domaine pointant vers votre VPS (Passbolt refuse de démarrer en HTTP — HTTPS est une précondition, pas une option), et un accès SMTP sortant (port 587/STARTTLS ou 465/SSL). Sans SMTP configuré, le conteneur ne démarre pas : les invitations et la récupération de compte passent par e-mail.

Déploiement de Passbolt CE sur votre VPS

01

Préparer le répertoire et récupérer la configuration officielle

Connectez-vous à votre VPS en SSH et créez un répertoire dédié :

mkdir -p /opt/passbolt && cd /opt/passbolt
curl -fsSL https://raw.githubusercontent.com/passbolt/passbolt_docker/master/docker-compose/docker-compose-ce.yaml \
  -o docker-compose.yml

Ce fichier déclare deux services : db (image postgres:16) et passbolt (image passbolt/passbolt:latest-ce-non-root), avec deux volumes nommés pour persister les données. En production, épinglez une version fixe — remplacez latest-ce-non-root par le tag de la dernière release stable disponible sur le Docker Hub officiel.

02

Configurer les variables d'environnement

Créez un fichier .env à la racine du répertoire. Les variables minimales requises :

APP_FULL_BASE_URL=https://passbolt.votredomaine.com
DATABASE_HOST=db
DATABASE_PORT=5432
DATABASE_NAME=passbolt
DATABASE_USERNAME=passbolt
DATABASE_PASSWORD=mot_de_passe_fort
POSTGRES_PASSWORD=mot_de_passe_fort
EMAIL_TRANSPORT_DEFAULT_HOST=smtp.votrefournisseur.com
EMAIL_TRANSPORT_DEFAULT_PORT=587
EMAIL_TRANSPORT_DEFAULT_TLS=true
[email protected]
EMAIL_TRANSPORT_DEFAULT_PASSWORD=mot_de_passe_smtp
[email protected]

APP_FULL_BASE_URL doit impérativement commencer par https:// — Passbolt utilise cette valeur pour construire les liens dans les e-mails d'invitation et comme base du JWT.

03

Ajouter un healthcheck PostgreSQL et démarrer la stack

Éditez docker-compose.yml pour ajouter une condition de santé sur le service db — sans cela, Passbolt peut démarrer avant que PostgreSQL soit prêt à accepter des connexions, ce qui provoque un redémarrage en boucle :

# Dans le service db, sous l'image postgres:16 :
healthcheck:
  test: ["CMD-SHELL", "pg_isready -U passbolt"]
  interval: 10s
  timeout: 5s
  retries: 5

# Dans le service passbolt :
depends_on:
  db:
    condition: service_healthy

Puis lancez la stack :

docker compose up -d
docker compose logs -f passbolt

Attendez que les logs indiquent que la configuration GPG a été initialisée avant de passer à l'étape suivante.

04

Récupérer et noter la fingerprint GPG

Au premier démarrage, Passbolt génère une paire de clés GPG côté serveur. Récupérez la fingerprint — vous en aurez besoin si vous devez reconfigurer l'environnement :

docker compose exec passbolt su -s /bin/bash -c \
  "gpg --home /var/lib/passbolt/.gnupg --list-keys" www-data

La fingerprint est la chaîne hexadécimale de 40 caractères sous la ligne pub. Notez-la : si la variable PASSBOLT_GPG_SERVER_KEY_FINGERPRINT ne correspond pas à la clé présente dans le trousseau du conteneur, Passbolt refusera de démarrer avec l'erreur The OpenPGP server key fingerprint does not match.

05

Configurer le reverse proxy HTTPS

Passbolt doit être servi exclusivement en HTTPS. Si vous utilisez nginx comme reverse proxy sur le même VPS, un exemple minimal de configuration :

server {
    listen 443 ssl;
    server_name passbolt.votredomaine.com;

    ssl_certificate     /etc/letsencrypt/live/passbolt.votredomaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/passbolt.votredomaine.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
    }
}

Obtenez votre certificat avec Certbot (certbot --nginx -d passbolt.votredomaine.com) avant d'activer le bloc. L'extension navigateur Passbolt ne fonctionnera pas sur un domaine HTTP ou avec un certificat auto-signé.

06

Créer le premier compte administrateur

Une fois le conteneur démarré et le domaine accessible en HTTPS, créez le compte administrateur :

docker compose exec passbolt su -s /bin/bash www-data \
  -c "/var/www/passbolt/bin/cake passbolt register_user \
  -u [email protected] \
  -f Prénom \
  -l Nom \
  -r admin"

La commande génère un lien d'invitation à usage unique. Ouvrez-le dans le navigateur où l'extension Passbolt est installée — l'extension guidera la configuration de votre clé GPG personnelle. Une fois l'administrateur configuré, invitez les membres de l'équipe depuis l'interface web.

Durcissement : accès, sauvegardes et rotation des clés

Restreignez l'accès au port de la base de données au seul conteneur Passbolt (Docker Networks gère cela par défaut si vous utilisez les réseaux internes de Compose). Planifiez une sauvegarde quotidienne du volume PostgreSQL avec docker compose exec db pg_dump vers un stockage externe — les secrets chiffrés GPG ne valent rien sans la base qui les indexe.

Pour la rotation des clés GPG serveur, suivez la procédure documentée sur docs.passbolt.com : l'interface guide chaque utilisateur pour re-chiffrer ses secrets avec la nouvelle clé publique du serveur. Ne tentez pas de remplacer manuellement les fichiers de trousseau dans le volume — Passbolt détecterait une incohérence de fingerprint et refuserait de démarrer.

Passbolt CE vs Bitwarden Teams vs Vaultwarden

CritèrePassbolt CEBitwarden Teams / Vaultwarden
Coût mensuel0 € (auto-hébergé)Bitwarden Teams : 4 $/utilisateur/mois · Vaultwarden : 0 € (auto-hébergé)
ChiffrementGPG par destinataire — le serveur ne voit jamais le secret en clairAES-256 côté serveur (Bitwarden et Vaultwarden) — le serveur déchiffre pour vous servir
Log d'audit par entréeOui, natif CE — qui a consulté, modifié, partagé chaque secretBitwarden Enterprise : oui · Bitwarden Teams : non · Vaultwarden : non
Partage granulairePar entrée et par utilisateur, avec droits lecture/mise à jour/propriétairePar dossier (collection) — partage tout ou rien
API REST stableOui, documentée et versionnée — utilisable en CI/CDBitwarden : API officielle · Vaultwarden : API non officielle, non garantie
LDAP / Active DirectoryPassbolt Pro (payant) · CE : invitation manuelle uniquementBitwarden Enterprise : oui · Vaultwarden : non
Extension navigateurExtension officielle Chrome/Firefox/EdgeExtension Bitwarden (compatible Vaultwarden) Chrome/Firefox/Edge/Safari

Dépannage — messages d'erreur réels

The OpenPGP server key fingerprint does not match au démarrage : la variable PASSBOLT_GPG_SERVER_KEY_FINGERPRINT dans votre .env ne correspond pas à la clé présente dans le trousseau du conteneur. Vérifiez la fingerprint avec gpg --list-keys dans le conteneur, puis mettez à jour la variable. Ce cas survient typiquement après une recréation du conteneur sans persistance du volume GPG.

Could not send email lors d'une invitation : EMAIL_TRANSPORT_DEFAULT_HOST est absent ou incorrect, ou le port 25 est bloqué par votre VPS (c'est le cas par défaut chez la plupart des fournisseurs). Passez sur le port 587 avec EMAIL_TRANSPORT_DEFAULT_TLS=true (STARTTLS) ou le port 465 avec EMAIL_TRANSPORT_DEFAULT_TLS=true (SSL implicite selon la configuration de votre serveur SMTP).

Conteneur passbolt en état unhealthy ou en redémarrage en boucle : lancez docker compose logs passbolt et cherchez des erreurs de connexion à la base. La cause la plus fréquente est que PostgreSQL n'était pas encore prêt lorsque Passbolt a tenté de s'y connecter. Ajoutez le depends_on avec condition: service_healthy et le healthcheck pg_isready sur le service db (décrit à l'étape 3).

Extension non reconnue par le navigateur : l'extension Passbolt exige HTTPS avec un certificat valide. Vérifiez que APP_FULL_BASE_URL commence bien par https:// et que le certificat est reconnu par votre navigateur. Videz le cache et les cookies de l'extension (passbolt_data dans les stockages de l'extension) avant de tenter une nouvelle connexion.

Votre agence maîtrise ses accès, sans dépendance externe

Passbolt Community Edition remplace un abonnement SaaS par une stack de trois composants — Docker, PostgreSQL et un reverse proxy — qui tient sur le VPS que vous avez peut-être déjà. Le chiffrement GPG par destinataire et le log d'audit par entrée ne sont pas des options payantes : ils font partie du noyau open source, auditable ligne à ligne sur GitHub.

Lorsqu'un collaborateur quitte l'agence, vous révoquez son accès dans l'interface, et les secrets qu'il avait entre les mains restent chiffrés avec des clés qu'il ne détient plus. C'est la propriété fondamentale que les outils pensés pour l'usage personnel — Vaultwarden inclus — ne peuvent pas vous offrir.

Votre agence gère des accès pour plusieurs clients

Un coffre-fort auditable sur votre propre VPS évite qu'un départ d'employé devienne une fuite. Découvrez nos VPS et l'option administration pour déléguer la maintenance de la stack.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.