拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Dokploy 自托管 PaaS 平台实战指南:应用、数据库与 Docker Compose 的一站式部署方案

Dokploy 自托管 PaaS 平台实战指南:应用、数据库与 Docker Compose 的一站式部署方案
  • 后端
  • 前端
  • 云原生
  • DevOps
  • 容器编排
  • 运维

【免费下载链接】dokploy

Open Source Alternative to Vercel, Netlify and Heroku.

项目地址:https://gitcode.com/GitHub_Trending/do/dokploy
点击查看免费下载

Dokploy 是一个免费、可自托管(Self-Hosted)的 Platform as a Service(PaaS)开源项目,目标是成为 Vercel、Netlify 与 Heroku 的开源替代品,让你在自己的 VPS 上拥有一套完整的应用与数据库部署管理平台。本文将以项目 README.md 为核心骨架,结合仓库源码与构建配置,系统讲解 Dokploy 的核心功能特性、快速安装方式、底层实现机制与实战要点。

项目定位:自托管的 PaaS,掌控部署全流程

Dokploy 的核心价值在于"自托管 + 全流程托管":你不需要把应用托管给第三方商业平台,而是通过一条命令在自有 VPS 上安装 Dokploy,随后通过 Web 界面完成从代码拉取、构建、部署、域名绑定、TLS 证书到数据库备份的全生命周期管理。

从仓库结构看,这是一个 pnpm workspace 多包项目(见 package.json),包含三个核心应用:

  • apps/dokploy:主应用(Next.js 前端 + Node.js 后端服务,版本 v0.30.6,见 apps/dokploy/package.json);
  • packages/server:共享服务层,集中了应用、数据库、备份、监控等业务逻辑(见 packages/server/src/services);
  • apps/api:面向 CLI/API 的独立服务,例如对接 Inngest 事件队列的部署任务接口(见 apps/api/src/service.ts)。

核心功能特性全景

README 中列出的 13 项特性构成了 Dokploy 的能力骨架,每一条都能在仓库源码中找到对应的实现模块:

1. 应用部署(Applications)

