Passbolt
Modifié par john le 2026/09/18 23:06
Gestionnaire de mots de passe (édition communautaire). Les secrets sont chiffrés côté navigateur avec la clé OpenPGP de chaque utilisateur : le serveur ne peut pas les lire.
Architecture
| Conteneur | Rôle |
|---|---|
| passbolt | Application |
| passbolt-db | Base MariaDB 10.11 |
La base est sur un réseau interne dédié (passbolt-internal), inaccessible aux autres conteneurs.
Variables d'environnement
| Variable | Rôle |
|---|---|
| PB_DB_PASS, PB_DB_ROOT_PASS | Mots de passe de la base |
| PB_SMTP_FROM, PB_SMTP_HOST, PB_SMTP_PORT | Envoi des courriels |
| PB_SMTP_USER, PB_SMTP_PASS, PB_SMTP_TLS | Authentification SMTP |
Stack
services:
passbolt-db:
image: mariadb:10.11
container_name: passbolt-db
restart: unless-stopped
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
environment:
MARIADB_DATABASE: passbolt
MARIADB_USER: passbolt
MARIADB_PASSWORD: ${PB_DB_PASS}
MARIADB_ROOT_PASSWORD: ${PB_DB_ROOT_PASS}
volumes:
- <APPDATA>/passbolt/db:/var/lib/mysql
networks:
- passbolt-internal
passbolt:
image: passbolt/passbolt:latest-ce
container_name: passbolt
restart: unless-stopped
depends_on:
- passbolt-db
environment:
TZ: Europe/Paris
APP_FULL_BASE_URL: <URL_PASSBOLT>
DATASOURCES_DEFAULT_HOST: passbolt-db
DATASOURCES_DEFAULT_USERNAME: passbolt
DATASOURCES_DEFAULT_PASSWORD: ${PB_DB_PASS}
DATASOURCES_DEFAULT_DATABASE: passbolt
PASSBOLT_SECURITY_PROXIES_ACTIVE: "true"
PASSBOLT_SSL_FORCE: "true"
EMAIL_DEFAULT_FROM_NAME: Passbolt
EMAIL_DEFAULT_FROM: ${PB_SMTP_FROM}
EMAIL_TRANSPORT_DEFAULT_HOST: ${PB_SMTP_HOST}
EMAIL_TRANSPORT_DEFAULT_PORT: ${PB_SMTP_PORT}
EMAIL_TRANSPORT_DEFAULT_USERNAME: ${PB_SMTP_USER}
EMAIL_TRANSPORT_DEFAULT_PASSWORD: ${PB_SMTP_PASS}
EMAIL_TRANSPORT_DEFAULT_TLS: ${PB_SMTP_TLS}
PASSBOLT_GPG_SERVER_KEY_FINGERPRINT: <EMPREINTE_CLE_SERVEUR>
PASSBOLT_GPG_SERVER_KEY_PUBLIC: /etc/passbolt/gpg/serverkey.asc
PASSBOLT_GPG_SERVER_KEY_PRIVATE: /etc/passbolt/gpg/serverkey_private.asc
extra_hosts:
- "<DOMAINE_PASSBOLT>:host-gateway"
volumes:
- <APPDATA>/passbolt/gpg:/etc/passbolt/gpg
- <APPDATA>/passbolt/jwt:/etc/passbolt/jwt
- <APPDATA>/passbolt/gnupg:/var/lib/passbolt/.gnupg
- <APPDATA>/passbolt/logs:/var/log/passbolt
networks:
- passbolt-internal
- proxy
networks:
passbolt-internal:
driver: bridge
proxy:
external: true
passbolt-db:
image: mariadb:10.11
container_name: passbolt-db
restart: unless-stopped
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
environment:
MARIADB_DATABASE: passbolt
MARIADB_USER: passbolt
MARIADB_PASSWORD: ${PB_DB_PASS}
MARIADB_ROOT_PASSWORD: ${PB_DB_ROOT_PASS}
volumes:
- <APPDATA>/passbolt/db:/var/lib/mysql
networks:
- passbolt-internal
passbolt:
image: passbolt/passbolt:latest-ce
container_name: passbolt
restart: unless-stopped
depends_on:
- passbolt-db
environment:
TZ: Europe/Paris
APP_FULL_BASE_URL: <URL_PASSBOLT>
DATASOURCES_DEFAULT_HOST: passbolt-db
DATASOURCES_DEFAULT_USERNAME: passbolt
DATASOURCES_DEFAULT_PASSWORD: ${PB_DB_PASS}
DATASOURCES_DEFAULT_DATABASE: passbolt
PASSBOLT_SECURITY_PROXIES_ACTIVE: "true"
PASSBOLT_SSL_FORCE: "true"
EMAIL_DEFAULT_FROM_NAME: Passbolt
EMAIL_DEFAULT_FROM: ${PB_SMTP_FROM}
EMAIL_TRANSPORT_DEFAULT_HOST: ${PB_SMTP_HOST}
EMAIL_TRANSPORT_DEFAULT_PORT: ${PB_SMTP_PORT}
EMAIL_TRANSPORT_DEFAULT_USERNAME: ${PB_SMTP_USER}
EMAIL_TRANSPORT_DEFAULT_PASSWORD: ${PB_SMTP_PASS}
EMAIL_TRANSPORT_DEFAULT_TLS: ${PB_SMTP_TLS}
PASSBOLT_GPG_SERVER_KEY_FINGERPRINT: <EMPREINTE_CLE_SERVEUR>
PASSBOLT_GPG_SERVER_KEY_PUBLIC: /etc/passbolt/gpg/serverkey.asc
PASSBOLT_GPG_SERVER_KEY_PRIVATE: /etc/passbolt/gpg/serverkey_private.asc
extra_hosts:
- "<DOMAINE_PASSBOLT>:host-gateway"
volumes:
- <APPDATA>/passbolt/gpg:/etc/passbolt/gpg
- <APPDATA>/passbolt/jwt:/etc/passbolt/jwt
- <APPDATA>/passbolt/gnupg:/var/lib/passbolt/.gnupg
- <APPDATA>/passbolt/logs:/var/log/passbolt
networks:
- passbolt-internal
- proxy
networks:
passbolt-internal:
driver: bridge
proxy:
external: true
- PASSBOLT_SECURITY_PROXIES_ACTIVE : Passbolt fait confiance aux en-têtes de SWAG pour connaître l'IP et le protocole du client.
- extra_hosts : le domaine de Passbolt pointe vers l'hôte depuis le conteneur, pour que Passbolt puisse s'appeler lui-même par son URL publique (vérifications internes) malgré l'absence de hairpin NAT.
- Base en utf8mb4 : obligatoire pour les caractères spéciaux et les émojis dans les secrets.
Fichiers critiques
| Dossier | Contenu |
|---|---|
| passbolt/gpg | Clé OpenPGP du serveur (publique et privée) |
| passbolt/jwt | Clés de signature des jetons de l'application mobile |
| passbolt/gnupg | Trousseau GnuPG du serveur |
Commandes
Les commandes d'administration s'exécutent avec l'utilisateur www-data :
# Diagnostic complet (configuration, base, clés, SSL, courriel)
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt healthcheck" www-data
# Créer un administrateur (envoie un lien d'inscription)
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt register_user -u <EMAIL> -f <PRENOM> -l <NOM> -r admin" www-data
# Tester l'envoi de courriel
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt send_test_email --recipient=<EMAIL>" www-data
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt healthcheck" www-data
# Créer un administrateur (envoie un lien d'inscription)
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt register_user -u <EMAIL> -f <PRENOM> -l <NOM> -r admin" www-data
# Tester l'envoi de courriel
docker exec passbolt su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt send_test_email --recipient=<EMAIL>" www-data
Après chaque mise à jour de l'image, lancer le healthcheck : toutes les lignes doivent être au vert.
Sauvegarde
- Base : dump SQL de passbolt-db par le script de Sauvegarde.
- Clés et configuration : <APPDATA>/passbolt, sauvegardé tel quel.