返回 AI 资讯
自己有台闲置服务器,怎么像用 Heroku 一样部署?Dokku 给你一个私有 PaaS
工具2026-09-30风险:低

自己有台闲置服务器,怎么像用 Heroku 一样部署?Dokku 给你一个私有 PaaS

git push 一下就部署完,域名和 HTTPS 自动配好——Dokku 把 Heroku 的体验搬到了你自己的机器上。这篇讲它的五个内置能力和跟云 PaaS、K8s 的选型边界。

很多人手里都有一台闲置的云服务器,想把自己的项目部署上去,但一想到要配 Nginx、配 SSL 证书、配进程守护、配部署脚本,就觉得麻烦,最后要么继续用云平台的 PaaS(贵),要么项目就烂在本地。

Dokku 填补的正是这个空档。它在 GitHub 上有 3.2 万 star,MIT 协议,可商用。官方对自己的描述很朴素:"Docker 驱动的 mini-Heroku,你见过最小的 PaaS 实现"。

一句话概括体验:装好之后,git push 一下,应用就部署完了,域名、HTTPS 全都有。

官方项目页面截图
▲ 官方项目页面截图

它到底是什么

Dokku 是一个跑在你自己服务器上的极简 PaaS。它把 Heroku 那套"git push 即部署"的工作流搬到了你自己的机器上。

它的定位很克制:不做 Kubernetes 那套复杂的编排,不做多机集群,就在一台机器上把"部署"这件事做简单。对绝大多数个人项目和小团队应用,这个范围刚刚好。

装好 Dokku 之后,你的部署流程变成这样:

git remote add dokku dokku@yourserver:myapp

git push dokku main

推完之后,Dokku 会自动检测项目类型(Node、Python、Go、Ruby、Dockerfile……),构建镜像,启动容器,配置好域名和 HTTPS。整个过程你不用写一行配置文件。

这个体验对"我就想让项目跑起来"的需求来说,效率提升是数量级的。

五个必须知道的内置能力

自动 HTTPS。 内置 Let's Encrypt 插件,一条命令给应用配上证书,到期自动续。手动配证书这事从此与你无关。

零停机部署。 新版本构建完成后才会切换流量,部署过程中服务不中断。这一条对有真实用户的应用很关键。

数据库插件。 Postgres、MySQL、Redis、MongoDB 都有官方插件,一条命令创建,环境变量自动注入到应用。

dokku plugin:install https://github.com/dokku/dokku-postgres.git

dokku postgres:create mydb

dokku postgres:link mydb myapp

环境变量管理。 dokku config:set 直接设置,改完自动重启应用。密钥不进 Git,这是基本的安全实践。

回滚。 部署出问题,一条命令回退到上一个版本。这个功能用到的那天你会非常感激它。

和别的方案怎么选

vs 直接手动配服务器:如果你只有一个应用、不常改,手动配也行。但只要部署频率超过一周一次,Dokku 省下的时间是实实在在的。

vs 云平台 PaaS(Heroku / Railway / Render):云 PaaS 更省事,但贵,而且有资源限制。同样配置的机器,自建 Dokku 的成本通常是云 PaaS 的几分之一。代价是你要自己管服务器。

vs Kubernetes:K8s 是给多机集群、复杂微服务准备的。单个小应用上 K8s,运维复杂度会杀死你。Dokku 的能力边界很清楚——它就是为"一台机器跑几个应用"这个场景设计的。

简单判断:个人项目、小团队内部工具、早期 MVP → Dokku 非常合适;需要多机、自动扩缩容、复杂服务网格 → 上 K8s。

上手注意的四件事

服务器内存别太小。 构建过程(尤其是 Node 项目)比较吃内存,1GB 内存的机器构建大项目容易失败。建议 2GB 起步。

构建超时要留意。 默认构建超时是 10 分钟,大项目可能不够,可以用 dokku config:set 调整。

持久化数据一定要挂卷。 容器重启数据就没了。数据库用插件(自动处理持久化),用户上传的文件要显式挂载存储目录。

备份要做。 你在自己管服务器,没有云平台的自动备份兜底。数据库的定期备份脚本要提前配好,别等数据丢了才想起来。

谁最适合用它

  • 手里有闲置云服务器、想把它利用起来的开发者
  • 受够了云 PaaS 每月账单的小团队
  • 需要部署内部工具、不希望代码和数据出内网的场景
  • 想给客户做私有化部署的乙方——Dokku 让"交付一套能跑的系统"变得很简单

反过来,如果你完全不想碰服务器运维,那云 PaaS 依然是更适合的选择。Dokku 省掉的是"部署的繁琐",没有省掉"管服务器"这件事。

生产可用的四个配置

配好 swap。 构建过程内存峰值可能超过物理内存,加 2GB swap 能显著降低构建失败率。这是 Dokku 社区里最常被提到的建议,成本几乎为零。

零停机检查要开。 默认的健康检查可能在你应用还没真正就绪时就把流量切过去。配置 CHECKS 文件,让 Dokku 确认应用真的能响应再切换。

日志驱动配好。 默认日志不落盘,重启就没了。配 docker 的日志驱动或者直接用 dokku logs 配合外部收集,出事才有得查。

定期清理无用镜像。 每次部署都会生成新镜像,几个月下来磁盘会被吃满。设个定时任务跑 dokku cleanup,或者配好自动清理策略。

常见故障与排查

部署失败,提示构建超时。 大项目(尤其 Node)构建慢,调大 DOKKU_DOCKER_BUILD_TIMEOUT 或者优化 Dockerfile 减少层数。

应用起不来但没报错。 先看 dokku logs myapp -t,八成是端口绑定错了——应用必须监听 $PORT 环境变量指定的端口,写死 3000 会导致健康检查失败。

HTTPS 证书申请不下来。 检查域名解析是否真的指向了这台机器,以及 80 端口是否可达。Let's Encrypt 的验证需要 80 端口通。

一个真实的成本对比

同样是跑一个日访问量几千的小应用,三种方案的大致月成本:

  • 云 PaaS(Heroku/Railway 这类):通常 20-50 元起,资源再往上加会更贵
  • 云服务器 + Dokku:一台最基础的云服务器,通常在 30-100 元区间,但这台机器可以同时跑好几个应用
  • 纯手动配置服务器:服务器成本同上,但你要付出配置和维护的时间

关键差别在"同一台机器能跑几个应用"。Dokku 的边际成本几乎为零——多部署一个应用只是多一个容器。所以当你有三五个小项目时,自建 Dokku 的成本优势会非常明显。

时间成本也要算进去:装 Dokku 大概半小时,之后每次部署省下的时间会持续累积。

一个务实的建议

先在闲置机器上装一个 Dokku,把最不重要的那个项目迁上去跑两周。你会很快就感受到"git push 完就部署好了"这种体验有多省心,之后再决定要不要把主力项目迁过去。

官方仓库和完整文档在 github.com/dokku/dokku。

适合谁:有闲置云服务器的开发者、受够了云 PaaS 账单的小团队、需要私有化部署交付的乙方

相关资讯