Skip to content
247 changes: 247 additions & 0 deletions blueprints/triggerdotdev-v4/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
version: "3.8"

services:
registry-init:
image: httpd:2.4.66-alpine
restart: "no"
volumes:
- registry-auth:/auth
environment:
REGISTRY_USERNAME: ${REGISTRY_USERNAME:-trigger}
REGISTRY_PASSWORD: ${REGISTRY_PASSWORD}
command: >
sh -c "
if [ ! -f /auth/htpasswd ]; then
htpasswd -Bbc /auth/htpasswd $$REGISTRY_USERNAME $$REGISTRY_PASSWORD;
fi
"

trigger:
image: ghcr.io/triggerdotdev/trigger.dev:${TRIGGER_IMAGE_TAG:-v4.4.3}
restart: unless-stopped
depends_on:
- postgres
- redis
- clickhouse
- electric
- minio
- registry
user: root
command: sh -c "chown -R node:node /home/node/shared && exec ./scripts/entrypoint.sh"
environment:
REMIX_APP_PORT: 3000
APP_ORIGIN: https://${TRIGGER_DOMAIN}
LOGIN_ORIGIN: https://${TRIGGER_DOMAIN}
API_ORIGIN: https://${TRIGGER_DOMAIN}
SESSION_SECRET: ${SESSION_SECRET}
MAGIC_LINK_SECRET: ${MAGIC_LINK_SECRET}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
MANAGED_WORKER_SECRET: ${MANAGED_WORKER_SECRET}
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-trigger}?schema=public&sslmode=disable
DIRECT_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-trigger}?schema=public&sslmode=disable
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_TLS_DISABLED: "true"
ELECTRIC_ORIGIN: http://electric:3000
DEV_OTEL_EXPORTER_OTLP_ENDPOINT: https://${TRIGGER_DOMAIN}/otel
DEPLOY_REGISTRY_HOST: ${REGISTRY_DOMAIN}
DEPLOY_REGISTRY_NAMESPACE: ${REGISTRY_NAMESPACE:-trigger}
DEPLOY_REGISTRY_USERNAME: ${REGISTRY_USERNAME:-trigger}
DEPLOY_REGISTRY_PASSWORD: ${REGISTRY_PASSWORD}
OBJECT_STORE_BASE_URL: http://minio:9000
OBJECT_STORE_ACCESS_KEY_ID: admin
OBJECT_STORE_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD}
GRACEFUL_SHUTDOWN_TIMEOUT: 1000
NODE_MAX_OLD_SPACE_SIZE: ${NODE_MAX_OLD_SPACE_SIZE:-1024}
TRIGGER_BOOTSTRAP_ENABLED: "1"
TRIGGER_BOOTSTRAP_WORKER_GROUP_NAME: bootstrap
TRIGGER_BOOTSTRAP_WORKER_TOKEN_PATH: /home/node/shared/worker_token
CLICKHOUSE_URL: http://${CLICKHOUSE_ADMIN_USER:-default}:${CLICKHOUSE_ADMIN_PASSWORD}@clickhouse:8123?secure=false
QUERY_CLICKHOUSE_URL: http://${CLICKHOUSE_ADMIN_USER:-default}:${CLICKHOUSE_ADMIN_PASSWORD}@clickhouse:8123
CLICKHOUSE_LOG_LEVEL: info
INTERNAL_OTEL_TRACE_LOGGING_ENABLED: "0"
RUN_REPLICATION_ENABLED: "1"
RUN_REPLICATION_CLICKHOUSE_URL: http://${CLICKHOUSE_ADMIN_USER:-default}:${CLICKHOUSE_ADMIN_PASSWORD}@clickhouse:8123
RUN_REPLICATION_LOG_LEVEL: info
APP_LOG_LEVEL: info
TRIGGER_TELEMETRY_DISABLED: "0"
WHITELISTED_EMAILS: ${WHITELISTED_EMAILS:-}
ADMIN_EMAILS: ${ADMIN_EMAILS:-}
DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMIT: ${DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMIT:-100}
DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMIT: ${DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMIT:-300}
DEV_MAX_CONCURRENT_RUNS: ${DEV_MAX_CONCURRENT_RUNS:-25}
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-10}
WORKER_POLL_INTERVAL: ${WORKER_POLL_INTERVAL:-1000}
TASK_PAYLOAD_OFFLOAD_THRESHOLD: ${TASK_PAYLOAD_OFFLOAD_THRESHOLD:-524288}
TASK_PAYLOAD_MAXIMUM_SIZE: ${TASK_PAYLOAD_MAXIMUM_SIZE:-3145728}
BATCH_TASK_PAYLOAD_MAXIMUM_SIZE: ${BATCH_TASK_PAYLOAD_MAXIMUM_SIZE:-1000000}
TASK_RUN_METADATA_MAXIMUM_SIZE: ${TASK_RUN_METADATA_MAXIMUM_SIZE:-262144}
REALTIME_STREAM_MAX_LENGTH: ${REALTIME_STREAM_MAX_LENGTH:-1000}
REALTIME_STREAM_TTL: ${REALTIME_STREAM_TTL:-86400}
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: 30s
timeout: 10s
retries: 5
start_period: 30s

