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

159 lines
5.0 KiB
YAML

services:
oneuptime:
image: oneuptime/app:11.5.6
restart: unless-stopped
environment:
- PORT=3002
- NODE_ENV=production
- BILLING_ENABLED=false
- IS_ENTERPRISE_EDITION=false
- LOG_LEVEL=ERROR
- DISABLE_TELEMETRY=true
# Public host (domain) and protocol used to build links.
- HOST=${HOST}
- HTTP_PROTOCOL=${HTTP_PROTOCOL}
- ONEUPTIME_SECRET=${ONEUPTIME_SECRET}
- ENCRYPTION_SECRET=${ENCRYPTION_SECRET}
# Probes that present this key are allowed to self-register.
- REGISTER_PROBE_KEY=${REGISTER_PROBE_KEY}
- DATABASE_HOST=postgres
- DATABASE_PORT=5432
- DATABASE_USERNAME=postgres
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_NAME=oneuptimedb
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USERNAME=default
- REDIS_PASSWORD=${REDIS_PASSWORD}
- REDIS_DB=0
- CLICKHOUSE_HOST=clickhouse
- CLICKHOUSE_PORT=8123
- CLICKHOUSE_USER=default
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD}
- CLICKHOUSE_DATABASE=oneuptime
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
clickhouse:
condition: service_healthy
ingress:
image: oneuptime/nginx:11.5.6
restart: unless-stopped
environment:
- NODE_ENV=production
- BILLING_ENABLED=false
- LOG_LEVEL=ERROR
- DISABLE_TELEMETRY=true
- HOST=${HOST}
- NGINX_LISTEN_ADDRESS=
- NGINX_LISTEN_OPTIONS=
- PROVISION_SSL=
# Long domains (e.g. generated *.sslip.io hosts) overflow nginx's
# default server_names_hash_bucket_size of 64.
- SERVER_NAMES_HASH_BUCKET_SIZE=128
# Where nginx proxies the UI/API to.
- SERVER_APP_HOSTNAME=oneuptime
- APP_PORT=3002
# The marketing "home" app is not deployed (only used when billing is
# enabled), but nginx needs the vars to render its config.
- SERVER_HOME_HOSTNAME=home
- HOME_PORT=1444
# The ingress sidecar (custom-domain certificate writer) connects to
# Postgres and Redis.
- ONEUPTIME_SECRET=${ONEUPTIME_SECRET}
- ENCRYPTION_SECRET=${ENCRYPTION_SECRET}
- DATABASE_HOST=postgres
- DATABASE_PORT=5432
- DATABASE_USERNAME=postgres
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_NAME=oneuptimedb
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USERNAME=default
- REDIS_PASSWORD=${REDIS_PASSWORD}
- REDIS_DB=0
depends_on:
postgres:
condition: service_healthy
oneuptime:
condition: service_started
probe:
image: oneuptime/probe:11.5.6
restart: unless-stopped
environment:
- PORT=3874
- NODE_ENV=production
- LOG_LEVEL=ERROR
- DISABLE_TELEMETRY=true
# The probe reaches OneUptime through the ingress ("ingress" is part of
# nginx's server_name, so all API routes resolve correctly).
- ONEUPTIME_URL=http://ingress:7849
- PROBE_NAME=Probe-1
- PROBE_DESCRIPTION=Default probe for monitors
- PROBE_MONITORING_WORKERS=3
- PROBE_MONITOR_FETCH_LIMIT=10
- PROBE_KEY=${PROBE_KEY}
- REGISTER_PROBE_KEY=${REGISTER_PROBE_KEY}
depends_on:
ingress:
condition: service_started
postgres:
image: postgres:15
restart: unless-stopped
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${DATABASE_PASSWORD}
- POSTGRES_DB=oneuptimedb
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d oneuptimedb"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
redis:
image: redis:7.0.12
restart: unless-stopped
command: redis-server --requirepass "${REDIS_PASSWORD}" --save "" --appendonly no
healthcheck:
test: ["CMD-SHELL", "redis-cli -a \"$$REDIS_PASSWORD\" ping | grep PONG"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD}
clickhouse:
image: clickhouse/clickhouse-server:25.7
restart: unless-stopped
environment:
- CLICKHOUSE_USER=default
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD}
- CLICKHOUSE_DB=oneuptime
- CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
volumes:
- clickhouse-data:/var/lib/clickhouse
# Single-node cluster + embedded Keeper (OneUptime's analytics schema is
# always ReplicatedMergeTree + Distributed) and Distributed-insert
# batching, as shipped by upstream.
- ../files/clickhouse/cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- ../files/clickhouse/distributed-insert-tuning.xml:/etc/clickhouse-server/users.d/distributed-insert-tuning.xml
healthcheck:
test: ["CMD-SHELL", "clickhouse-client --password \"$$CLICKHOUSE_PASSWORD\" --query 'SELECT 1'"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
volumes:
postgres-data:
clickhouse-data: