Dokploy上手体验

体验了一段时间用Drone做的CICD,用下来觉得这套系统虽然足够灵活,但缺少了快速扩展能力和易用性。数据库、反代都得手动部署和维护,服务之间访问得手动配置容器间网络,web服务健康监测得靠Uptime Kuma,数据库健康监测和备份依靠Databasus,虽然这些项目都很好,但整个系统总给我一种东平西凑的感觉。

近期在逛社区的时候对Dokploy一见钟情,它简直太适合我了!不仅可以用来替换我现在的CICD工作流,还能在将来快速扩展其他项目的CICD,并且它还足够灵活、功能足够全面、UI也深得我心。是时候用来替换现有的工作流以提升幸福指数了!

安装

首先,先把以前的服务停下,确保80、443、3000端口没有被占用,再检查检查主机的存储空间是否足够。(原本在这个位置折腾了挺久...最后发现是存储空间不够了,扩容后一下子就安装好了)

前往Dokploy官网,找到部署文档https://docs.dokploy.com/docs/core/installation

找到一键部署命令

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

接下来是漫长的等待,安装完毕后,通过访问本机3000端口,打开Dokploy WebUI,进入后直接进行账号注册。

如果进入面板后,发现时区不符合预期,可以执行命令:(具体需要到哪个时区,根据TZ配置灵活调整啦)

bash
docker service update --env-add TZ=Asia/Shanghai dokploy

部署

接下来以我现有的博客为例:

  • 前端:技术栈Nextjs,项目目录/apps/frontend
  • 后端:技术栈Nestjs,项目目录/apps/backend
  • 数据库:Postgres17
  • Git托管平台:Gitea

绑定Gitea到Dokploy

  1. 前往Gitea,选择【管理后台 - 集成 - 应用 - 创建OAuth2应用程序】。填写【应用名称】,等待后续操作获取【重定向URI】,后续填写后再点击【创建应用】

    图片

  2. 此时前往Dokploy,选择【设置 - Git - Gitea】

图片

  1. 在弹出的对话框中,复制【Redirect URI】;

    回到Gitea,填写到步骤(1)中的【重定向URI】,点击【创建应用】。接着复制界面上的【Client ID】和【Client Secret】;

    再回到Dokploy,依次填写这些信息,最后点击【Configure Gitea App】

图片

  1. 接下来点击刚刚创建的Gitea App旁边的编辑按钮,再点击【Test Connection】和【Connect to Gitea】按钮。期间会前往Gitea,询问是否授权,选择授权就行了。

image-20260228131937252image-20260228131937252

到这一步,Dokploy和Gitea就绑定好了,接下来可以去部署项目了

部署tonePage

  1. 回到Dokploy的【Home - Project】,并选择【Create Project】以创建项目。

  2. 部署数据库:

    • 前往刚刚创建的项目,第一步先创建数据库,选择【Create Service - Database】,这里按需选择需要的数据库,我选的是PostgreSQL。

    • 按需填写内容,创建完毕后,进入到数据库服务,选择【General - Deploy】进行部署数据库。

      如果需要从外部操作数据库,可以在数据库服务的【External Credentials - External Port (Internet)】将服务暴露到外部。

  3. 部署后端服务:

    • 在项目工作区中,选择【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.cnPath: /apiContainer Port: 3001(由于我的后端服务是3001)

    • 测试,访问http://tonesc.cn/api/,发现能够成功访问到后端服务,后端服务部署完成

  4. 部署前端服务:

不同服务可以通过服务面板标题下方的名称例如tonepage-backend-onckzw对其他服务进行访问,因此,对于Nextjs这样的支持服务端渲染的应用就很友好了,直接通过主机名实现API请求,不用跟着客户端请求地址绕一大圈

图片

对于数据库的备份,可以直接采用数据库服务的【Backups】功能实现。

至此,环境搭建和基础项目部署就完成了!


用下来一段时间,出现一些问题,如果有遇到的可以参考解决:

Dokploy上手体验 - 特恩的日志