postgres:
image: postgres:14
restart: unless-stopped
command: ["-c", "wal_level=logical"]
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB:-trigger}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 5s
timeout: 20s
retries: 10
start_period: 10s

redis:
image: redis:7
restart: unless-stopped
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s

electric:
image: electricsql/electric:1.2.4
restart: unless-stopped
depends_on:
- postgres
environment:
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-trigger}?schema=public&sslmode=disable
ELECTRIC_INSECURE: "true"
ELECTRIC_USAGE_REPORTING: "false"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/v1/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s

clickhouse:
image: bitnamilegacy/clickhouse:25.7.5-debian-12-r0
restart: unless-stopped
environment:
CLICKHOUSE_ADMIN_USER: ${CLICKHOUSE_ADMIN_USER:-default}
CLICKHOUSE_ADMIN_PASSWORD: ${CLICKHOUSE_ADMIN_PASSWORD}
volumes:
- clickhouse-data:/bitnami/clickhouse
- ../files/clickhouse/override.xml:/bitnami/clickhouse/etc/config.d/override.xml:ro
healthcheck:
test: ["CMD", "clickhouse-client", "--host", "localhost", "--port", "9000", "--user", "${CLICKHOUSE_ADMIN_USER:-default}", "--password", "${CLICKHOUSE_ADMIN_PASSWORD}", "--query", "SELECT 1"]
interval: 5s
timeout: 5s
retries: 5
start_period: 10s

registry:
image: registry:2
restart: unless-stopped
depends_on:
registry-init:
condition: service_completed_successfully
volumes:
- registry-auth:/auth:ro
- registry-data:/var/lib/registry
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:5000/"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s

minio:
image: bitnamilegacy/minio:2025.7.23-debian-12-r5
restart: unless-stopped
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
MINIO_DEFAULT_BUCKETS: packets
MINIO_BROWSER: "on"
volumes:
- minio-data:/bitnami/minio/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 5s
timeout: 10s
retries: 5
start_period: 10s

supervisor:
image: ghcr.io/triggerdotdev/supervisor:${TRIGGER_IMAGE_TAG:-v4.4.3}
restart: unless-stopped
depends_on:
- docker-proxy
- trigger
user: root
command: sh -c "chown -R node:node /home/node/shared && while [ ! -f /home/node/shared/worker_token ]; do sleep 2; done && 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: file:///home/node/shared/worker_token
MANAGED_WORKER_SECRET: ${MANAGED_WORKER_SECRET}
TRIGGER_WORKLOAD_API_DOMAIN: supervisor
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:-0}
DOCKER_REGISTRY_URL: https://${REGISTRY_DOMAIN}
DOCKER_REGISTRY_USERNAME: ${REGISTRY_USERNAME:-trigger}
DOCKER_REGISTRY_PASSWORD: ${REGISTRY_PASSWORD}
DEBUG: "1"
ENFORCE_MACHINE_PRESETS: "1"
TRIGGER_DEQUEUE_INTERVAL_MS: 1000
volumes:
- shared-data:/home/node/shared
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:8020/health', (res) => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 30s
timeout: 10s
retries: 5
start_period: 10s

docker-proxy:
image: tecnativa/docker-socket-proxy:v0.4.2
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
LOG_LEVEL: info
POST: "1"
CONTAINERS: "1"
IMAGES: "1"
INFO: "1"
NETWORKS: "1"
healthcheck:
test: ["CMD", "nc", "-z", "127.0.0.1", "2375"]
interval: 30s
timeout: 5s
retries: 5
start_period: 5s

