Files
zeekay cf4d0b027e templates.hanzo.ai: 1030-blueprint one-click deploy catalog
Aggregates five OSS one-click/self-hosting catalogs into the Dokploy blueprint
shape the Hanzo PaaS consumes (meta.json array + blueprints/<id>/{template.toml,
docker-compose.yml,meta.json,logo}):

  Dokploy 500 (MIT, verbatim) · Coolify 174 (Apache-2.0) · CapRover 161
  (Apache-2.0) · CasaOS 85 (Apache-2.0) · Runtipi 110 (GPL-3.0)

Deduped by app identity; each source + app keeps its upstream license
(ATTRIBUTION.md). Deterministic aggregators + a hard validator (every
template.toml parses with the platform's toml lib, every compose parses as YAML,
meta.json is the expected array, and an over-HTTP fetch probe exercises all
1030) — 0 hard failures. Served natively by hanzoai/static on DOKS (no CDN/Pages/
Vercel); CI builds on the hanzo-build-linux-amd64 arc pool; operator App CR in
crs/ serves it at templates.hanzo.ai.
2026-07-24 01:46:23 -07:00

200 lines
7.3 KiB
YAML

services:
trigger:
image: ghcr.io/triggerdotdev/trigger.dev:v4.3.0
user: root
command: |
sh -c "chown -R node:node /home/node/shared && exec ./scripts/entrypoint.sh"
environment:
- APP_ORIGIN=${SERVICE_URL_TRIGGER_3000}
- LOGIN_ORIGIN=${SERVICE_URL_TRIGGER_3000}
- API_ORIGIN=${SERVICE_URL_TRIGGER_3000}
- SESSION_SECRET=${SERVICE_PASSWORD_64_SESSION}
- MAGIC_LINK_SECRET=${SERVICE_PASSWORD_64_MAGICLINK}
- ENCRYPTION_KEY=${SERVICE_PASSWORD_ENCRYPTIONKEY}
- MANAGED_WORKER_SECRET=${SERVICE_PASSWORD_64_WORKERSECRET}
- TRIGGER_WORKER_TOKEN=${TRIGGER_WORKER_TOKEN}
- NODE_ENV=production
- APP_LOG_LEVEL=info
- DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgresql:5432/${POSTGRES_DB:-trigger-db}?schema=public&sslmode=disable
- DIRECT_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgresql:5432/${POSTGRES_DB:-trigger-db}?schema=public&sslmode=disable
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_TLS_DISABLED=true
- ELECTRIC_ORIGIN=http://electric:3000
- DEV_OTEL_EXPORTER_OTLP_ENDPOINT=${DEV_OTEL_EXPORTER_OTLP_ENDPOINT:-}
- DEPLOY_REGISTRY_HOST=${DEPLOY_REGISTRY_HOST:-ghcr.io}
- DEPLOY_REGISTRY_PROTOCOL=${DEPLOY_REGISTRY_PROTOCOL:-https}
- DEPLOY_REGISTRY_NAMESPACE=${DEPLOY_REGISTRY_NAMESPACE:-trigger}
- V4_DEPLOY_REGISTRY_NAMESPACE=${DEPLOY_REGISTRY_NAMESPACE:-trigger}
- OBJECT_STORE_BASE_URL=${OBJECT_STORE_BASE_URL}
- OBJECT_STORE_ACCESS_KEY_ID=${OBJECT_STORE_ACCESS_KEY_ID}
- OBJECT_STORE_SECRET_ACCESS_KEY=${OBJECT_STORE_SECRET_ACCESS_KEY}
- CLICKHOUSE_URL=http://${SERVICE_USER_CLICKHOUSE}:${SERVICE_PASSWORD_64_CLICKHOUSE}@clickhouse:8123?secure=false
- CLICKHOUSE_LOG_LEVEL=info
- RUN_REPLICATION_ENABLED=1
- RUN_REPLICATION_CLICKHOUSE_URL=http://${SERVICE_USER_CLICKHOUSE}:${SERVICE_PASSWORD_64_CLICKHOUSE}@clickhouse:8123
- RUN_REPLICATION_LOG_LEVEL=info
- TRIGGER_BOOTSTRAP_ENABLED=1
- TRIGGER_BOOTSTRAP_WORKER_GROUP_NAME=bootstrap
- TRIGGER_BOOTSTRAP_WORKER_TOKEN_PATH=/home/node/shared/worker_token
- DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMIT=${DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMIT:-300}
- DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMIT=${DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMIT:-100}
- AUTH_GITHUB_CLIENT_ID=${AUTH_GITHUB_CLIENT_ID:-}
- AUTH_GITHUB_CLIENT_SECRET=${AUTH_GITHUB_CLIENT_SECRET:-}
- EMAIL_TRANSPORT=${EMAIL_TRANSPORT:-smtp}
- RESEND_API_KEY=${RESEND_API_KEY}
- SMTP_HOST=${SMTP_HOST}
- SMTP_PORT=${SMTP_PORT}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- SMTP_SECURE=${SMTP_SECURE}
- FROM_EMAIL=${FROM_EMAIL}
- REPLY_TO_EMAIL=${REPLY_TO_EMAIL}
- WHITELISTED_EMAILS=${WHITELISTED_EMAILS}
- ADMIN_EMAILS=${ADMIN_EMAILS}
- GRACEFUL_SHUTDOWN_TIMEOUT=1000
- INTERNAL_OTEL_TRACE_LOGGING_ENABLED=${INTERNAL_OTEL_TRACE_LOGGING_ENABLED:-0}
- TRIGGER_TELEMETRY_DISABLED=${TRIGGER_TELEMETRY_DISABLED:-true}
volumes:
- shared-data:/home/node/shared
healthcheck:
test:
- CMD
- node
- -e
- require('http').get('http://127.0.0.1:3000/healthcheck',(r)=>process.exit(r.statusCode===200?0:1)).on('error',()=>process.exit(1))
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
electric:
condition: service_healthy
clickhouse:
condition: service_healthy
supervisor:
image: ghcr.io/triggerdotdev/supervisor:v4.3.0
user: root
command: |
sh -c "chown -R node:node /home/node/shared && exec /usr/bin/dumb-init -- pnpm run --filter supervisor start"
environment:
- TRIGGER_API_URL=http://trigger:3000
- OTEL_EXPORTER_OTLP_ENDPOINT=http://trigger:3000/otel
- TRIGGER_WORKER_TOKEN=${TRIGGER_WORKER_TOKEN:-file:///home/node/shared/worker_token}
- MANAGED_WORKER_SECRET=${SERVICE_PASSWORD_64_WORKERSECRET}
- TRIGGER_WORKLOAD_API_DOMAIN=${TRIGGER_WORKLOAD_API_DOMAIN}
- TRIGGER_WORKLOAD_API_PORT_EXTERNAL=8020
- DOCKER_HOST=tcp://docker-proxy:2375
- DOCKER_RUNNER_NETWORKS=${DOCKER_RUNNER_NETWORKS}
- DOCKER_AUTOREMOVE_EXITED_CONTAINERS=${DOCKER_AUTOREMOVE_EXITED_CONTAINERS:-1}
- DOCKER_REGISTRY_URL=https://${DEPLOY_REGISTRY_HOST:-ghcr.io}
- DOCKER_REGISTRY_USERNAME=${DEPLOY_REGISTRY_USERNAME}
- DOCKER_REGISTRY_PASSWORD=${DEPLOY_REGISTRY_PASSWORD}
- ENFORCE_MACHINE_PRESETS=1
- TRIGGER_DEQUEUE_INTERVAL_MS=1000
- DEBUG=${SUPERVISOR_DEBUG:-0}
volumes:
- shared-data:/home/node/shared
healthcheck:
test:
- CMD
- node
- -e
- require('http').get('http://127.0.0.1:8020/health',(r)=>process.exit(r.statusCode===200?0:1)).on('error',()=>process.exit(1))
interval: 10s
timeout: 5s
retries: 5
depends_on:
trigger:
condition: service_healthy
docker-proxy:
condition: service_healthy
docker-proxy:
image: tecnativa/docker-socket-proxy:v0.4.2
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- LOG_LEVEL=info
- POST=${POST:-1}
- CONTAINERS=${CONTAINERS:-1}
- IMAGES=${IMAGES:-1}
- INFO=${INFO:-1}
- NETWORKS=${NETWORKS:-1}
- AUTH=${AUTH:-1}
- DISTRIBUTION=${DISTRIBUTION:-1}
healthcheck:
test:
- CMD-SHELL
- nc -z 127.0.0.1 2375 || exit 1
interval: 30s
timeout: 5s
retries: 5
postgresql:
image: postgres:16-alpine
command:
- -c
- wal_level=logical
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
- POSTGRES_DB=${POSTGRES_DB:-trigger-db}
volumes:
- postgresql-data:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}
interval: 5s
timeout: 20s
retries: 10
redis:
image: redis:7-alpine
volumes:
- redis-data:/data
healthcheck:
test:
- CMD
- redis-cli
- ping
interval: 10s
timeout: 5s
retries: 5
electric:
image: electricsql/electric:1.2.9
environment:
- DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgresql:5432/${POSTGRES_DB:-trigger-db}?sslmode=disable
- ELECTRIC_SECRET=${SERVICE_PASSWORD_64_ELECTRIC}
- ELECTRIC_USAGE_REPORTING=false
healthcheck:
test:
- CMD
- curl
- -f
- http://localhost:3000/v1/health
interval: 10s
timeout: 5s
retries: 5
depends_on:
postgresql:
condition: service_healthy
clickhouse:
image: clickhouse/clickhouse-server:25.8
environment:
- CLICKHOUSE_USER=${SERVICE_USER_CLICKHOUSE}
- CLICKHOUSE_PASSWORD=${SERVICE_PASSWORD_64_CLICKHOUSE}
- CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
volumes:
- clickhouse-data:/var/lib/clickhouse
- clickhouse-logs:/var/log/clickhouse-server
healthcheck:
test:
- CMD-SHELL
- wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1
interval: 10s
timeout: 5s
retries: 5