Dokploy 支持部署任意类型的应用:Node.js、PHP、Python、Go、Ruby 等。底层依赖三大构建系统:

  • Nixpacks:默认的零配置构建方案,自动检测语言并生成镜像(Dockerfile 中通过https://nixpacks.com/install.sh安装);
  • Railpack:新一代通用构建工具(https://railpack.com/install.sh);
  • Buildpacks:CNCF 生态的标准构建包(packCLI)。

相关实现集中在 packages/server/src/services/application.ts 与 deployment.ts。

2. 数据库管理(Databases)

内置 MySQL、PostgreSQL、MongoDB、MariaDB、libsql 与 Redis 六类数据库的创建与管理,每一类都有独立服务模块:postgres.ts、mysql.ts、mongo.ts、mariadb.ts、libsql.ts、redis.ts。你可以在 UI 中一键拉起数据库实例,并通过 update-database-password.tsx 等组件直接管理密码等运行参数。

3. 备份(Backups)

支持将数据库备份自动化投递到外部存储目标(external storage destination)。核心逻辑位于 backup.ts 与 volume-backups.ts。值得注意的是,仓库中还有大量备份相关测试,例如 db-backup-restore-injection.test.ts 与 redact-credentials.test.ts,验证备份命令注入防护与凭据脱敏等安全行为。

4. Docker Compose 原生支持

用于管理复杂多容器应用的 Docker Compose 能力由 compose.ts 支撑。测试目录 apps/dokploy/test/compose 覆盖了 compose 命令注入防护(compose-command-injection.test.ts)、项目目录处理(compose-project-directory.test.ts)与镜像拉取(compose-pull-images.test.ts)等关键场景。

5. 多节点集群(Multi Node / Docker Swarm)

通过 Docker Swarm 将应用扩展到多个节点,实现集群化部署与横向扩展。集群管理入口见 apps/dokploy/server/api/routers/swarm.ts 与 apps/dokploy/components/dashboard/swarm。测试 swarm-nodeid-injection.test.ts 验证了集群节点标识的注入防护。

6. 一键模板(Templates)

Plausible、Pocketbase、Calcom 等开源项目模板可以一键部署。模板清单定义在 apps/dokploy/templates/templates.ts,并配套 config.template.test.ts 等测试保证模板配置的正确性。

7. Traefik 集成

自动与 Traefik 集成,负责路由与负载均衡,实现域名解析、反向代理与自动 TLS。路由配置相关测试集中在 apps/dokploy/test/traefik,例如 traefik.test.ts 与 write-app-traefik-config.test.ts。

8. 实时监控(Real-time Monitoring)

对每个资源的 CPU、内存、存储与网络使用情况进行实时监控。监控采集端由独立的 Go 服务实现,位于 apps/monitoring(含 containers/monitor.go 等),前端展示组件见 apps/dokploy/components/dashboard/monitoring。

9. Docker 管理

可直接在界面中部署和管理 Docker 容器。服务实现见 packages/server/src/services/docker.ts,前端 UI 见 apps/dokploy/components/dashboard/docker,容器机械化管理逻辑有独立测试 mechanizeDockerContainer.test.ts。

10. CLI / API

可通过命令行或 API 管理应用与数据库。仓库中的 apps/api 即为独立 API 服务,它对接 Inngest 事件系统读取部署任务。以 apps/api/src/service.ts 的fetchDeploymentJobs为例:它会拉取deployment/requested事件(过滤出指定serverId),再查询每个事件的 runs,最终组装成部署任务列表返回给 UI 层。OpenAPI 文档由 scripts/generate-openapi.ts 脚本生成,并支持 tRPC OpenAPI 规范(依赖@dokploy/trpc-openapi)。

11. 通知(Notifications)

部署成功或失败时,通过 Slack、Discord、Telegram、Email 等方式推送通知。通知服务实现见 packages/server/src/services/notification.ts。

12. 多服务器(Multi Server)

支持将应用远程部署到外部服务器,实现分布式管理。相关能力由 packages/server/src/services/server.ts 与 ssh-key.ts 支撑(SSH 密钥管理是远程连接的基础),服务健康检查见 server-health.ts。

13. 自托管(Self-Hosted)

Dokploy 本身就是为自托管而设计的,安装与运行均依赖 Docker 环境,具体见下文快速开始。

快速开始:一条命令完成安装

在 VPS 上安装 Dokploy,只需执行 README 中给出的安装命令:

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

安装脚本会自动完成环境检测、依赖准备与容器启动。生产环境要求 VPS 上具备 Docker 能力——官方 GUIDES.md 详细给出了 Ubuntu(apt 安装 docker-ce/docker-buildx-plugin/docker-compose-plugin)、macOS 与 Windows(WSL2 + Docker Desktop)三种环境的 Docker 安装步骤,建议先按文档准备好 Docker 再执行安装命令。

生产容器架构:Dokploy 镜像里装了什么

从仓库根目录的 Dockerfile 可以完整还原生产镜像的组成,帮助你理解自托管时 Dokploy 实际依赖哪些运行时:

  • 基础运行时:node:24.4.0-slim+corepack激活的pnpm@10.22.0(项目根 package.json 的engines亦声明 Node^24.4.0、pnpm>=9.12.0);
  • 构建阶段:通过pnpm --filter=@dokploy/server build与pnpm --filter=./apps/dokploy run build完成服务端与前端构建,再以pnpm --filter=./apps/dokploy --prod deploy收集生产依赖;
  • 运行时组件:镜像内安装了 Docker CLI(get.docker.com,版本 28.5.2)与 rclone,用于在容器中调用宿主 Docker 与外部存储备份;同时内置 Nixpacks、Railpack 与 Buildpacks 三种构建工具,使 Dokploy 自身即可驱动应用构建;
  • 进程管理:使用tini作为 PID 1(ENTRYPOINT ["/usr/bin/tini", "--"]),回收健康检查产生的僵尸进程;
  • 健康检查:HEALTHCHECK每 30 秒探测http://localhost:3000/api/trpc/settings.health(见 Dockerfile);
  • 启动序列:CMD依次执行等待 PostgreSQL、运行迁移(dist/migration.mjs)、再启动主服务(dist/server.mjs),对应 apps/dokploy/package.json 中的migration:run与start脚本逻辑。

镜像对外暴露3000端口(EXPOSE 3000),这是 Dokploy Web 界面的默认访问端口。

本地开发与构建环境

若你想基于源码本地运行或二次开发,可参考 CONTRIBUTING.md 与根 package.json 的脚本约定。仓库采用 pnpm workspace,核心流程为:

git clone https://gitcode.com/GitHub_Trending/do/dokploy.git cd dokploy pnpm install cp apps/dokploy/.env.example apps/dokploy/.env pnpm run dokploy:setup # 启动所需服务并执行数据库迁移 pnpm run server:script # 切换 server 包指向 src pnpm run dokploy:dev # 启动开发服务器,访问 http://localhost:3000

常用命令一览(均来自根 package.json):

命令作用
pnpm run dokploy:setup初始化环境并运行数据库迁移
pnpm run dokploy:dev启动开发服务器
pnpm run dokploy:build生产构建
pnpm run dokploy:start生产启动(先迁移后启动)
pnpm run test运行 vitest 测试套件(配置见 apps/dokploy/test/vitest.config.ts)
pnpm --filter=dokploy run reset-password [邮箱]重置用户密码(不传邮箱则重置 owner,新密码输出到控制台)
pnpm --filter=dokploy run reset-2fa重置两步验证
pnpm --filter=dokploy run generate:openapi生成 OpenAPI 文档

开发时项目使用 Biome 作为格式化与 lint 工具(format-and-lint/check脚本),贡献 PR 时需遵循 Conventional Commits 提交规范,并以canary分支为开发基线、main分支为稳定发布源。

部署任务的底层执行模型:从事件到任务行

了解部署的底层机制有助于排障。Dokploy 的部署请求通过 Inngest 事件系统流转(参考 apps/api/src/service.ts 与 apps/api/src/schema.ts):

  1. 事件定义:部署任务由deployJobSchema描述,按applicationType区分为application、compose与application-preview三类(见 schema.ts),每类均包含serverId、type(deploy/redeploy)等字段;
  2. 事件拉取:fetchInngestEvents分页调用 Inngest 的/v1/events接口(每页 100 条,上限 500 条),使用INNGEST_SIGNING_KEY鉴权;
  3. 任务组装:fetchDeploymentJobs过滤出与目标serverId匹配的deployment/requested事件,最多取 50 个事件查询其 runs,再按运行状态(queued→pending、running→active、completed、failed、cancelled)组装为 BullMQ 风格的队列行,供 UI 展示部署队列。

结语

Dokploy 以"自托管 PaaS"为核心定位,把 Vercel/Netlify/Heroku 的托管体验搬回你自己的服务器:一条命令完成安装,Web 界面统一管理应用、数据库、备份、域名与监控,同时通过 Docker Swarm 与多服务器支持横向扩展。对于希望掌控部署全链路、规避商业平台锁定或数据合规约束的团队,Dokploy 提供了一条可落地的开源路径。想要深入了解某个模块(如备份恢复、Traefik 配置或权限体系),可以直接在仓库 apps/dokploy/test目录找到对应的端到端测试,这些测试本身就是最好的使用说明书。

  • 后端
  • 前端
  • 云原生
  • DevOps
  • 容器编排
  • 运维

【免费下载链接】dokploy

Open Source Alternative to Vercel, Netlify and Heroku.

项目地址:https://gitcode.com/GitHub_Trending/do/dokploy
点击查看免费下载
上一篇:Testing Playground与Cypress集成:打造端到端DOM测试流水线的完整指南
下一篇:gh_mirrors/de/dev-practice项目许可证解析:MIT许可下的使用指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表