Dokploy的极简教程

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

Dokploy的极简教程
Dokploy的极简教程

Dokploy是开源的应用部署解决方案,可以简单将它理解为是一个可以在自己服务器上部署运行的Vercel/Netlify。如果你希望享受到Vercel/Netlify上轻松部署项目的便利性,又不想收到天价的Vercel账单的话,那么可以考虑购买一台服务器,然后部署Dokploy试试看。

本文主要介绍如何在个人服务器上安装、配置和使用dokploy,实现Github项目利用Github Actions自动编译构建镜像、Dokploy自动拉取镜像部署上线,并支持绑定域名、配置https证书,最终可以安全访问等流程。

1、什么是Dokploy?

官网:https://dokploy.com/

Dokploy可以让你实现像Vercel一样简单高效地管理你的应用和数据,并且还可以监控你服务器的状态、备份数据库、管理证书、管理多个服务器等等。

dokploy website

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

install dokploy

2.3 配置防火墙

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

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

dokploy setup the server

2.4 绑定域名

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

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

dns record

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

visit dokploy with https://domain

3、配置Dokploy

我们的目的是希望,每次push代码到Github仓库中,Dokploy会像Vercel一样,自动拉取最新的代码,重新编译,然后部署上线,那就要做些配置。

3.1 配置Github应用

点击左侧菜单Git,选择Github,依次操作,完成Github应用的创建和配置,完成之后你可以在 https://github.com/settings/apps 中查看这个Github应用。

setup github
create github app

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

config git providers
authorize the Github app

3.2 部署Nextjs应用

我新建了一个默认的Nextjs工程,配置output为standalone,并在根目录下放了一个Dockfile文件(文件的写法可以参考这个提交记录),我们希望Dokploy根据Dockfile文件就可以构建出镜像,然后部署上线。

GitHub - javayhu/dokploy-demo
Contribute to javayhu/dokploy-demo development by creating an account on GitHub.

在Dokploy的Projects中,新建Project,再新建Application,配置Provider为Github,选择项目仓库和分支,构建类型选择Dockerfile,并设置Dockerfile文件的路径。配置好之后,点击Deploy触发构建。

deploy settings for github repository
deploy settings for build type

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

build fail logs

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

deployments

3.3 绑定域名

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

bind domain

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

add dns record

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

visit nextjs app by https://domain

3.4 利用Github Actions构建镜像

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

3.4.1 创建Github Token

首先要创建一个Github Token,这个Token需要有权限拉取你上传到Github镜像注册中心的镜像,你可以在这里创建一个Token。

personal access token

3.4.2 配置Registry

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

add external registry

3.4.3 重新配置部署方式

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

cluster settings

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

deploy settings

3.4.4 配置Github Actions

上面的流程只配置了如何拉取镜像,现在还剩下如何利用Github Actions构建镜像。这需要在Github Actions中新增一个workflow,当我们提交代码到main分支的时候,workflow会自动执行,构建镜像并push到Github镜像中心。

workflow的代码可以参考这个提交记录,需要注意的是结尾有个触发Dokploy重新部署的逻辑,这里涉及到Deployment Webhook URL,Dokploy上部署的项目都有一个Deployment Webhook URL,只要访问这个URL就会自动触发重新构建。

deployment webhook url

3.4.5 测试访问

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

deployment success
visit by https://domain

4、Dokploy其他功能

Dokploy的功能还有很多,一篇文章很难讲完,下面列举几个我觉得不错的功能。

4.1 自动清理Docker容器

如果你长期使用服务器既构建又部署,很容易导致太多没用的Docker容器占用磁盘空间,导致磁盘空间满了而访问不了,可以在Server设置中开启Daily Docker Cleanup,就会每天自动清理不用的Docker容器。

daily docker cleanup

4.2 服务器监控

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

dokploy monitoring

4.3 数据库部署和备份

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

select a database

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

external host

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

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部署的方式,感兴趣的朋友可以了解下。

2024年发布导航站模板Mkdirs
2024年10月21日,正式发布新产品Mkdirs,一个用于快速创建部署导航站的模板,它的功能非常强大,集成了高级搜索、内容管理、邮件订阅、身份验证、内置支付等模块,轻松上线导航站。

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