Dokku:自托管的迷你 Heroku,一条 bootstrap 脚本跑起整台 PaaS
阅读时间: 大约 9 分钟
Dokku:自托管的迷你 Heroku,一条 bootstrap 脚本跑起整台 PaaS
Dokku 自称是”你见过的最小的 PaaS 实现”(The smallest PaaS implementation you’ve ever seen)。它不是一家托管云厂商,而是一个可以在你自己 VPS 上装起来的开源软件:跑一条 bootstrap 脚本装完,之后 git push 就能把 Heroku 兼容的应用发布上去。官网当前最新版本为 v0.38.31(Koala 周报条目记录时为 0.38.25),项目已维护十余年,社区仍活跃。本文基于 Dokku 官网与官方文档,分析它的机制、定位与真实代价。
一、背景动机:为什么要”自己给自己搭 Heroku”
Heroku 这类托管 PaaS 的卖点是”只管推代码、不管服务器”,但代价是按 dyno 计费、供应商锁定、价格逐年上涨。与此同时,几十元一个月的 VPS 性能早已过剩,只是在裸机上手工配 Nginx、Systemd、TLS 证书、进程守护又繁琐易错。Dokku 切中的就是这个中间地带:用一台便宜 VPS,换回接近 Heroku 的部署体验,但运维、备份、监控全归自己。
Koala 的点评一语中的:和 Fly.io、Render 这类托管平台走完全相反的路线——Dokku 放弃厂商代管,换来零锁定与成本可控。在 Agent 大量碎片化生成小应用的今天,“一台机器跑几十个小应用”的模式反而比几年前更有生命力。
二、是什么:单主机的 Heroku 兼容层
Dokku 的工作方式可以概括为三步(官网 Quick-start):
# 下载并运行安装脚本
wget -NP . https://dokku.com/bootstrap.sh
sudo DOKKU_TAG=v0.38.31 bash bootstrap.sh
# 配置服务器域名、上传公钥
dokku domains:set-global dokku.me
echo "$PUBLIC_KEY" | dokku ssh-keys:add admin
# 创建应用并 push 部署
dokku apps:create test-app一旦装好,你就能像在 Heroku 上一样,把本地 git 仓库 git push dokku master 上去。Dokku 会用 Heroku buildpacks 把代码编译成镜像,然后在 Docker 容器里隔离运行,再自动通过内置的 Nginx 反向代理把服务暴露出去。最终结果就是”你自己的、单主机版 Heroku”。
三、技术机制:Docker 隔离 + buildpack 编译 + 插件内核
Dokku 的技术栈有三个关键件:
- Docker 做应用隔离:每个应用跑在独立容器里,互不干扰,因此”可以把 Dokku 装在任何硬件上”,官方建议用廉价云主机即可。
- Heroku buildpacks 编译:应用不关心运行时环境,buildpack 自动识别语言(Node、Python、Ruby、Go 等)并打包,这也是它能直接兼容 Heroku 生态的原因。
- 一切皆插件:Dokku 的核心本身也是插件,数据库、TLS、域名、日志、缩容等功能都由插件提供,且可以用任意语言编写插件来扩展。
官网首页把上手拆成 Create / Deploy / Scale 三段,并提供三段官方 asciinema 终端录屏演示(本文首图即其中一段,展示 git push 后 buildpack 自动构建、容器启动的全过程)。除了 curl | bash 的通用装法,Dokku 还提供 Azure、DigitalOcean、DreamHost 的官方一键安装镜像说明。
四、关键事实与数字
| 项目 | 官方口径 |
|---|---|
| 定位 | 开源 Heroku 替代品 / 单主机 PaaS |
| 最新版本 | v0.38.31(官网首页标注) |
| 隔离技术 | Docker 容器 |
| 构建方式 | Heroku buildpacks |
| 部署方式 | git push(Heroku 兼容) |
| 扩展机制 | 插件,任意语言可写 |
| 商业版本 | 另有付费 Pro 版(开源版未覆盖的功能) |
| 一键安装 | 通用 bootstrap.sh + Azure/DigitalOcean/DreamHost 镜像 |
需要说明:以上数字均直接来自 Dokku 官网首页与快速上手页,属于”官方称”口径。Dokku 并不公布与 Fly.io、Render 的横向性能或成本对比数据;所谓”省几十美元”是官网的调侃式表述,不是实测结论。
五、口径偏差与官方自己承认的局限
这一节是客观看待 Dokku 的关键:
- 它是单主机(single-host)方案。官网明确写”your own, single-host version of Heroku”——没有内置多机调度、自动故障转移。你的 VPS 挂了,上面所有应用一起挂。它不是 Kubernetes 的轻量替代,而是单盒部署。
- 运维责任在用户自己。备份、监控、安全补丁、磁盘满了怎么办,官方一概不托管。Koala 点评也强调”用户自己管运维、备份和监控”。
- “最小 PaaS”是定位宣传,不是性能指标。官网没有给出吞吐量、冷启动时延、容器密度等可核对基准;它的”小”指架构简单、资源占用低,而非经过测试的性能数字。
- Pro 版才覆盖高级能力。官网明确”开源版未覆盖的需求请考虑 Pro 版”,意味着企业级 SSO、支持、某些高级插件不在 MIT 开源范围内。
- bootstrap 脚本需要 root 权限。
sudo bash bootstrap.sh会在你服务器上装一整套环境,对安全性敏感的生产环境,应先审阅脚本内容而非盲信。
六、适用 / 不适用场景
适合:
- 个人项目、Demo、Side Project:几元到几十元 VPS 就能跑,告别”本地能跑上线就崩”;
- 小团队内部工具:git push 即上线,省去招聘专职运维;
- 想脱离 Heroku 账单、又不想上 Kubernetes 的团队;
- 教学与原型验证:buildpack 自动配环境,专注写代码。
不适合:
- 需要高可用、多副本、跨 AZ 容灾的生产核心业务——单主机撑不住;
- 需要弹性自动扩缩容到上千实例的业务——它的 scale 是手工/插件式的;
- 完全不想碰 Linux 运维的团队——Dokku 只封装了部署,没封装系统管理。
七、客观分析:优势与意义
优势: 零厂商锁定、成本极低、兼容 Heroku 生态、插件可扩展、十余年迭代稳定。它把”自建 PaaS”的门槛从几天压到半小时。
局限: 单主机无高可用、无官方横向基准、高级能力在 Pro 版、需自备运维与备份。
它意味着什么: 在 Serverless 与托管 PaaS 百花齐放的 2026 年,Dokku 这种”自己搭小 Heroku”的老项目反而回潮——因为碎片化的 Agent 应用需要大量便宜、可控、不锁定的部署位。它证明了一件事:把 Heroku 的部署体验抽象成一层薄软件,跑在廉价 VPS 上,本身就是一种产品形态。对预算敏感、又厌恶锁定的独立开发者和小团队,Dokku 依然是值得放进工具箱的那一个。