Dokploy的极简教程
本文主要介绍如何在个人服务器上安装、配置和使用dokploy,实现Github项目利用Github Actions自动编译构建镜像、Dokploy自动拉取镜像部署上线。

Dokploy是开源的应用部署解决方案,可以简单将它理解为是一个可以在自己服务器上部署运行的Vercel/Netlify。如果你希望享受到Vercel/Netlify上轻松部署项目的便利性,又不想收到天价的Vercel账单的话,那么可以考虑购买一台服务器,然后部署Dokploy试试看。
本文主要介绍如何在个人服务器上安装、配置和使用dokploy,实现Github项目利用Github Actions自动编译构建镜像、Dokploy自动拉取镜像部署上线,并支持绑定域名、配置https证书,最终可以安全访问等流程。
1、什么是Dokploy?
Dokploy可以让你实现像Vercel一样简单高效地管理你的应用和数据,并且还可以监控你服务器的状态、备份数据库、管理证书、管理多个服务器等等。

2、安装Dokploy
安装参考文档:https://docs.dokploy.com/docs/core/installation
2.1 服务器配置
服务器的操作系统建议选择Ubuntu 22.04,环境配置确保已安装Docker。
本文以腾讯云轻量云服务器为例,配置是2核+4G内存,服务器位置是在新加坡,这样拉取Docker镜像就不容易出现问题。
2.2 安装Dokploy
登录机器,执行命令:
curl -sSL https://dokploy.com/install.sh | sh
script to install dokploy
命令执行成功之后,就可以看到访问Dokploy的链接,默认端口是3000

2.3 配置防火墙
在服务器的防火墙配置中新增一条规则,允许3000端口可以被外界访问。

访问 http://<VPS IP>:3000,就可以看到Dokploy的管理员注册界面。

2.4 绑定域名
每次通过http协议+服务器IP地址访问Dokploy不安全,所以先绑定一个域名。

图片中设置的是个子域名,你也可以设置主域,设置完成后,在域名的DNS解析中添加一条记录,类型是A,将配置的域名指向服务器的IP地址。

DNS解析配置后,我们就可以通过https+域名的方式来访问服务器上的Dokploy。

3、配置Dokploy
我们的目的是希望,每次push代码到Github仓库中,Dokploy会像Vercel一样,自动拉取最新的代码,重新编译,然后部署上线,那就要做些配置。
3.1 配置Github应用
点击左侧菜单Git,选择Github,依次操作,完成Github应用的创建和配置,完成之后你可以在 https://github.com/settings/apps 中查看这个Github应用。


等Github应用创建完成之后,可以点击这个应用,进行Github授权,这样的话Dokploy就可以访问你的Github账号下的代码仓库。


3.2 部署Nextjs应用
我新建了一个默认的Nextjs工程,配置output为standalone,并在根目录下放了一个Dockfile文件(文件的写法可以参考这个提交记录),我们希望Dokploy根据Dockfile文件就可以构建出镜像,然后部署上线。
在Dokploy的Projects中,新建Project,再新建Application,配置Provider为Github,选择项目仓库和分支,构建类型选择Dockerfile,并设置Dockerfile文件的路径。配置好之后,点击Deploy触发构建。


首次构建失败了,可以查下编译日志,原因是pnpm-lock.yaml文件缺失。

新增pnpm-lock.yaml文件(提交记录)后,Dokploy会触发自动构建,这次构建成功。

3.3 绑定域名
构建成功之后,我们就可以绑定域名,然后通过域名访问这个应用。在Application的Domain中,点击Add Domain,如果你有自己的域名,那么输入一个域名,如果没有域名可以点击右侧的骰子,它会自动生成一个xxx.traefik.me的域名。

这里我设置的是一个自定义子域名,然后在DNS解析中配置子域名指向服务器IP。

等待一段时间之后,就可以通过https+域名访问这个Nextjs应用。

