Passbolt logo

Passbolt

Open source password manager for teams

Alternative to: 1password, lastpass, keeper


Passbolt is an open-source, self-hosted password manager built for teams, letting members securely store, share, and manage credentials using OpenPGP-based encryption. It provides granular permissions, groups, browser extensions, and mobile apps, serving as a self-hosted alternative to team password managers like 1Password and LastPass.

Passbolt Docker Compose example

Self-host Passbolt on your own server, homelab, or VPS starting from this Docker Compose example. It runs Passbolt in Docker containers using the official mariadb:10.11, passbolt/passbolt:latest-ce images, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      # Generate a random MariaDB root password on first initialization.
      MYSQL_RANDOM_ROOT_PASSWORD: "true"
      # Name of the database Passbolt uses.
      MYSQL_DATABASE: "passbolt"
      # Database user Passbolt connects as.
      MYSQL_USER: "passbolt"
      # Password for the Passbolt database user (internal to the compose network).
      MYSQL_PASSWORD: "P4ssb0lt"
    volumes:
      - database_volume:/var/lib/mysql

  passbolt:
    image: passbolt/passbolt:latest-ce
    restart: unless-stopped
    depends_on:
      - db
    environment:
      # Public base URL where Passbolt is reached, including scheme (e.g. https://passbolt.example.com).
      APP_FULL_BASE_URL: "changeme"
      # Database host — the db service on the compose network.
      DATASOURCES_DEFAULT_HOST: "db"
      # Database user (must match the db service).
      DATASOURCES_DEFAULT_USERNAME: "passbolt"
      # Database password (must match the db service).
      DATASOURCES_DEFAULT_PASSWORD: "P4ssb0lt"
      # Database name (must match the db service).
      DATASOURCES_DEFAULT_DATABASE: "passbolt"
      # Sender address shown on Passbolt emails.
      EMAIL_DEFAULT_FROM: ""
      # SMTP server hostname used to send invitation / notification emails. Leave empty to disable email.
      EMAIL_TRANSPORT_DEFAULT_HOST: ""
      # SMTP server port.
      EMAIL_TRANSPORT_DEFAULT_PORT: "587"
      # SMTP username.
      EMAIL_TRANSPORT_DEFAULT_USERNAME: ""
      # SMTP password.
      EMAIL_TRANSPORT_DEFAULT_PASSWORD: ""
      # Whether to use TLS for SMTP (true/false).
      EMAIL_TRANSPORT_DEFAULT_TLS: "true"
    volumes:
      - gpg_volume:/etc/passbolt/gpg
      - jwt_volume:/etc/passbolt/jwt
    command:
      [
        "/usr/bin/wait-for.sh",
        "-t",
        "0",
        "db:3306",
        "--",
        "/docker-entrypoint.sh",
      ]

volumes:
  database_volume:
  gpg_volume:
  jwt_volume:

Values set to changeme are required — replace them with your own values before starting Passbolt.

Prefer a managed setup? WinterFlow installs, configures, and updates Passbolt for you using this same Docker Compose configuration.