From aa48af78563c1810655c2c72a41030bca54d06e3 Mon Sep 17 00:00:00 2001 From: M Jupri Amin <127651222+Juupeee@users.noreply.github.com> Date: Sun, 14 Dec 2025 12:37:00 +0700 Subject: [PATCH] Add Passbolt template blueprint to Dokploy templates (#376) * feat(templates): add Passbolt blueprint for Dokploy - Add docker-compose.yml defining services for Passbolt and MariaDB - Create template.toml with configurable domain, email, and database credentials - Add meta.json with metadata, tags, and link to logo * fix(meta): sort meta.json entries * fix: passbolt template had several issues that broke deployment - env variables were using old array format, changed to new table format - mariadb healthcheck was broken (wrong command for mariadb 11) - missing volume mounts for gpg keys, jwt tokens, and database - setup instructions weren't visible to users, moved to docker-compose - email config had circular references causing warnings - tested admin user creation and confirmed working everything works now, fully tested * Update blueprints/passbolt/template.toml --------- Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/passbolt/docker-compose.yml | 79 ++++++++++++++++++++++++++ blueprints/passbolt/passbolt.svg | 8 +++ blueprints/passbolt/template.toml | 41 +++++++++++++ meta.json | 18 ++++++ 4 files changed, 146 insertions(+) create mode 100644 blueprints/passbolt/docker-compose.yml create mode 100644 blueprints/passbolt/passbolt.svg create mode 100644 blueprints/passbolt/template.toml diff --git a/blueprints/passbolt/docker-compose.yml b/blueprints/passbolt/docker-compose.yml new file mode 100644 index 00000000..f6b91aac --- /dev/null +++ b/blueprints/passbolt/docker-compose.yml @@ -0,0 +1,79 @@ +# ============================================================================= +# PASSBOLT TEMPLATE - SETUP INSTRUCTIONS +# ============================================================================= +# +# After successful deployment, you need to create an admin user: +# +# 1. Go to your Dokploy dashboard +# 2. Navigate to your Passbolt application +# 3. Wait for both containers to be healthy - check the "Monitoring" tab +# 4. Go to the "General" tab and click "Open Terminal" button +# 5. In the terminal, run this command to create admin user: +# su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt register_user -u youremail@example.com -f FirstName -l LastName -r admin" www-data +# 6. Replace youremail@example.com, FirstName, LastName with your actual details +# 7. The command will output a registration link - copy and paste it in your browser to complete setup +# +# NOTE: If you change the domain after deployment, you will need to manually +# update the PASSBOLT_APP_FULL_BASE_URL environment variable in the "Environment" tab. +# ============================================================================= + +services: + passbolt: + image: passbolt/passbolt:latest-ce + environment: + APP_FULL_BASE_URL: ${PASSBOLT_APP_FULL_BASE_URL} + DATASOURCES_DEFAULT_HOST: ${PASSBOLT_DB_HOST} + DATASOURCES_DEFAULT_PORT: ${PASSBOLT_DB_PORT} + DATASOURCES_DEFAULT_USERNAME: ${PASSBOLT_DB_USER} + DATASOURCES_DEFAULT_PASSWORD: ${PASSBOLT_DB_PASSWORD} + DATASOURCES_DEFAULT_DATABASE: ${PASSBOLT_DB_NAME} + PASSBOLT_PLUGINS_JWT_AUTHENTICATION_ENABLED: ${PASSBOLT_PLUGINS_JWT_AUTHENTICATION_ENABLED} + + EMAIL_DEFAULT_FROM: ${PASSBOLT_EMAIL_FROM} + EMAIL_TRANSPORT_DEFAULT_HOST: ${PASSBOLT_EMAIL_HOST} + EMAIL_TRANSPORT_DEFAULT_PORT: ${PASSBOLT_EMAIL_PORT} + EMAIL_TRANSPORT_DEFAULT_USERNAME: ${PASSBOLT_EMAIL_USER} + EMAIL_TRANSPORT_DEFAULT_PASSWORD: ${PASSBOLT_EMAIL_PASS} + EMAIL_TRANSPORT_DEFAULT_TLS: ${PASSBOLT_EMAIL_TLS} + + volumes: + - gpg_volume:/etc/passbolt/gpg + - jwt_volume:/etc/passbolt/jwt + + command: + - /usr/bin/wait-for.sh + - "-t" + - "0" + - "${PASSBOLT_DB_HOST}:${PASSBOLT_DB_PORT}" + - "--" + - /docker-entrypoint.sh + + depends_on: + mariadb: + condition: service_healthy + + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 5s + timeout: 20s + retries: 10 + + mariadb: + image: mariadb:11 + environment: + MARIADB_ROOT_PASSWORD: ${PASSBOLT_DB_ROOT_PASSWORD} + MARIADB_DATABASE: ${PASSBOLT_DB_NAME} + MARIADB_USER: ${PASSBOLT_DB_USER} + MARIADB_PASSWORD: ${PASSBOLT_DB_PASSWORD} + volumes: + - passbolt_mariadb_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "--silent"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + gpg_volume: {} + jwt_volume: {} + passbolt_mariadb_data: {} diff --git a/blueprints/passbolt/passbolt.svg b/blueprints/passbolt/passbolt.svg new file mode 100644 index 00000000..40a905ab --- /dev/null +++ b/blueprints/passbolt/passbolt.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/blueprints/passbolt/template.toml b/blueprints/passbolt/template.toml new file mode 100644 index 00000000..e14042e4 --- /dev/null +++ b/blueprints/passbolt/template.toml @@ -0,0 +1,41 @@ +[variables] +main_domain = "${domain}" +db_password = "${password:32}" +db_root_password = "${password:32}" +email_host = "smtp.example.com" +email_user = "noreply@example.com" +email_pass = "${password:16}" + +[config] +[[config.domains]] +serviceName = "passbolt" +port = 80 +host = "${main_domain}" + +[config.env] +PASSBOLT_APP_FULL_BASE_URL = "http://${main_domain}" +PASSBOLT_DB_HOST = "mariadb" +PASSBOLT_DB_PORT = "3306" +PASSBOLT_DB_NAME = "passbolt" +PASSBOLT_DB_USER = "passbolt" +PASSBOLT_DB_PASSWORD = "${db_password}" +PASSBOLT_DB_ROOT_PASSWORD = "${db_root_password}" +PASSBOLT_PLUGINS_JWT_AUTHENTICATION_ENABLED = "true" +PASSBOLT_EMAIL_FROM = "passbolt@${main_domain}" +PASSBOLT_EMAIL_HOST = "${email_host}" +PASSBOLT_EMAIL_PORT = "587" +PASSBOLT_EMAIL_USER = "${email_user}" +PASSBOLT_EMAIL_PASS = "${email_pass}" +PASSBOLT_EMAIL_TLS = "true" + +[[config.mounts]] +volume = "gpg_volume" +target = "/etc/passbolt/gpg" + +[[config.mounts]] +volume = "jwt_volume" +target = "/etc/passbolt/jwt" + +[[config.mounts]] +volume = "passbolt_mariadb_data" +target = "/var/lib/mysql" \ No newline at end of file diff --git a/meta.json b/meta.json index 24d5fb18..be1c6ff8 100644 --- a/meta.json +++ b/meta.json @@ -4322,6 +4322,24 @@ "open-source" ] }, + { + "id": "passbolt", + "name": "Passbolt", + "version": "latest-ce", + "description": "Passbolt is an open source credential platform for modern teams. A versatile, battle-tested solution to manage and collaborate on passwords, accesses, and secrets. All in one.", + "logo": "passbolt.svg", + "links": { + "github": "https://github.com/passbolt/passbolt_api", + "website": "https://www.passbolt.com/", + "docs": "https://www.passbolt.com/docs/" + }, + "tags": [ + "password-manager", + "security", + "team-collaboration", + "encryption" + ] + }, { "id": "pastefy", "name": "Pastefy",