3.4 利用Github Actions构建镜像
前面的流程是直接在服务器上构建并部署,这样的操作一般情况下没啥问题,但在服务器高负载时,网站性能可能受到影响,所以我们可以考虑利用Github Actions来构建镜像,镜像托管在Github镜像注册中心,服务器上的Dokploy只负责从Github容器镜像中心拉取最新镜像,然后部署上线就行。
3.4.1 创建Github Token
首先要创建一个Github Token,这个Token需要有权限拉取你上传到Github镜像注册中心的镜像,你可以在这里创建一个Token。

3.4.2 配置Registry
在Dokploy的Docker Registry配置中,新建一个外部Registry,Username是你的Github账号名,Password是上面创建的Token,URL是https://ghcr.io。

3.4.3 重新配置部署方式
为了演示,这里我新建一个Application,这次我们换成Docker的部署方式。首先在应用的高级设置中,设置Registry是我们刚才创建的Registry。

然后,配置部署参数,Docker Image是ghcr.io/[Github账号名]/[Repository项目名]:[分支名],然后保存。意思是,部署时,Dokploy去Registry中找到这个Docker镜像,把最新镜像拉取下来并部署上线。

3.4.4 配置Github Actions
上面的流程只配置了如何拉取镜像,现在还剩下如何利用Github Actions构建镜像。这需要在Github Actions中新增一个workflow,当我们提交代码到main分支的时候,workflow会自动执行,构建镜像并push到Github镜像中心。
workflow的代码可以参考这个提交记录,需要注意的是结尾有个触发Dokploy重新部署的逻辑,这里涉及到Deployment Webhook URL,Dokploy上部署的项目都有一个Deployment Webhook URL,只要访问这个URL就会自动触发重新构建。

3.4.5 测试访问
待部署成功之后,我们同样可以绑定域名,配置DNS解析,然后就可以通过https+域名进行安全地访问了。


4、Dokploy其他功能
Dokploy的功能还有很多,一篇文章很难讲完,下面列举几个我觉得不错的功能。
4.1 自动清理Docker容器
如果你长期使用服务器既构建又部署,很容易导致太多没用的Docker容器占用磁盘空间,导致磁盘空间满了而访问不了,可以在Server设置中开启Daily Docker Cleanup,就会每天自动清理不用的Docker容器。

4.2 服务器监控
Dokploy还自带了服务器监控的能力,你可以直接查看服务器的CPU利用率、内存利用率、磁盘空间,以及网络IO等。

4.3 数据库部署和备份
Dokploy也可以部署数据库,常见的数据库Postgres、MySQL、MongoDB都支持,部署之后,设置了外网访问端口就可以访问了。

在External Port中设置一个端口号,然后保存就可以得到一个DB URL,只要防火墙配置中允许访问服务器的这个端口号,那么就可以连接数据库了。

下面用免费的Navicat Premium Lite配置好数据库连接信息测试连接没问题。

Dokploy还支持备份数据库,可以在S3 Destinations中配置AWS S3或者Cloudflare R2,然后将它作为目标备份点添加到这里,最后在Database的备份配置中选择这个备份点就可以实现数据库备份了。

4.4 模板
我最喜欢的就是模板功能,很多优秀的开源项目都可以一键部署,例如我现在的个人博客Ghost、统计分析工具Plausible都是通过Dokploy一键部署的。你甚至可以一键部署Supabase、Wordpress、Pocketbase等项目,希望将来支持的应用越来越多。

除此之外,Dokploy还支持管理其他的服务器,支持管理证书等等,有些功能我也还没有用上,等将来用上了再来分享。
番外:我个人开发的导航站模板Mkdirs的官网,以及基于Mkdirs模板开发的导航站都是通过Dokploy部署在自己的服务器上,Mkdirs模板源码内置Dockerfile文件,所以默认就支持通过Docker部署的方式,感兴趣的朋友可以了解下。

番外:2025年我会在推特上公开构建我的新项目,AI SaaS模板,同样会支持Docker部署。如果你也想构建一个AI工具站的话,可以考虑关注我的推特(@javay_hu),我在推特上分享一切我知道的独立开发和产品出海的知识。