周三晚上十一点,我第N次对着Vercel的dashboard发呆。新项目还在验证想法阶段,流量靠天吃饭,可免费额度的那根红线就像悬在头上的剑——万一哪天半夜睡醒,发现账单多了两个零。然后我看到了Dokploy,一个开源的、自托管的PaaS,把自己服务器变成Heroku、Vercel、Netlify的免费替身。从代码推送到域名证书,从数据库到流量路由,它用一台Ubuntu 24.04替你全包了。

这篇写的不是测评,是一场实操:在裸机Ubuntu上装Dokploy,挂一个公开仓库的示例应用,绑上自己的域名并自动签发Let's Encrypt证书,再顺手点一下创建PostgreSQL,最后瞟一眼资源监控面板。跑完后你会得到一个真正跑着应用和数据库、全程HTTPS的私有PaaS。条件只有三个:一台Ubuntu 24.04服务器,一个非root的sudo用户,还有两条DNS A记录——一条给Dokploy看板,一条给你的应用。

打开网易新闻 查看精彩图片

第一步:把Dokploy塞进服务器
基础动作:先更新软件包列表,然后一条curl管道命令跑安装脚本。脚本会自己检查Docker有没有装、没装自动装上,再把Swarm模式搭起来,最后把整个Dokploy栈拉起来。十几秒后终端弹出“Congratulations, Dokploy is installed!”,同时提示你等15秒让服务完全就绪,就可以用http://服务器IP:3000 访问看板了。

这时候要做一个容易被跳过的动作:把当前用户加到docker组里。不加的话后面某些操作会因为权限问题卡住,你还以为软件有bug。跑完usermod和newgrp命令,再验一下docker service ls,你会看到三条服务:dokploy主程序、dokploy-postgres数据库、dokploy-redis缓存,都是replicated 1/1的状态。确认它们都在跑,再继续。

第二步:看板注册,先别管HTTPS
浏览器打开那个IP:3000地址,填上名字、邮箱、密码,点注册。进去就是清爽的项目视图。注意,这时候看板还是裸HTTP——不要急,后面会给它套上证书。如果你现在就去绑域名开HTTPS,会发现自己在绕弯路。

第三步:用公开仓库喂一个示例应用
创建一个项目,比如叫demo-project。然后在项目里创建服务,选应用,起名hello-app。到底层配置这边:来源选GitHub,仓库地址填https://github.com/dokploy/hello-world,分支main。构建类型默认用Nixpacks,它能自己识别语言和依赖。你也可以切到Heroku Buildpacks、Paketo Buildpacks或者自定义Dockerfile,但第一次跑就别折腾了,先用Nixpacks尝到甜头。

保存,点Deploy,切到部署标签看构建进度,再点日志看运行时输出。当看到“Server listening on port 3000”这行字,你的应用已经在容器里喘气儿了。

第四步:绑域名,白嫖证书
先把防火墙的口子打开:80和443端口的TCP流量放行,启用防火墙。然后回到应用的Domains标签,添加域名:host填app.example.com,容器端口填应用监听的端口(看日志确认),HTTPS开启,证书选Let's Encrypt。添加前用dig命令验证一下域名已经解析到你的服务器公网IP——很多人在这里卡半小时,最后发现是DNS没生效。一切就绪后,浏览器访问https://app.example.com,Traefik会在第一次请求时自动签发证书,以后到期前自动续,你完全不用管。

第五步:给看板也上锁
进Settings选Web Server,给Dokploy看板设一个域名,比如dokploy.example.com,同样开启Let's Encrypt的HTTPS。确认https://dokploy.example.com能正常打开后,就可以把之前那个IP:3000的裸HTTP入口从暴露面里拿掉了。整条链路从数据库到看板再到你的应用,全部走加密通道。

整个过程没碰任何CI配置文件,不需要去理解Traefik的toml语法,甚至PostgreSQL都是点一下Create Database就出来——它就藏在Dokploy面板的数据库菜单里,叫做one‑click provisioning。你还可以切到监控页,看CPU、内存、磁盘的实时曲线,省得再布一套Grafana。

说到底,Dokploy干的事就是把这些散装零件——Docker Swarm、Traefik、Let's Encrypt、buildpacks——打包成一个你下班后半小时就能跑通的界面。它不是什么银弹,但对于不想把命运拴在第三方平台免费额度上的人来说,这半小时值不值,你心里有数。