From 4367e2a42a29ce542d6cecb770693250d87e5692 Mon Sep 17 00:00:00 2001 From: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com> Date: Mon, 15 Dec 2025 15:52:06 +1100 Subject: [PATCH] feat(blueprint): peerdb template (#579) * feat(blueprint): initial attempt at peerdb template * fix: entrypoint and healthcheck * fix: entrypoint * fix: temporarily remove network * fix: temporal port * chore: remove 36987 for minio * fix: remove peerdb 9900 port exposure * fix: port for console * fix: minio env fix * fix: expose peerdb and minio to dokploy network * fix(peerdb): add defaults * fix: remove extra hosts * fix: remove network entries * fix: use consistent environment variables --- blueprints/peerdb/docker-compose.yml | 187 +++++++++++++++++++++++++++ blueprints/peerdb/peerdb.jpeg | Bin 0 -> 10300 bytes blueprints/peerdb/template.toml | 93 +++++++++++++ meta.json | 19 +++ 4 files changed, 299 insertions(+) create mode 100644 blueprints/peerdb/docker-compose.yml create mode 100644 blueprints/peerdb/peerdb.jpeg create mode 100644 blueprints/peerdb/template.toml diff --git a/blueprints/peerdb/docker-compose.yml b/blueprints/peerdb/docker-compose.yml new file mode 100644 index 00000000..5d2c69f7 --- /dev/null +++ b/blueprints/peerdb/docker-compose.yml @@ -0,0 +1,187 @@ +name: peerdb-quickstart + +x-minio-config: &minio-config + PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER} + PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD} + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_REGION: ${PEERDB_CLICKHOUSE_AWS_REGION} + PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3: ${PEERDB_CLICKHOUSE_AWS_ENDPOINT_URL_S3} + PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME: ${PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME} + +x-catalog-config: &catalog-config + PEERDB_CATALOG_HOST: ${PEERDB_CATALOG_HOST} + PEERDB_CATALOG_PORT: ${PEERDB_CATALOG_PORT} + PEERDB_CATALOG_USER: ${PEERDB_CATALOG_USER} + PEERDB_CATALOG_PASSWORD: ${PEERDB_CATALOG_PASSWORD} + PEERDB_CATALOG_DATABASE: ${PEERDB_CATALOG_DATABASE} + +x-flow-worker-env: &flow-worker-env + TEMPORAL_HOST_PORT: temporal:7233 + TEMPORAL_CLIENT_CERT: + TEMPORAL_CLIENT_KEY: + PEERDB_TEMPORAL_NAMESPACE: default + AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-} + AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-} + AWS_REGION: ${AWS_REGION:-} + AWS_ENDPOINT: ${AWS_ENDPOINT:-} + +services: + catalog: + image: postgres:18-alpine@sha256:eca6fb2d91fda290eb8cfb8ba53dd0dcbf3508a08011e30adb039ea7c8e1e9f2 + command: -c config_file=/etc/postgresql.conf + restart: unless-stopped + expose: + - 5432 + environment: + PGUSER: ${PEERDB_CATALOG_USER} + POSTGRES_PASSWORD: ${PEERDB_CATALOG_PASSWORD} + POSTGRES_DB: ${PEERDB_CATALOG_DATABASE} + POSTGRES_INITDB_ARGS: --locale=C.UTF-8 + volumes: + - pgdata:/var/lib/postgresql/data + - ../files/postgresql.conf:/etc/postgresql.conf + - ../files/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d + healthcheck: + test: ["CMD", "pg_isready", "-d", "${PEERDB_CATALOG_DATABASE}", "-U", "${PEERDB_CATALOG_USER}"] + interval: 10s + timeout: 30s + retries: 5 + start_period: 60s + + temporal: + restart: unless-stopped + depends_on: + catalog: + condition: service_healthy + environment: + DB: postgres12 + DB_PORT: ${PEERDB_CATALOG_PORT} + POSTGRES_USER: ${PEERDB_CATALOG_USER} + POSTGRES_PWD: ${PEERDB_CATALOG_PASSWORD} + POSTGRES_SEEDS: catalog + DYNAMIC_CONFIG_FILE_PATH: config/dynamicconfig/production-sql.yaml + image: temporalio/auto-setup:1.29@sha256:5b3502a3b685f9eff1b925af90c57c9e3dbeccbef367cc28a2a9712c63379312 + expose: + - 7233 + volumes: + - ../files/temporal-dynamicconfig:/etc/temporal/config/dynamicconfig + + temporal-admin-tools: + restart: unless-stopped + depends_on: + - temporal + environment: + TEMPORAL_ADDRESS: temporal:7233 + TEMPORAL_CLI_ADDRESS: temporal:7233 + TEMPORAL_CLI_SHOW_STACKS: 1 + image: temporalio/admin-tools:1.25.2-tctl-1.18.1-cli-1.1.1@sha256:da0c7a7982b571857173ab8f058e7f139b3054800abb4dcb100445d29a563ee8 + stdin_open: true + tty: true + entrypoint: ["sh", "/etc/temporal/entrypoint.sh"] + healthcheck: + test: ["CMD", "tctl", "workflow", "list"] + interval: 10s + timeout: 30s + retries: 5 + volumes: + - ../files/scripts/mirror-name-search.sh:/etc/temporal/entrypoint.sh + + temporal-ui: + restart: unless-stopped + depends_on: + - temporal + environment: + TEMPORAL_ADDRESS: temporal:7233 + TEMPORAL_CORS_ORIGINS: http://localhost:3000 + TEMPORAL_CSRF_COOKIE_INSECURE: "true" + image: temporalio/ui:2.43.3@sha256:31f0d8c1ed0bfc49c9c20ea9613ee9dd5c52f5f989bacb8a30210f847028e9cd + expose: + - 8080 + + flow-api: + image: ghcr.io/peerdb-io/flow-api:stable-v0.35.5 + restart: unless-stopped + expose: + - 8112 + - 8113 + environment: + <<: [*catalog-config, *flow-worker-env, *minio-config] + PEERDB_ALLOWED_TARGETS: ${PEERDB_ALLOWED_TARGETS} + depends_on: + temporal-admin-tools: + condition: service_healthy + + flow-snapshot-worker: + image: ghcr.io/peerdb-io/flow-snapshot-worker:stable-v0.35.5 + restart: unless-stopped + environment: + <<: [*catalog-config, *flow-worker-env, *minio-config] + depends_on: + temporal-admin-tools: + condition: service_healthy + + flow-worker: + image: ghcr.io/peerdb-io/flow-worker:stable-v0.35.5 + restart: unless-stopped + environment: + <<: [*catalog-config, *flow-worker-env, *minio-config] + depends_on: + temporal-admin-tools: + condition: service_healthy + + peerdb: + stop_signal: SIGINT + image: ghcr.io/peerdb-io/peerdb-server:stable-v0.35.5 + restart: unless-stopped + environment: + <<: *catalog-config + PEERDB_PASSWORD: ${PEERDB_PASSWORD} + PEERDB_FLOW_SERVER_ADDRESS: ${PEERDB_FLOW_SERVER_ADDRESS} + RUST_LOG: info + RUST_BACKTRACE: 1 + expose: + - 9900 + depends_on: + catalog: + condition: service_healthy + + peerdb-ui: + image: ghcr.io/peerdb-io/peerdb-ui:stable-v0.35.5 + restart: unless-stopped + expose: + - 3000 + environment: + <<: *catalog-config + DATABASE_URL: ${DATABASE_URL} + PEERDB_FLOW_SERVER_HTTP: ${PEERDB_FLOW_SERVER_HTTP} + NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} + NEXTAUTH_URL: ${NEXTAUTH_URL} + PEERDB_ALLOWED_TARGETS: ${PEERDB_ALLOWED_TARGETS} + PEERDB_CLICKHOUSE_ALLOWED_DOMAINS: ${PEERDB_CLICKHOUSE_ALLOWED_DOMAINS} + PEERDB_EXPERIMENTAL_ENABLE_SCRIPTING: ${PEERDB_EXPERIMENTAL_ENABLE_SCRIPTING} + depends_on: + - flow-api + + minio: + image: minio/minio:latest@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e + restart: unless-stopped + volumes: + - minio-data:/data + expose: + - 9000 + - 9001 + environment: + <<: *minio-config + entrypoint: > + /bin/sh -c " + minio server /data --console-address=:9001 & + sleep 2; + mc alias set myminiopeerdb http://minio:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD; + mc mb myminiopeerdb/$$PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME; + wait + " + +volumes: + pgdata: + minio-data: diff --git a/blueprints/peerdb/peerdb.jpeg b/blueprints/peerdb/peerdb.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cd33a1fae48a92c41f952cff21d2b69a52dbd65f GIT binary patch literal 10300 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 N+KPAA@U_v*{{rsRpC$kR literal 0 HcmV?d00001 diff --git a/blueprints/peerdb/template.toml b/blueprints/peerdb/template.toml new file mode 100644 index 00000000..3325ac4b --- /dev/null +++ b/blueprints/peerdb/template.toml @@ -0,0 +1,93 @@ +[variables] +main_domain = "${domain}" +peerdb_password = "${password:32}" +postgres_password = "${password:32}" +minio_root_user = "_peerdb_minioadmin" +minio_root_password = "${password:32}" +nextauth_secret = "${password:32}" + +[[config.domains]] +serviceName = "peerdb-ui" +port = 3000 +host = "${main_domain}" + +[[config.domains]] +serviceName = "minio" +port = 9001 +host = "${main_domain}" + +[[config.domains]] +serviceName = "temporal-ui" +port = 8080 +host = "${main_domain}" + +[config.env] +PEERDB_PASSWORD = "${peerdb_password}" +PEERDB_CATALOG_HOST = "catalog" +PEERDB_CATALOG_PORT = "5432" +PEERDB_CATALOG_USER = "postgres" +PEERDB_CATALOG_PASSWORD = "${postgres_password}" +PEERDB_CATALOG_DATABASE = "postgres" +PEERDB_FLOW_SERVER_ADDRESS = "grpc://flow-api:8112" +NEXTAUTH_URL = "http://localhost:3000" +NEXTAUTH_SECRET = "${nextauth_secret}" +DATABASE_URL = "postgres://postgres:${postgres_password}@catalog:5432/postgres" +PEERDB_FLOW_SERVER_HTTP = "http://flow-api:8113" +PEERDB_EXPERIMENTAL_ENABLE_SCRIPTING = "true" +MINIO_ROOT_USER = "${minio_root_user}" +MINIO_ROOT_PASSWORD = "${minio_root_password}" +PEERDB_CLICKHOUSE_AWS_REGION = "us-east-1" +PEERDB_CLICKHOUSE_AWS_ENDPOINT_URL_S3 = "http://minio:9000" +PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME = "peerdbbucket" +PEERDB_ALLOWED_TARGETS = "" +PEERDB_CLICKHOUSE_ALLOWED_DOMAINS = "" +AWS_ACCESS_KEY_ID = "" +AWS_SECRET_ACCESS_KEY = "" +AWS_REGION = "" +AWS_ENDPOINT = "" + +[[config.mounts]] +filePath = "./postgresql.conf" +content = """ +listen_addresses = '*' + +wal_level = logical +max_wal_senders = 4 +max_replication_slots = 4 +""" + +[[config.mounts]] +filePath = "./docker-entrypoint-initdb.d/pg-hba-replication.sh" +content = """ +#!/bin/sh +echo "host replication $POSTGRES_USER 0.0.0.0/0 trust" >> "$PGDATA/pg_hba.conf" +""" + +[[config.mounts]] +filePath = "./temporal-dynamicconfig/production-sql.yaml" +content = """ +limit.maxIDLength: + - value: 255 + constraints: {} +system.forceSearchAttributesCacheRefreshOnRead: + - value: false + constraints: {} +frontend.enableUpdateWorkflowExecution: + - value: true +""" + +[[config.mounts]] +filePath = "./scripts/mirror-name-search.sh" +content = """ +#!/bin/sh + +sleep 5 + +# Check if MirrorName attribute exists +if ! temporal operator search-attribute list | grep -w MirrorName >/dev/null 2>&1; then + # If not, create MirrorName attribute + temporal operator search-attribute create --name MirrorName --type Text --namespace default +fi + +tini -s -- sleep infinity +""" diff --git a/meta.json b/meta.json index 64360ce1..1c558d82 100644 --- a/meta.json +++ b/meta.json @@ -4508,6 +4508,25 @@ "client-management" ] }, + { + "id": "peerdb", + "name": "PeerDB", + "version": "v0.35.5", + "description": "Data integration platform that synchronizes and federates data across databases with a unified API.", + "logo": "peerdb.jpeg", + "links": { + "github": "https://github.com/peerdb-io/peerdb", + "website": "https://peerdb.io", + "docs": "https://docs.peerdb.io" + }, + "tags": [ + "database", + "integration", + "sync", + "sql", + "workflow" + ] + }, { "id": "penpot", "name": "Penpot",