Développement

🔐 Installer Passbolt CE avec Mailcow : guide complet en Docker

Passbolt est un gestionnaire de mots de passe orienté entreprises.

Il fonctionne en self-hosted, respecte la confidentialité des données et utilise un chiffrement GPG solide.

Dans cet article, je montre comment installer Passbolt Community Edition (CE) sur un serveur déjà équipé de Mailcow.

Tout fonctionne dans le même projet Docker grâce au fichier docker-compose.override.yml.

⭐ Présentation de l’architecture

Je place Passbolt dans le même réseau Docker que Mailcow. L’infrastructure comprend :

  • Passbolt CE
  • MariaDB 10.11 pour la base de données
  • Mailcow Nginx pour exposer le service en HTTPS
  • Des volumes persistants pour conserver les données

Le tout fonctionne de manière isolée mais totalement intégrée au reverse proxy de Mailcow.

1️⃣ Préparer l’override Docker

J’édite le fichier docker-compose.override.yml du projet Mailcow. J’ajoute la base Passbolt et le service Passbolt :

services:
  passbolt-db:
    image: mariadb:10.11
    container_name: passbolt-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "un_gros_mdp_root"
      MYSQL_DATABASE: "passbolt"
      MYSQL_USER: "passbolt"
      MYSQL_PASSWORD: "un_gros_mdp_passbolt"
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./passbolt/passbolt_db:/var/lib/mysql
    networks:
      - mailcow-network

  passbolt:
    image: passbolt/passbolt:latest-ce
    container_name: passbolt
    restart: always
    depends_on:
      - passbolt-db
    environment:
      APP_FULL_BASE_URL: "https://passbolt.mondomaine.fr"

      DATASOURCES_DEFAULT_HOST: "passbolt-db"
      DATASOURCES_DEFAULT_USERNAME: "passbolt"
      DATASOURCES_DEFAULT_PASSWORD: "un_gros_mdp_passbolt"
      DATASOURCES_DEFAULT_DATABASE: "passbolt"

      EMAIL_DEFAULT_FROM: "[email protected]"
      EMAIL_TRANSPORT_DEFAULT_HOST: "smtp.mondomaine.fr"
      EMAIL_TRANSPORT_DEFAULT_PORT: 587
      EMAIL_TRANSPORT_DEFAULT_USERNAME: "[email protected]"
      EMAIL_TRANSPORT_DEFAULT_PASSWORD: "mdp_smtp"
      EMAIL_TRANSPORT_DEFAULT_TLS: "true"
    volumes:
      - ./passbolt/passbolt_app:/var/www/passbolt
    networks:
      - mailcow-network

Les volumes ./passbolt/passbolt_db et ./passbolt/passbolt_app stockent durablement les données et la configuration de Passbolt.

2️⃣ Ajouter la configuration Nginx pour Mailcow

Mailcow utilise son propre conteneur nginx-mailcow. J’ajoute un fichier de configuration dédié à Passbolt :

Fichier : data/conf/nginx/passbolt.conf

server {
    listen 80;
    server_name passbolt.mondomaine.fr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name passbolt.mondomaine.fr;

    ssl_certificate     /etc/ssl/mail/cert.pem;
    ssl_certificate_key /etc/ssl/mail/key.pem;

    client_max_body_size 50M;

    location / {
        proxy_pass http://passbolt:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

Ensuite, j’ajoute le montage de ce fichier dans la section nginx-mailcow du docker-compose.override.yml :

nginx-mailcow:
  volumes:
    - ./data/conf/nginx/passbolt.conf:/etc/nginx/conf.d/997-passbolt.conf:ro

3️⃣ Lancer les services

Je redémarre toute la stack Mailcow + Passbolt :

docker compose down
docker compose up -d

Je vérifie que tout tourne correctement :

docker compose ps

Les conteneurs passbolt et passbolt-db doivent apparaître avec l’état running.

4️⃣ Créer le premier utilisateur administrateur

Passbolt ne crée pas d’utilisateur par défaut. Je crée donc le premier compte administrateur avec la commande suivante :

docker compose exec passbolt su -m -s /bin/sh -c "/usr/share/php/passbolt/bin/cake passbolt register_user \
  -u [email protected] \
  -f Prenom \
  -l Nom \
  -r admin" www-data

L’utilisateur reçoit ensuite un email pour activer son compte et finaliser la configuration de son coffre-fort.

Je peux lister les utilisateurs existants avec :

docker compose exec passbolt su -m -s /bin/sh -c "/usr/share/php/passbolt/bin/cake passbolt list_users" www-data

5️⃣ Accéder à l’interface Passbolt

J’ouvre mon navigateur sur l’URL suivante :

https://passbolt.mondomaine.fr

Je termine la configuration, j’importe la clé GPG si nécessaire et je me connecte avec le compte administrateur que je viens de créer.

⭐ Conclusion

Passbolt fonctionne désormais parfaitement dans un environnement Docker déjà utilisé par Mailcow. L’ajout par override permet de conserver une architecture propre, évolutive et facile à maintenir. Avec le reverse proxy de Mailcow et les volumes persistants, la solution reste stable et sécurisée.

Passbolt CE offre ainsi une solution open-source professionnelle pour garder la maîtrise totale de vos mots de passe, tout en restant hébergée chez vous.