跳转至

Dokploy 容器部署完全指南

为什么要学 Dokploy

  1. 最简洁的自托管 PaaS:Dokploy 专注于一件事——让 Docker 部署变简单。界面干净直观,没有过多概念和配置项。对于只需要部署几个应用和数据库的开发者,Dokploy 的复杂度恰到好处。

  2. 轻量级,1GB 内存即可运行:相比 Coolify 需要 2GB+,Dokploy 在 1GB 内存的 VPS 上就能流畅运行。适合预算有限的个人开发者和小项目。

  3. Traefik 集成,自动 SSL:内置 Traefik 反向代理,自动配置 Let's Encrypt SSL 证书和路由规则。添加域名后 HTTPS 自动生效。

  4. 数据库一键部署:PostgreSQL、MySQL、Redis、MongoDB、MariaDB 一键创建,自动配置持久化存储和连接信息。

  5. Docker Compose 原生支持:可以直接使用 docker-compose.yml 定义多服务应用,Dokploy 会正确处理服务间网络、持久化和路由。


核心概念详解

Dokploy 是什么(白话解释)

你有一台服务器,想部署几个网站。手动方式是 SSH 进去装 Docker、拉镜像、配 Nginx、搞 SSL。Dokploy 把这些步骤做成了一个 Web 界面:点点鼠标就能部署应用、管理数据库、配置域名。

它比 Coolify 更轻量,比 CapRover 更现代化。如果你只需要简单的 Docker 部署而不需要复杂的 CI/CD 管道,Dokploy 是最佳选择。

核心概念

概念说明
Project项目(一组相关的应用和服务)
Application应用(从 Git/Docker 部署)
Database数据库服务
ComposeDocker Compose 多服务部署
Domain域名绑定与路由
Deployment一次部署记录
RegistryDocker Registry 配置

Dokploy vs Coolify vs CapRover 对比

特性DokployCoolifyCapRover
最低内存1GB2GB1GB
UI 设计现代简洁现代全面功能性
学习曲线最低
功能丰富度适中最丰富中等
数据库管理一键部署一键部署+备份手动
Docker Compose原生支持支持有限
多服务器支持支持集群模式
一键应用有限100+有限
监控基础内置需配置
构建方式Nixpacks/DockerNixpacks/DockerDocker
技术栈Next.js + tRPCLaravel/LivewireNode.js
适合场景简单部署/小团队全面的自托管Docker部署
活跃度活跃非常活跃稳定

安装与配置

系统要求

  • Linux 服务器(Ubuntu 22.04+/Debian 12+)
  • 最少 1 CPU + 1GB RAM
  • Docker(安装脚本会自动安装)
  • 域名(推荐但不必须)

一键安装

# SSH 到服务器
ssh root@your-server-ip

# 一键安装
curl -sSL https://dokploy.com/install.sh | sh

# 安装完成后显示:
# Dokploy is running on http://your-ip:3000
# 首次访问设置管理员账号

Docker 安装

docker run -d \
  --name dokploy \
  --restart unless-stopped \
  -p 3000:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dokploy-data:/data \
  dokploy/dokploy:latest

初始配置

  1. 打开 http://your-ip:3000
  2. 创建管理员账号
  3. 设置服务器信息
  4. 配置域名(可选):Settings → Server → Domain
  5. 配置 SSL:自动启用 Let's Encrypt

添加 Git Provider

Settings → Git Providers → Add New

支持:
- GitHub(OAuth 或 Personal Access Token)
- GitLab
- Bitbucket
- Gitea
- 任意 Git URL

快速上手:5 分钟最小示例

部署一个 Node.js 应用

  1. 创建项目:Projects → Create Project → 输入名称

  2. 添加应用:项目内 → Create Service → Application

  3. 配置来源

  4. Source: GitHub
  5. Repository: your-org/your-repo
  6. Branch: main

  7. 构建设置

  8. Build Type: Nixpacks(自动检测)
  9. Port: 3000

  10. 域名绑定

  11. Domains → Add Domain
  12. 输入 app.yourdomain.com
  13. HTTPS: Auto

  14. 部署:点击 Deploy

部署一个数据库

  1. Projects → Create Service → Database
  2. 选择 PostgreSQL 16
  3. 配置:
  4. Database Name: mydb
  5. Username: myuser(自动生成密码)
  6. Create
  7. 记录连接信息(显示在 Database 面板中)

连接应用与数据库

在 Application → Environment Variables 中添加:

DATABASE_URL=postgresql://myuser:auto-generated-pass@db-service-name:5432/mydb