volumes:
postgres-data:
redis-data:
clickhouse-data:
minio-data:
shared-data:
registry-data:
registry-auth:
67 changes: 67 additions & 0 deletions blueprints/triggerdotdev-v4/template.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[variables]
main_domain = "${domain}"
registry_domain = "${domain}"
trigger_image_tag = "v4.4.3"
postgres_db = "trigger"
postgres_password = "${password:32}"
session_secret = "${base64:32}"
magic_link_secret = "${base64:32}"
encryption_key = "${password:32}"
managed_worker_secret = "${base64:32}"
minio_root_password = "${password:32}"
registry_username = "trigger"
registry_password = "${password:32}"
registry_namespace = "trigger"
clickhouse_admin_user = "default"
clickhouse_admin_password = "${password:32}"
docker_runner_networks = "set-after-first-deploy"

[[config.domains]]
serviceName = "trigger"
port = 3_000
host = "${main_domain}"

[[config.domains]]
serviceName = "registry"
port = 5_000
host = "${registry_domain}"

[config.env]
MAIN_DOMAIN = "${main_domain}"
TRIGGER_DOMAIN = "${main_domain}"
REGISTRY_DOMAIN = "${registry_domain}"
TRIGGER_IMAGE_TAG = "${trigger_image_tag}"
POSTGRES_DB = "${postgres_db}"
POSTGRES_PASSWORD = "${postgres_password}"
SESSION_SECRET = "${session_secret}"
MAGIC_LINK_SECRET = "${magic_link_secret}"
ENCRYPTION_KEY = "${encryption_key}"
MANAGED_WORKER_SECRET = "${managed_worker_secret}"
MINIO_ROOT_PASSWORD = "${minio_root_password}"
REGISTRY_USERNAME = "${registry_username}"
REGISTRY_PASSWORD = "${registry_password}"
REGISTRY_NAMESPACE = "${registry_namespace}"
CLICKHOUSE_ADMIN_USER = "${clickhouse_admin_user}"
CLICKHOUSE_ADMIN_PASSWORD = "${clickhouse_admin_password}"
QUERY_CLICKHOUSE_URL = "http://${clickhouse_admin_user}:${clickhouse_admin_password}@clickhouse:8123"
DOCKER_RUNNER_NETWORKS = "${docker_runner_networks}"

[[config.mounts]]
filePath = "/clickhouse/override.xml"
content = """
<clickhouse>
<logger>
<level>warning</level>
</logger>
<mark_cache_size>524288000</mark_cache_size>
<concurrent_threads_soft_limit_num>1</concurrent_threads_soft_limit_num>
<profiles>
<default>
<max_block_size>8192</max_block_size>
<max_download_threads>1</max_download_threads>
<input_format_parallel_parsing>0</input_format_parallel_parsing>
<output_format_parallel_formatting>0</output_format_parallel_formatting>
</default>
</profiles>
</clickhouse>
"""
11 changes: 11 additions & 0 deletions blueprints/triggerdotdev-v4/triggerdotdev-v4.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 18 additions & 1 deletion meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5307,7 +5307,7 @@
{
"id": "pyrodactyl",
"name": "Pyrodactyl",
"version": "main",
"version": "v4.4.3",
"description": "Pyrodactyl is the Pterodactyl-based game server panel that's faster, smaller, safer, and more accessible than Pelican. ",
"logo": "pyrodactyl.png",
"links": {
Expand Down Expand Up @@ -6178,6 +6178,23 @@
"applications"
]
},
{
"id": "triggerdotdev-v4",
"name": "Trigger.dev v4",
"version": "main",
"description": "Trigger.dev v4 template with PostgreSQL, Redis, ElectricSQL, ClickHouse, MinIO, and private Docker registry.",
"logo": "triggerdotdev-v4.svg",
"links": {
"github": "https://github.com/triggerdotdev/trigger.dev",
"website": "https://trigger.dev/",
"docs": "https://trigger.dev/docs"
},
"tags": [
"event-driven",
"automation",
"workflows"
]
},
{
"id": "trilium",
"name": "Trilium",
Expand Down
Loading