源码系统概览
文章正文
Dagu 是一款用 Go 语言编写的本地优先开源工作流引擎,来自 GitHub 原版项目 dagu-org/dagu,是 Airflow 的轻量替代方案。
它把脚本、SSH 命令、容器与 AI 代理统一编排成声明式 YAML 的 DAG 工作流,单二进制即可部署,无需外部数据库。
下面从技术架构、部署方式到安全情况,把 dagu-cn 这套源码过一遍。
源码简介
Dagu 以面向非编排专家为定位,让不以编排为主要工作的团队也能快速获得生产级的工作流自动化能力。
在 dagu-cn 源码中,DAG 定义与依赖解析位于 internal/core 目录,调度器位于 internal/service/scheduler,执行器位于 internal/core/exec,Web UI 位于 ui 目录。
调度器内置定时计划、补跑、队列优先级、自动重试、超时控制与僵尸检测,执行器则驱动每个 step 的 run 与 action 执行。
项目附带 conformance 规范测试,对 YAML 解析与值解析等行为有明确约定。
仓库 README 中文段落对许可证的描述和源码 LICENSE 文件不一致,实际协议以 GPL-3.0 的 LICENSE 文件为准。
适用场景
Dagu 源码特别适合运维自动化、定时任务编排与批处理脚本管理。
脚本增多、依赖复杂、纯 cron 难维护时,Dagu 提供可视化调度、重试与运行历史。
它适合在本地、内网、离线或边缘节点运行,数据与凭据留在运行环境内部,自托管部署即可。
对不想维护多组件编排系统的团队,Dagu 是 Airflow 与 n8n 的轻量替代。
| 对比项 | Dagu | Airflow | n8n |
|---|---|---|---|
| 定义方式 | 声明式 YAML | Python 代码 | 可视化节点 |
| 部署形态 | 单二进制、无需数据库 | 多组件、依赖数据库 | Node.js 服务 |
| 适用人群 | 运维与脚本团队 | 数据工程团队 | 自动化集成开发者 |
功能亮点
单二进制部署,无需数据库与消息队列,一条命令即可启动调度器、执行器与 Web UI。
声明式 YAML 定义 DAG,业务逻辑与编排逻辑分离,支持 graph 与 chain 两种拓扑。
原生支持 Shell、Docker、Kubernetes、SSH 与外部编码代理 CLI 等执行方式。
内置 Web UI,提供运行监控、日志查看、手动重试、审批与运行历史。
内置 MCP 协议,AI 代理可通过标准接口创建、执行与管理工作流,并支持密钥加密存储。
技术架构与部署指南
技术栈与运行环境
前端:React 与 TypeScript 构建的 Web UI,搭配 Webpack、TailwindCSS,测试使用 Playwright 与 Vitest。
后端:Go 语言编写,go.mod 声明 Go 1.26.5 工具链,HTTP 服务基于 go-chi,CLI 基于 Cobra,YAML 解析使用 goccy/go-yaml,定时调度基于 robfig/cron。
数据库:默认无需数据库,运行状态与日志落在本地文件目录,可选 SQLite、Redis 或 PostgreSQL 作为存储后端。
运行环境:支持 Linux、macOS 与 Windows,内存建议不低于 512MB,磁盘空间建议预留 100MB 以上。
其他依赖:集成 Docker 客户端、Kubernetes 客户端、SSH SFTP、MinIO、Vault,以及 AWS、GCP、Azure、阿里云密钥管理服务。
安装与部署提示
本地编译可执行 make build 或 go build,产出单一二进制文件。
想快速上手,先创建一份 hello.yaml,定义 steps 与 run 字段,再执行 dagu start hello.yaml 运行工作流。
启动完整服务可运行 dagu start-all –dags .,随后在浏览器打开 http://localhost:8080 访问 Web UI。
项目还提供 Dockerfile、Docker Compose、Helm Chart 与 Kubernetes 清单,支持容器化与集群部署。
编译前先核对本地 Go 版本与 go.mod 声明是否一致,避免工具链版本不匹配导致构建失败。
截图与演示说明



本源码未附带可直接引用的截图文件,但 Web UI 的页面结构在代码中清晰可辨。
首页 Overview 提供时间线与 Cockpit 仪表盘,展示排队、运行中、完成与失败的工作流状态。
DAGs 页面用于浏览与管理工作流定义,DAG Runs 页面展示单次运行详情与各 step 的执行状态。
Step Logs 页面逐行展示输出日志,可定位失败步骤,并支持从界面直接重试与停止运行。
系统还内置 Secrets、Workers、API Keys 与审计日志等管理页面,运维能力完整。
常见问题
问:Dagu 是什么?
Dagu 是一款 Go 语言编写的开源 DAG 工作流引擎,用声明式 YAML 定义任务依赖,内置 Web UI,适合运维自动化与定时任务编排。
问:Dagu 怎么用?
写好 YAML 工作流文件后执行 dagu start 运行,执行 dagu start-all 启动 Web 服务,浏览器中即可监控与重试。
问:Dagu 与 Airflow、n8n 有什么区别?
Airflow 用 Python 定义 DAG,组件多,面向专职数据工程团队;n8n 偏向可视化节点编排;Dagu 用 YAML 定义、单二进制运行,学习成本更低,更适合脚本与运维场景。
问:Dagu 是否免费?
Dagu 以 GPL-3.0 协议开源,可免费使用与二次开发,商用部署需遵守该协议条款,具体以 LICENSE 文件为准。
安全风险提示
本次对 dagu-cn 源码进行了恶意代码特征扫描,未发现 eval、base64_decode、shell_exec、gzinflate 等常见后门函数痕迹。
扫描同时检出一条存储凭据类告警,具体如下。
路径:charts/dagu/README.md。
类型:硬编码凭据示例。
证据:该文件中的 kubectl create secret 示例命令与 license 密钥占位符均为部署文档样例,并非真实凭据。
建议:实际部署时应使用自有密钥管理方式,避免直接套用示例命令中的占位值。
下载说明
本页面提供的 Dagu 工作流引擎源码仅供学习与技术研究参考,下载后请自行审阅代码并验证安全性。
使用本源码产生的任何后果与原作者及本站无关,商用部署前请认真核对 GPL-3.0 协议条款。
GitHub项目开源地址:https://github.com/dagu-org/dagu
最后更新:2026-08-18