Dokploy 中同一项目的服务共享 Docker 网络,可以用服务名互相访问。


进阶用法

场景一:Docker Compose 多服务部署

在 Dokploy 中创建 "Compose" 类型的服务:

# docker-compose.yml
version: '3.8'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:pass@db:5432/app
      - REDIS_URL=redis://cache:6379
    depends_on:
      - db
      - cache

  worker:
    build:
      context: .
      dockerfile: Dockerfile.worker
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/app
      - REDIS_URL=redis://cache:6379
    depends_on:
      - db
      - cache

  db:
    image: postgres:16
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass

  cache:
    image: redis:7-alpine

volumes:
  pgdata:

Dokploy 自动处理网络、持久化和路由。

场景二:自定义 Dockerfile 部署

# Dockerfile
FROM node:20-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY package.json .
EXPOSE 3000
CMD ["node", "dist/index.js"]

在 Dokploy 中:Build Type 选择 "Dockerfile",指定 Dockerfile 路径。

场景三:环境变量管理

Application → Environment Variables

# 构建变量(Build Time)
NODE_ENV=production
NEXT_PUBLIC_API_URL=https://api.example.com

# 运行时变量(Runtime)
DATABASE_URL=postgresql://...
JWT_SECRET=your-secret-key
SMTP_HOST=smtp.gmail.com

场景四:自动部署 Webhook

# Dokploy 自动在 GitHub 上设置 Webhook
# 每次 push 到配置的分支自动触发部署

# 也可以手动触发 API 部署
curl -X POST "https://dokploy.yourdomain.com/api/application.redeploy" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"applicationId": "app-id"}'

场景五:Docker Registry(私有镜像)

Settings → Registry → Add Registry

- Docker Hub
- GitHub Container Registry (ghcr.io)
- AWS ECR
- Google GCR
- 自建 Registry

配置后可以从私有 Registry 拉取镜像部署

场景六:持久化存储

Application → Advanced → Volumes

# 添加挂载卷
Source: /data/uploads     # 宿主机路径
Target: /app/uploads      # 容器内路径

# 或使用 Docker Named Volume
Volume Name: app-uploads
Target: /app/uploads

场景七:多服务器部署

Settings → Servers → Add Server

1. 输入远程服务器 SSH 信息
2. Dokploy 自动在远程服务器安装 Docker
3. 创建应用时选择目标服务器
4. 从一个面板管理所有服务器的应用

场景八:健康检查与重启策略

Application → Advanced

# 健康检查
Health Check Path: /api/health
Health Check Interval: 30s
Health Check Timeout: 10s
Health Check Retries: 3

# 重启策略
Restart Policy: unless-stopped

# 资源限制
Memory Limit: 512MB
CPU Limit: 0.5

常见问题与排错

问题一:构建失败

查看部署日志:Application → Deployments → 点击失败的部署。

常见原因: 1. Nixpacks 检测错误:手动指定 Build Type 为 Dockerfile 2. 依赖安装失败:检查 package.json / requirements.txt 3. 内存不足:增加服务器 RAM 或 swap

# 在服务器上添加 swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

问题二:域名无法访问

排查步骤:
1. DNS 是否正确指向服务器 IP(A 记录)
2. 防火墙是否开放 80 和 443 端口
3. Traefik 是否运行:docker ps | grep traefik
4. 应用容器是否运行:docker ps | grep your-app
5. 查看 Traefik 日志:docker logs traefik

问题三:数据库连接失败

# 同一 Dokploy 项目内的服务使用内部网络
# 使用服务名(不是 localhost)作为主机名

# 查看 Docker 网络
docker network ls
docker network inspect dokploy-network

问题四:如何查看容器日志

# 在 UI 中
Application → Logs → 查看实时日志

# 在服务器上
docker logs -f container-name
docker logs --tail 100 container-name

问题五:如何备份

# Dokploy 数据目录
/etc/dokploy/

# 备份数据库
docker exec db-container pg_dump -U user dbname > backup.sql

# 全量备份
tar -czf dokploy-backup.tar.gz /etc/dokploy/

问题六:如何更新 Dokploy

# Dokploy 支持一键更新
# UI → Settings → 检查更新

# 或命令行
docker pull dokploy/dokploy:latest
docker restart dokploy

参考资源

  • 官方网站:https://dokploy.com
  • 官方文档:https://docs.dokploy.com
  • GitHub:https://github.com/Dokploy/dokploy
  • Discord 社区:https://discord.gg/dokploy
  • YouTube 教程:搜索 "Dokploy tutorial"
  • API 文档:部署后在 /swagger 路径查看