name: peerdb-quickstart x-minio-config: &minio-config PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID: _peerdb_minioadmin MINIO_ROOT_USER: _peerdb_minioadmin PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY: _peerdb_minioadmin MINIO_ROOT_PASSWORD: _peerdb_minioadmin PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_REGION: us-east-1 PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3: http://host.docker.internal:9001 PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME: peerdbbucket x-catalog-config: &catalog-config PEERDB_CATALOG_HOST: catalog PEERDB_CATALOG_PORT: 5432 PEERDB_CATALOG_USER: postgres PEERDB_CATALOG_PASSWORD: postgres PEERDB_CATALOG_DATABASE: postgres x-flow-worker-env: &flow-worker-env TEMPORAL_HOST_PORT: temporal:7233 TEMPORAL_CLIENT_CERT: TEMPORAL_CLIENT_KEY: PEERDB_TEMPORAL_NAMESPACE: default # For GCS, these will be your HMAC keys instead # For more information: # https://cloud.google.com/storage/docs/authentication/managing-hmackeys AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-} # For GCS, set this to "auto" without the quotes AWS_REGION: ${AWS_REGION:-} # For GCS, set this as: https://storage.googleapis.com AWS_ENDPOINT: ${AWS_ENDPOINT:-} services: catalog: container_name: catalog image: postgres:18-alpine@sha256:d3e1620b530c944afa6e887d22eb899824da68e19c52024bf98f5220c88a65b2 command: -c config_file=/etc/postgresql.conf restart: unless-stopped ports: - 9901:5432 environment: PGUSER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres POSTGRES_INITDB_ARGS: --locale=C.UTF-8 extra_hosts: - "host.docker.internal:host-gateway" volumes: - pgdata:/var/lib/postgresql - ./volumes/postgresql.conf:/etc/postgresql.conf - ./volumes/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d healthcheck: test: ["CMD", "pg_isready", "-d", "postgres", "-U", "postgres"] interval: 10s timeout: 30s retries: 5 start_period: 60s temporal: container_name: temporal restart: unless-stopped depends_on: catalog: condition: service_healthy environment: - DB=postgres12 - DB_PORT=5432 - POSTGRES_USER=postgres - POSTGRES_PWD=postgres - POSTGRES_SEEDS=catalog - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development-sql.yaml image: temporalio/auto-setup:1.29@sha256:f14912b699cf73015ad5c4fc18d522d4b014db90e794039214dfb7c022c2644f ports: - 7233:7233 volumes: - ./volumes/temporal-dynamicconfig:/etc/temporal/config/dynamicconfig labels: kompose.volume.type: configMap temporal-admin-tools: container_name: 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: /etc/temporal/entrypoint.sh healthcheck: test: ["CMD", "tctl", "workflow", "list"] interval: 1s timeout: 5s retries: 30 volumes: - ./scripts/mirror-name-search.sh:/etc/temporal/entrypoint.sh temporal-ui: container_name: 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.54.1@sha256:ff0943fe532b8e33c46cd28b29e81e0ce0b6f55b9ee50a38ef1b437cc4de3fa5 ports: - 8085:8080 # applies catalog schema migrations and exits flow-migrate: container_name: flow-migrate image: ghcr.io/peerdb-io/flow-api:stable-v0.37.8 entrypoint: ["/home/peerdb/peer-flow", "migrate"] environment: <<: *catalog-config depends_on: catalog: condition: service_healthy flow-api: container_name: flow_api image: ghcr.io/peerdb-io/flow-api:stable-v0.37.8 restart: unless-stopped ports: - 8112:8112 - 8113:8113 environment: <<: [*catalog-config, *flow-worker-env, *minio-config] PEERDB_ALLOWED_TARGETS: extra_hosts: - "host.docker.internal:host-gateway" depends_on: flow-migrate: condition: service_completed_successfully temporal-admin-tools: condition: service_healthy flow-snapshot-worker: container_name: flow-snapshot-worker image: ghcr.io/peerdb-io/flow-snapshot-worker:stable-v0.37.8 restart: unless-stopped environment: <<: [*catalog-config, *flow-worker-env, *minio-config] depends_on: flow-migrate: condition: service_completed_successfully temporal-admin-tools: condition: service_healthy flow-worker: container_name: flow-worker image: ghcr.io/peerdb-io/flow-worker:stable-v0.37.8 restart: unless-stopped environment: <<: [*catalog-config, *flow-worker-env, *minio-config] extra_hosts: - "host.docker.internal:host-gateway" depends_on: flow-migrate: condition: service_completed_successfully temporal-admin-tools: condition: service_healthy peerdb: container_name: peerdb-server stop_signal: SIGINT image: ghcr.io/peerdb-io/peerdb-server:stable-v0.37.8 restart: unless-stopped environment: <<: *catalog-config PEERDB_PASSWORD: PEERDB_FLOW_SERVER_ADDRESS: grpc://flow_api:8112 PEERDB_MIGRATIONS_DISABLED: true RUST_LOG: info RUST_BACKTRACE: 1 ports: - 9900:9900 depends_on: flow-migrate: condition: service_completed_successfully peerdb-ui: container_name: peerdb-ui image: ghcr.io/peerdb-io/peerdb-ui:stable-v0.37.8 restart: unless-stopped ports: - 3000:3000 environment: <<: *catalog-config PEERDB_FLOW_SERVER_HTTP: http://flow_api:8113 NEXTAUTH_SECRET: __changeme__ NEXTAUTH_URL: http://localhost:3000 PEERDB_ALLOWED_TARGETS: PEERDB_CLICKHOUSE_ALLOWED_DOMAINS: PEERDB_EXPERIMENTAL_ENABLE_SCRIPTING: true depends_on: - flow-api minio: image: pgsty/silo:RELEASE.2026-09-16T00-00-00Z@sha256:635197cb9f36d01bee221d34d1c7d7960f6a95c48b0b6c01d99cd13bdae51a46 restart: unless-stopped volumes: - minio-data:/data ports: - "9001:9000" - "9002:36987" environment: <<: *minio-config entrypoint: > /bin/sh -c " silo server /data --console-address=:36987 & 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: networks: default: name: peerdb_network