From 0beb68a228750b15959374041a7f92d49b0516f9 Mon Sep 17 00:00:00 2001 From: Stephan Fitzpatrick Date: Tue, 14 Jul 2026 16:41:48 -0700 Subject: [PATCH] feat: add dagu blueprint Dagu is a self-contained workflow engine with a Web UI for scheduling and orchestrating jobs as DAGs defined in declarative YAML. - Pin ghcr.io/dagucloud/dagu:2.10.7 and expose the Web UI on port 8080 - Set DAGU_HOST=0.0.0.0 so the service is reachable through the proxy - Enable basic auth with a generated per-deploy admin password - Persist /var/lib/dagu (DAGs, logs, run history) in a named volume Claude-Session: https://claude.ai/code/session_01CRNT6sa2q2P9rUTokeoGhQ --- blueprints/dagu/docker-compose.yml | 25 +++++++++++++++++++++++++ blueprints/dagu/logo.png | Bin 0 -> 7754 bytes blueprints/dagu/meta.json | 19 +++++++++++++++++++ blueprints/dagu/template.toml | 15 +++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 blueprints/dagu/docker-compose.yml create mode 100644 blueprints/dagu/logo.png create mode 100644 blueprints/dagu/meta.json create mode 100644 blueprints/dagu/template.toml diff --git a/blueprints/dagu/docker-compose.yml b/blueprints/dagu/docker-compose.yml new file mode 100644 index 00000000..4fee20eb --- /dev/null +++ b/blueprints/dagu/docker-compose.yml @@ -0,0 +1,25 @@ +# Access the Dagu Web UI at the assigned domain. +# Sign in with the basic auth credentials from your .env file (default user: admin). +# Place your DAG definitions (YAML) in the dags directory via the Web UI or the API. + +version: "3.8" + +services: + dagu: + image: ghcr.io/dagucloud/dagu:2.10.7 + command: dagu start-all + restart: unless-stopped + expose: + - 8080 + volumes: + - dagu-data:/var/lib/dagu + environment: + # Dagu binds to 127.0.0.1 by default; 0.0.0.0 is required to reach it + - DAGU_HOST=0.0.0.0 + - DAGU_PORT=8080 + - DAGU_AUTH_MODE=basic + - DAGU_AUTH_BASIC_USERNAME=${ADMIN_USERNAME} + - DAGU_AUTH_BASIC_PASSWORD=${ADMIN_PASSWORD} + +volumes: + dagu-data: {} diff --git a/blueprints/dagu/logo.png b/blueprints/dagu/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa26d2cdffe6c804134f6a35a7be5d76a7055ae GIT binary patch literal 7754 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 n