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
This commit is contained in:
Khiet Tam Nguyen
2025-12-15 15:52:06 +11:00
committed by GitHub
parent 87ab908a32
commit 4367e2a42a
4 changed files with 299 additions and 0 deletions

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -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
"""

View File

@@ -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",