Dokku 评测:单机 Docker PaaS,用一条命令把服务器变成 Heroku
由 Docker 驱动的 PaaS,可帮助您构建和管理应用程序的生命周期
秒懂
- 它是什么?
- Dokku 是一个基于 Docker 的迷你 PaaS,面向单台服务器。本文基于其 README 和发布记录,分析它的安装方式、运行机制、适用边界,以及它和 Kubernetes 这类重型平台的本质区别。
- 适合谁用?
- Dokku 适合个人开发者、小团队或预算有限的公司,他们想在一台 Ubuntu 或 Debian 服务器上快速部署应用,又不想维护 Kubernetes 那套复杂控制面。它不适合需要多节点高可用、自动伸缩或复杂网络策略的生产环境,因为 README 明确只支持单机 VM,且没有内置集群功能。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Shell(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月16日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题:单机上的 Heroku 替代品
Dokku 自称是 Docker 驱动的迷你 Heroku,目标是让开发者在一台服务器上获得类似 Heroku 的部署体验。它解决的问题很具体:你不想自己写 Docker 编排脚本,也不想为一个应用维护 Kubernetes 集群,但你仍然希望用 git push 或 Dockerfile 来部署应用,并自动管理生命周期。它面向的是个人开发者、小型团队,或者那些刚起步、预算有限的项目。README 里明确说它是“the smallest PaaS implementation you've ever seen”,这句话不是营销,而是它的设计取向:尽量少的东西,跑在单台机器上。
运行机制:git push 触发 Docker 构建
Dokku 的核心机制是 SSH 和 Docker 的结合。你通过 SSH 密钥认证连接到服务器,然后执行 git push 到 Dokku 管理的仓库。Dokku 接收推送后,会检测应用类型(比如 Node.js、Ruby 或 Python),然后构建 Docker 镜像,启动容器,并配置网络路由。README 提到安装时需要 SSH 密钥对,如果安装前服务器上已有密钥,它会自动导入,否则需要手动运行 `dokku ssh-keys:add`。这意味着部署流程完全围绕 SSH 和 git 工作流展开,没有复杂的 API 或控制面板。它依赖 Docker 作为运行时,但把 Docker 的细节封装起来,你不需要直接操作容器。
安装与初始配置:两条命令加两个步骤
安装过程在 README 里写得非常直接。你需要一台全新 VM,运行 Ubuntu 22.04/24.04 或 Debian 11 及以上版本,支持 amd64 和 arm64 架构。然后以有 sudo 权限的用户执行:`wget -NP . https://dokku.com/install/v0.38.27/bootstrap.sh`,接着 `sudo DOKKU_TAG=v0.38.27 bash bootstrap.sh`。安装完成后,你需要配置全局域名,命令是 `dokku domains:set-global`,以及添加用户访问权限,用 `dokku ssh-keys:add`。README 还提到有无人值守安装的文档,适合自动化场景。整个过程没有提到 Docker 的单独安装,说明 bootstrap 脚本会处理依赖。
系统要求与限制:单机部署的边界
README 明确列出系统要求:Ubuntu 22.04/24.04 或 Debian 11+,且是“a fresh VM”。这暗示 Dokku 假设你从干净环境开始,不会处理复杂的既有系统配置。它只支持单台服务器,没有集群功能,也没有自动伸缩或负载均衡的机制。如果你需要多节点高可用,Dokku 不是合适的工具。另外,SSH 密钥是部署的前提,如果安装前没有准备好,你必须手动导入,否则无法推送代码。这听起来简单,但对不熟悉 SSH 的用户来说是一个容易卡住的点。
升级与维护:版本发布频繁,但升级路径依赖文档
从最近的发布记录看,Dokku 的维护很活跃,v0.38.25 到 v0.38.27 间隔不到一个月,说明 bug 修复和功能更新持续进行。升级方式在 README 里只指向文档页面,没有给出具体命令。这意味着升级过程可能不是一条命令那么简单,你需要查看官方升级指南。对于追求稳定性的用户,频繁发布可能意味着需要定期关注版本变化。维护成本取决于你的使用深度:如果只用基本部署,升级可能轻松;如果用了插件或自定义配置,可能需要更多测试。
许可证与社区支持:MIT 下的自由度
Dokku 采用 MIT 许可证,版权归 Jeff Lindsay 所有。这意味着你可以自由使用、修改和分发,甚至用于商业项目,只要保留版权声明。README 提供了多种支持渠道:GitHub Issues、官方文档的故障排除指南,以及 Gliderlabs Slack 的 #dokku 频道。社区支持是开放的,但没有任何商业支持承诺。对于企业用户,这意味着你需要自己承担维护责任,或者依赖社区帮助。许可证的宽松性是一个加分项,但支持完全靠社区,没有 SLA。
替代方案:与 Kubernetes 和 Caprover 的对比
Dokku 的主要替代品是 Kubernetes,但两者思路完全不同。Kubernetes 是一个完整的容器编排平台,支持多节点集群、自动伸缩、服务发现和复杂网络策略,但它的学习曲线和运维成本很高。Dokku 则把这一切简化到单机上,用 SSH 和 git 驱动部署,牺牲了可扩展性。另一个替代是 Caprover,它也基于 Docker,提供 Web UI 和更简单的界面,但 Dokku 更强调命令行和 git 工作流。如果你需要图形界面,Caprover 可能更合适;如果你喜欢脚本化和 git 集成,Dokku 更直接。选择的关键在于你是否需要多节点,以及你愿意为运维投入多少时间。
编辑结论
Dokku 适合个人开发者、小团队或预算有限的公司,他们想在一台 Ubuntu 或 Debian 服务器上快速部署应用,又不想维护 Kubernetes 那套复杂控制面。它不适合需要多节点高可用、自动伸缩或复杂网络策略的生产环境,因为 README 明确只支持单机 VM,且没有内置集群功能。在采用前,你应该先确认自己的部署流程是否依赖 git push 或 Dockerfile,并检查服务器是否满足 Ubuntu 22.04/24.04 或 Debian 11+ 的要求,同时准备好 SSH 密钥对,因为安装后需要手动导入密钥才能部署。如果你需要横向扩展,Dokku 不是答案;如果你只需要一个能跑起来的 PaaS,它可能是最直接的选择。
社区笔记