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

96 lines
3.4 KiB
YAML

services:
airflow-db:
image: bitnami/postgresql:${POSTGRESQL_VERSION}
environment:
POSTGRESQL_DATABASE: ${POSTGRESQL_NAME}
POSTGRESQL_USERNAME: ${POSTGRESQL_USER}
POSTGRESQL_PASSWORD: ${POSTGRESQL_PASSWORD}
volumes:
- airflow-postgresql-persistance:/bitnami
restart: always
airflow-redis:
image: bitnamilegacy/redis:${REDIS_VERSION}
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
- airflow-redis-persistance:/bitnami
restart: always
airflow:
image: bitnamilegacy/airflow:${AIRFLOW_VERSION}
environment:
AIRFLOW_EXECUTOR: CeleryExecutor
AIRFLOW_DATABASE_HOST: airflow-db
AIRFLOW_DATABASE_NAME: ${POSTGRESQL_NAME}
AIRFLOW_DATABASE_USERNAME: ${POSTGRESQL_USER}
AIRFLOW_DATABASE_PASSWORD: ${POSTGRESQL_PASSWORD}
REDIS_HOST: airflow-redis
REDIS_PASSWORD: ${REDIS_PASSWORD}
AIRFLOW_WEBSERVER_HOST: airflow
AIRFLOW_BASE_URL: https://airflow.${ROOT_DOMAIN}/
AIRFLOW_SECRET_KEY: ${AIRFLOW_SECRET_KEY}
AIRFLOW_LOAD_EXAMPLES: ${AIRFLOW_EXAMPLES}
AIRFLOW_USERNAME: ${AIRFLOW_USER}
AIRFLOW_PASSWORD: ${AIRFLOW_PASSWORD}
AIRFLOW_EMAIL: ${AIRFLOW_EMAIL}
AIRFLOW__SMTP__SMTP_HOST: ${SMTP_HOST}
AIRFLOW__SMTP__SMTP_PORT: ${SMTP_PORT}
AIRFLOW__SMTP__SMTP_STARTTLS: ${SMTP_STARTTLS}
AIRFLOW__SMTP__SMTP_SSL: ${SMTP_SSL}
AIRFLOW__SMTP__SMTP_USER: ${SMTP_USER}
AIRFLOW__SMTP__SMTP_PASSWORD: ${SMTP_PASSWORD}
AIRFLOW__SMTP__SMTP_MAIL_FROM: ${SMTP_MAIL_FROM}
volumes:
- ${AIRFLOW_DAG_PATH}:/opt/bitnami/airflow/dags
- ${AIRFLOW_PY_REQUIREMENTS}:/bitnami/python/requirements.txt
depends_on:
- airflow-db
- airflow-redis
expose:
- "8080"
restart: always
airflow-worker:
image: bitnamilegacy/airflow-worker:${AIRFLOW_WORKER_VERSION}
environment:
AIRFLOW_EXECUTOR: CeleryExecutor
AIRFLOW_DATABASE_HOST: airflow-db
AIRFLOW_DATABASE_NAME: ${POSTGRESQL_NAME}
AIRFLOW_DATABASE_USERNAME: ${POSTGRESQL_USER}
AIRFLOW_DATABASE_PASSWORD: ${POSTGRESQL_PASSWORD}
REDIS_HOST: airflow-redis
REDIS_PASSWORD: ${REDIS_PASSWORD}
AIRFLOW_WEBSERVER_HOST: airflow
AIRFLOW_BASE_URL: https://airflow.${ROOT_DOMAIN}/
AIRFLOW_SECRET_KEY: ${AIRFLOW_SECRET_KEY}
AIRFLOW_LOAD_EXAMPLES: ${AIRFLOW_EXAMPLES}
volumes:
- airflow-data:/opt/bitnami/airflow/data
- ${AIRFLOW_DAG_PATH}:/opt/bitnami/airflow/dags
- ${AIRFLOW_PY_REQUIREMENTS}:/bitnami/python/requirements.txt
depends_on:
- airflow
restart: always
airflow-scheduler:
image: bitnamilegacy/airflow-scheduler:${AIRFLOW_SCHEDULER_VERSION}
environment:
AIRFLOW_EXECUTOR: CeleryExecutor
AIRFLOW_DATABASE_HOST: airflow-db
AIRFLOW_DATABASE_NAME: ${POSTGRESQL_NAME}
AIRFLOW_DATABASE_USERNAME: ${POSTGRESQL_USER}
AIRFLOW_DATABASE_PASSWORD: ${POSTGRESQL_PASSWORD}
REDIS_HOST: airflow-redis
REDIS_PASSWORD: ${REDIS_PASSWORD}
AIRFLOW_WEBSERVER_HOST: airflow
AIRFLOW_BASE_URL: https://airflow.${ROOT_DOMAIN}/
AIRFLOW_SECRET_KEY: ${AIRFLOW_SECRET_KEY}
AIRFLOW_LOAD_EXAMPLES: ${AIRFLOW_EXAMPLES}
volumes:
- ${AIRFLOW_DAG_PATH}:/opt/bitnami/airflow/dags
- ${AIRFLOW_PY_REQUIREMENTS}:/bitnami/python/requirements.txt
depends_on:
- airflow
restart: always
volumes:
airflow-postgresql-persistance: {}
airflow-redis-persistance: {}
airflow-data: {}