Dokploy 是一个自托管的 Vercel 替代方案,提供了与 Vercel 类似的自动化部署服务,但允许开发者在自己的服务器或虚拟私有服务器(VPS)上进行部署。它适用于前端应用(如 React、Vue、Next.js 等)的部署,特别是对于想要掌控整个部署过程的开发者,Dokploy 是一个很好的选择。
以下是Dokploy 在国内环境下的安装与使用指南,包含从最基本到深度使用的详细解读,结合具体代码示例进行讲解。
1. 基本安装与配置
1.1 环境准备
首先确保你的服务器具备以下环境:
- 操作系统:Ubuntu 20.04+ 或类似的 Linux 系统
- Docker:用于容器化部署
- Docker Compose:用于定义和管理多容器的应用
1.2 安装 Docker 和 Docker Compose
在 Ubuntu 系统中,可以使用以下命令安装 Docker 和 Docker Compose:
# 更新包列表并安装 Docker
sudo apt-get update
sudo apt-get install -y docker.io
# 安装 Docker Compose
sudo apt-get install -y docker-compose
确保 Docker 和 Docker Compose 安装成功:
docker --version
docker-compose --version
1.3 克隆 Dokploy 仓库
从 GitHub 上克隆 Dokploy 项目源码:
git clone https://github.com/Dokploy/dokploy.git
cd dokploy
1.4 配置 Dokploy
Dokploy 使用 Docker 来容器化部署服务。你需要配置一些环境变量,来指定部署相关的配置。首先,复制一份默认配置文件:
cp .env.example .env
然后编辑 .env
文件,主要配置如下:
GITHUB_TOKEN
:用于从 GitHub 获取仓库的权限。GITHUB_REPO
:你的 GitHub 仓库地址。DEPLOY_PORT
:Dokploy 部署的端口。
2. 使用 Dokploy 部署应用
2.1 创建 Dockerfile
假设你有一个基于 Next.js 的应用,你需要在应用根目录创建一个 Dockerfile
来指定如何构建和运行这个应用。
# 使用 Node.js 官方镜像作为基础镜像
FROM node:18
# 设置工作目录
WORKDIR /app
# 将本地的 package.json 和 package-lock.json 拷贝到容器中
COPY package*.json ./
# 安装应用依赖
RUN npm install
# 将应用的源码拷贝到容器中
COPY . .
# 暴露容器端口
EXPOSE 3000
# 启动应用
CMD ["npm", "run", "start"]
2.2 创建 Docker Compose 文件
docker-compose.yml
用于定义应用的服务。对于一个简单的 Next.js 应用,可以如下配置:
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
2.3 启动应用
使用 docker-compose
来启动容器:
docker-compose up -d
这会根据你定义的 Dockerfile
和 docker-compose.yml
来构建容器并启动应用。
3. 配置 GitHub 自动化部署
Dokploy 支持与 GitHub 仓库的集成,当代码推送到仓库时,Dokploy 可以自动触发部署。
- 在
.env
文件中配置 GitHub 仓库和 token:
GITHUB_REPO=your-username/your-repo
GITHUB_TOKEN=your-github-token
- 每次代码变动时,Dokploy 会自动拉取最新代码并构建应用,重新部署。
3.1 配置 GitHub Webhook
为了让 GitHub 与 Dokploy 进行通信,你需要在 GitHub 上配置一个 Webhook。当你推送代码时,GitHub 会通知 Dokploy 进行自动部署。
- 登录 GitHub,进入你的仓库设置页面。
- 找到 Webhooks,点击 Add webhook。
- 配置 Webhook URL 为你的 Dokploy 服务器地址(例如:
http://your-dokploy-server.com/deploy
)。 - 选择 Just the push event。
3.2 完成部署
每次你向 GitHub 推送代码时,Dokploy 会自动拉取代码并重新部署应用。你可以通过 Docker 容器查看部署日志,确保应用部署成功。
docker logs <container-id>
4. 深度使用与优化
4.1 负载均衡与多容器支持
如果你需要处理高流量的应用,可以使用 Nginx 作为反向代理并做负载均衡。你可以将多个服务定义在 docker-compose.yml
中,并通过 Nginx 配置来实现负载均衡。
version: '3'
services:
app1:
build: .
ports:
- "3001:3000"
app2:
build: .
ports:
- "3002:3000"
nginx:
image: nginx:alpine
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
depends_on:
- app1
- app2
nginx.conf
配置如下:
http {
upstream app_backend {
server app1:3000;
server app2:3000;
}
server {
listen 80;
location / {
proxy_pass http://app_backend;
}
}
}
4.2 配置 HTTPS
在生产环境中,建议使用 HTTPS 来加密流量。你可以使用 Let’s Encrypt 或其他 SSL 提供商的证书来为你的应用配置 HTTPS。
- 安装并配置 Certbot,自动获取和续期 SSL 证书。
- 修改
nginx.conf
来配置 HTTPS:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://app_backend;
}
}
- 重启 Nginx 服务:
docker-compose restart nginx
4.3 日志与监控
对于大规模应用,日志和监控非常重要。Dokploy 支持集成日志系统(如 ELK Stack 或 Prometheus)来跟踪应用的运行状态。
可以将日志导出到标准输出并进行集中管理:
services:
app:
build: .
ports:
- "3000:3000"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
5. 总结
通过 Dokploy,开发者可以拥有 Vercel 类似的自动化部署体验,同时也能够在自己的服务器上托管应用。它提供了与 GitHub 集成、Docker 容器化部署、负载均衡、HTTPS 配置等功能,非常适合希望控制部署过程和基础设施的开发者。通过上述步骤,你可以从最基础的安装使用到深度定制化应用。