Dokploy上手体验
体验了一段时间用Drone做的CICD,用下来觉得这套系统虽然足够灵活,但缺少了快速扩展能力和易用性。数据库、反代都得手动部署和维护,服务之间访问得手动配置容器间网络,web服务健康监测得靠Uptime Kuma,数据库健康监测和备份依靠Databasus,虽然这些项目都很好,但整个系统总给我一种东平西凑的感觉。
近期在逛社区的时候对Dokploy一见钟情,它简直太适合我了!不仅可以用来替换我现在的CICD工作流,还能在将来快速扩展其他项目的CICD,并且它还足够灵活、功能足够全面、UI也深得我心。是时候用来替换现有的工作流以提升幸福指数了!
安装
首先,先把以前的服务停下,确保80、443、3000端口没有被占用,再检查检查主机的存储空间是否足够。(原本在这个位置折腾了挺久...最后发现是存储空间不够了,扩容后一下子就安装好了)
前往Dokploy官网,找到部署文档https://docs.dokploy.com/docs/core/installation
找到一键部署命令
curl -sSL https://dokploy.com/install.sh | sh
接下来是漫长的等待,安装完毕后,通过访问本机3000端口,打开Dokploy WebUI,进入后直接进行账号注册。
如果进入面板后,发现时区不符合预期,可以执行命令:(具体需要到哪个时区,根据TZ配置灵活调整啦)
docker service update --env-add TZ=Asia/Shanghai dokploy
部署
接下来以我现有的博客为例:
- 前端:技术栈Nextjs,项目目录/apps/frontend
- 后端:技术栈Nestjs,项目目录/apps/backend
- 数据库:Postgres17
- Git托管平台:Gitea
绑定Gitea到Dokploy
-
前往Gitea,选择【管理后台 - 集成 - 应用 - 创建OAuth2应用程序】。填写【应用名称】,等待后续操作获取【重定向URI】,后续填写后再点击【创建应用】

-
此时前往Dokploy,选择【设置 - Git - Gitea】
![]()
-
在弹出的对话框中,复制【Redirect URI】;
回到Gitea,填写到步骤(1)中的【重定向URI】,点击【创建应用】。接着复制界面上的【Client ID】和【Client Secret】;
再回到Dokploy,依次填写这些信息,最后点击【Configure Gitea App】
![]()
- 接下来点击刚刚创建的Gitea App旁边的编辑按钮,再点击【Test Connection】和【Connect to Gitea】按钮。期间会前往Gitea,询问是否授权,选择授权就行了。
image-20260228131937252
到这一步,Dokploy和Gitea就绑定好了,接下来可以去部署项目了
部署tonePage
-
回到Dokploy的【Home - Project】,并选择【Create Project】以创建项目。
-
部署数据库:
-
前往刚刚创建的项目,第一步先创建数据库,选择【Create Service - Database】,这里按需选择需要的数据库,我选的是PostgreSQL。
-
按需填写内容,创建完毕后,进入到数据库服务,选择【General - Deploy】进行部署数据库。
如果需要从外部操作数据库,可以在数据库服务的【External Credentials - External Port (Internet)】将服务暴露到外部。
-
-
部署后端服务:
-
在项目工作区中,选择【Create Service】然后随便取个名,我写的是backend
-
接下来进入到刚刚创建的服务中,在【General - Provider】中选择Gitea、并选择前面创建的Gitea账号,选择对应的仓库、branch,填写【Build Path】。由于我的后端项目在*/apps/backend*目录下,因此Build Path得填写后端项目所在目录。填写完毕后,点击【Save】
-
再进入到下方【Build Type】中,选择对应的构建类型。由于我的后端目录下有Dockerfile,因此我就选Dockerfile,选完之后依旧【Save】
-
完成配置后,进入到【Environment】中,填写项目所需要的环境变量,并保存
-
接下来进入到【General - Deploy Settings】中,点击【Deploy】进行部署。部署阶段可以去【Deployments】中,查看部署进度和进行干预
-
部署成功后,进入到【Domain】,点击【Add Domain】绑定服务与访问域名。这里我填写了如下配置:
Host: tonesc.cn、Path: /api、Container Port: 3001(由于我的后端服务是3001)
-
-
部署前端服务:
- 依旧在项目工作区中,创建服务,用于部署前端
- ... 剩余步骤基本上同上,在【Build Type】步骤中,可以尝试选择NixPacks,它可以自动监测并部署。但我这里由于网络环境问题,无法成功部署,所以还是选的dockerfile
- 测试,访问http://tonesc.cn/,发现能够正常访问到前端服务,前端部署完成!
不同服务可以通过服务面板标题下方的名称例如
tonepage-backend-onckzw对其他服务进行访问,因此,对于Nextjs这样的支持服务端渲染的应用就很友好了,直接通过主机名实现API请求,不用跟着客户端请求地址绕一大圈
![]()
对于数据库的备份,可以直接采用数据库服务的【Backups】功能实现。
至此,环境搭建和基础项目部署就完成了!
用下来一段时间,出现一些问题,如果有遇到的可以参考解决:
-
登陆时提示:invalid origin。 可见https://github.com/Dokploy/dokploy/issues/1455,解决方案如下(需要把https://yourdomain.com替换成自己的域名):
bashdocker service update --env-rm ALLOWED_ORIGINS --env-add ALLOWED_ORIGINS=http://localhost:3000,https://yourdomain.com dokploy