Dokploy的极简教程
2025/01/25

Dokploy的极简教程

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

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

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镜像就不容易出现问题,或者你可以直接选择国外的服务器提供商,例如Hostinger,费用也很便宜,2核8G服务器1个月7美刀,4核8G服务器1个月10美刀,比腾讯云服务器要便宜很多,有兴趣的朋友可以点击下面链接买台试试。

Hostinger

2.2 安装Dokploy

登录机器,执行命令:

curl -sSL https://dokploy.com/install.sh | sh

命令执行成功之后,就可以看到访问Dokploy的链接,默认端口是3000

install dokploy

2.3 配置防火墙

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

dokploy setup the server

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

dokploy setup the server

2.4 绑定域名

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

dokploy bind domain

图片中设置的是个子域名,你也可以设置主域,设置完成后,在域名的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文件就可以构建出镜像,然后部署上线。

在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的备份配置中选择这个备份点就可以实现数据库备份了。

s3 destinations

4.4 模板

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

templates

除此之外,Dokploy还支持管理其他的服务器,支持管理证书等等,有些功能我也还没有用上,等将来用上了再来分享。

Projects

What I've done and what I'm doing

Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon

Newsletter

Join the community

Subscribe to our newsletter to get the latest news and updates