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

132 lines
4.6 KiB
YAML

version: "3.8"
services:
# -------------------------------------------------------------------------
# Service 1: Database
# -------------------------------------------------------------------------
mysql:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MAUTIC_DB_DATABASE}
MYSQL_USER: ${MAUTIC_DB_USER}
MYSQL_PASSWORD: ${MAUTIC_DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
# -------------------------------------------------------------------------
# Service 2: Mautic Web (The Leader)
# -------------------------------------------------------------------------
mautic:
image: mautic/mautic:5.1.1-apache
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
ports:
- 80
environment:
- DOCKER_MAUTIC_ROLE=mautic_web
- DOCKER_MAUTIC_RUN_MIGRATIONS=true
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_URL=${MAUTIC_URL}
- MAUTIC_TRUSTED_PROXIES=${MAUTIC_TRUSTED_PROXIES}
- MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}
- MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT}
volumes:
- mautic_data:/var/www/html
# AUTOMATION FIX 1: Force permissions to be correct on every start
entrypoint: ["/bin/sh", "-c", "chown -R www-data:www-data /var/www/html && /entrypoint.sh apache2-foreground"]
# AUTOMATION FIX 2: Check if the CONFIG FILE exists. If not, report 'unhealthy'.
# This signals the other containers to keep waiting.
healthcheck:
test: ["CMD-SHELL", "test -f /var/www/html/config/local.php || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 300s # Give you 5 mins to run the installer before marking failed
# -------------------------------------------------------------------------
# Service 3: Mautic Cron (Waits for Install)
# -------------------------------------------------------------------------
mautic-cron:
image: mautic/mautic:5.1.1-apache
restart: unless-stopped
depends_on:
mautic:
condition: service_healthy # AUTOMATION FIX 3: Do not start until config file exists
environment:
- DOCKER_MAUTIC_ROLE=mautic_cron
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_URL=${MAUTIC_URL}
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
volumes:
- mautic_data:/var/www/html
# -------------------------------------------------------------------------
# Service 4: Mautic Worker (Waits for Install)
# -------------------------------------------------------------------------
mautic-worker:
image: mautic/mautic:5.1.1-apache
restart: unless-stopped
depends_on:
mautic:
condition: service_healthy # AUTOMATION FIX 3: Do not start until config file exists
deploy:
resources:
limits:
memory: 512M
environment:
- DOCKER_MAUTIC_ROLE=mautic_worker
- DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL=2
- DOCKER_MAUTIC_WORKERS_CONSUME_HIT=2
- DOCKER_MAUTIC_WORKERS_CONSUME_FAILED=2
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_URL=${MAUTIC_URL}
- MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}
- MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
volumes:
- mautic_data:/var/www/html
# -------------------------------------------------------------------------
# Service 5: phpMyAdmin
# -------------------------------------------------------------------------
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
environment:
PMA_HOST: mysql
PMA_PORT: 3306
UPLOAD_LIMIT: 64M
ports:
- 80
volumes:
mysql_data:
mautic_data: