feat: 双环境自动化部署(生产 + 测试)
- 新增 docker-compose.prod.yml / docker-compose.test.yml 双环境配置 - 新增 docker-compose.gateway.yml Nginx 网关按域名路由 - 新增 Dockerfile.website 官网镜像构建 - 新增 gateway.conf 支持 8 个域名路由 - 更新 .gitlab-ci.yml 支持 prod/test 双分支自动部署 - 更新 Makefile 新增 prod-/test-/gateway- 快捷命令 - 新增 scripts/setup-server.sh 服务器一键初始化脚本 - 修复 Nginx 配置服务名不匹配问题 - 修复前端 Dockerfile 缺少 packages/ 导致构建失败 - 删除旧的 docker-compose.yml Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+175
-119
@@ -1,102 +1,139 @@
|
||||
# 部署指南
|
||||
|
||||
## 架构概览
|
||||
|
||||
```
|
||||
Internet → Gateway Nginx (80/443)
|
||||
├─ rent-prod 网络
|
||||
│ ├─ rent-prod-mysql (3306)
|
||||
│ ├─ rent-prod-redis (6379)
|
||||
│ ├─ rent-prod-server (3000)
|
||||
│ ├─ rent-prod-merchant (8081→80)
|
||||
│ ├─ rent-prod-platform (8082→80)
|
||||
│ └─ rent-prod-website (8083→80)
|
||||
└─ rent-test 网络
|
||||
├─ rent-test-mysql (3307→3306)
|
||||
├─ rent-test-redis (6380→6379)
|
||||
├─ rent-test-server (3001→3000)
|
||||
├─ rent-test-merchant (9081→80)
|
||||
├─ rent-test-platform (9082→80)
|
||||
└─ rent-test-website (9083→80)
|
||||
```
|
||||
|
||||
## 域名规划
|
||||
|
||||
| 环境 | 用途 | 域名 |
|
||||
|------|------|------|
|
||||
| 生产 | API | api.pinzhuhui.com |
|
||||
| 生产 | 官网 | www.pinzhuhui.com |
|
||||
| 生产 | 商家后台 | merchant.pinzhuhui.com |
|
||||
| 生产 | 平台后台 | platform-admin.pinzhuhui.com |
|
||||
| 测试 | API | api-test.pinzhuhui.com |
|
||||
| 测试 | 官网 | test.pinzhuhui.com |
|
||||
| 测试 | 商家后台 | merchant-test.pinzhuhui.com |
|
||||
| 测试 | 平台后台 | platform-admin-test.pinzhuhui.com |
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
```text
|
||||
deploy/
|
||||
├── docker/
|
||||
│ ├── docker-compose.yml # Docker Compose 编排文件
|
||||
│ ├── Dockerfile.server # 后端服务镜像
|
||||
│ ├── Dockerfile.merchant # 商家后台镜像
|
||||
│ ├── Dockerfile.platform # 平台后台镜像
|
||||
│ └── .env.example # 环境变量模板
|
||||
└── nginx/
|
||||
├── api.conf # API 反向代理配置
|
||||
├── merchant.conf # 商家后台 Nginx 配置
|
||||
└── platform.conf # 平台后台 Nginx 配置
|
||||
```
|
||||
|
||||
## 服务端口
|
||||
|
||||
| 服务 | 端口 | 说明 |
|
||||
|------|------|------|
|
||||
| MySQL | 3306 | 数据库 |
|
||||
| Redis | 6379 | 缓存 |
|
||||
| Server | 3000 | 后端 API |
|
||||
| Merchant Admin | 8081 | 商家管理后台 |
|
||||
| Platform Admin | 8082 | 平台管理后台 |
|
||||
|
||||
---
|
||||
|
||||
## 一、快速部署(手动)
|
||||
|
||||
### 1. 配置环境变量
|
||||
|
||||
```bash
|
||||
cd deploy/docker
|
||||
cp .env.example .env
|
||||
# 编辑 .env,填入真实的密码和密钥
|
||||
vi .env
|
||||
```
|
||||
|
||||
### 2. 构建并启动
|
||||
|
||||
```bash
|
||||
# 方式一:使用 Makefile(推荐)
|
||||
make deploy
|
||||
|
||||
# 方式二:直接使用 docker-compose
|
||||
docker-compose -f deploy/docker/docker-compose.yml up -d --build
|
||||
```
|
||||
|
||||
### 3. 常用命令
|
||||
|
||||
```bash
|
||||
make help # 查看所有命令
|
||||
make logs # 查看日志
|
||||
make logs-server # 查看后端日志
|
||||
make ps # 查看容器状态
|
||||
make restart # 重启服务
|
||||
make down # 停止服务
|
||||
make clean # 清理所有数据(包括数据库)
|
||||
│ ├── docker-compose.prod.yml # 生产环境
|
||||
│ ├── docker-compose.test.yml # 测试环境
|
||||
│ ├── docker-compose.gateway.yml # Gateway 网关
|
||||
│ ├── Dockerfile.server # 后端镜像
|
||||
│ ├── Dockerfile.merchant # 商家后台镜像
|
||||
│ ├── Dockerfile.platform # 平台后台镜像
|
||||
│ ├── Dockerfile.website # 官网镜像
|
||||
│ ├── .env.example # 环境变量模板
|
||||
│ └── .env # 实际配置(不入仓库)
|
||||
├── nginx/
|
||||
│ ├── gateway/gateway.conf # Gateway 域名路由
|
||||
│ ├── api.conf # 后端 Nginx 配置
|
||||
│ ├── merchant.conf # 商家后台 Nginx 配置
|
||||
│ └── platform.conf # 平台后台 Nginx 配置
|
||||
scripts/
|
||||
│ └── setup-server.sh # 首次初始化脚本
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、GitLab CI/CD 自动化部署
|
||||
## 一、首次部署(服务器初始化)
|
||||
|
||||
### 第 1 步:运行初始化脚本
|
||||
|
||||
```bash
|
||||
# 将代码克隆到服务器
|
||||
git clone <你的GitLab仓库地址> ~/rent-platform
|
||||
cd ~/rent-platform
|
||||
|
||||
# 运行初始化(安装 Docker、创建网络、启动网关)
|
||||
bash scripts/setup-server.sh
|
||||
```
|
||||
|
||||
脚本会自动完成:
|
||||
- 安装 Docker、Docker Compose、Git、pnpm
|
||||
- 创建 `.env` 文件并提示你填写密码
|
||||
- 创建 Docker 网络(rent-prod、rent-test)
|
||||
- 启动 Gateway Nginx
|
||||
|
||||
### 第 2 步:配置 DNS
|
||||
|
||||
在你的域名管理面板添加 A 记录,将以下域名指向服务器 IP:
|
||||
|
||||
```text
|
||||
# 生产环境
|
||||
api.pinzhuhui.com → 服务器IP
|
||||
www.pinzhuhui.com → 服务器IP
|
||||
merchant.pinzhuhui.com → 服务器IP
|
||||
platform-admin.pinzhuhui.com → 服务器IP
|
||||
|
||||
# 测试环境
|
||||
api-test.pinzhuhui.com → 服务器IP
|
||||
test.pinzhuhui.com → 服务器IP
|
||||
merchant-test.pinzhuhui.com → 服务器IP
|
||||
platform-admin-test.pinzhuhui.com → 服务器IP
|
||||
```
|
||||
|
||||
### 第 3 步:部署服务
|
||||
|
||||
```bash
|
||||
# 部署生产环境
|
||||
make prod-deploy
|
||||
|
||||
# 部署测试环境
|
||||
make test-deploy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、GitLab CI/CD 自动化
|
||||
|
||||
### 前提条件
|
||||
|
||||
- 服务器已安装 Docker 和 Docker Compose
|
||||
- 服务器已部署 GitLab 实例
|
||||
- 项目代码已推送到 GitLab 仓库
|
||||
- 服务器已运行初始化脚本
|
||||
- 代码已推送到 GitLab 仓库
|
||||
|
||||
### 第 1 步:安装 GitLab Runner
|
||||
|
||||
```bash
|
||||
# 添加 GitLab Runner 仓库
|
||||
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
|
||||
|
||||
# 安装
|
||||
sudo apt install gitlab-runner
|
||||
```
|
||||
|
||||
### 第 2 步:注册 Runner
|
||||
|
||||
1. 在 GitLab 中打开项目 → **Settings → CI/CD → Runners**
|
||||
2. 复制 registration token
|
||||
3. 在服务器上执行注册:
|
||||
1. GitLab → **Settings → CI/CD → Runners** → 复制 token
|
||||
2. 在服务器执行:
|
||||
|
||||
```bash
|
||||
sudo gitlab-runner register
|
||||
```
|
||||
|
||||
按提示填写:
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|------|
|
||||
| GitLab URL | `http://你的GitLab域名/` |
|
||||
| Token | 从 Settings 页面复制的 token |
|
||||
| GitLab URL | `http://你的GitLab地址/` |
|
||||
| Token | 从页面复制 |
|
||||
| Description | `rent-deploy-runner` |
|
||||
| Tags | `rent-deploy` |
|
||||
| Executor | `shell` |
|
||||
@@ -104,91 +141,110 @@ sudo gitlab-runner register
|
||||
### 第 3 步:配置 Runner 权限
|
||||
|
||||
```bash
|
||||
# 让 gitlab-runner 用户可以执行 docker 命令
|
||||
sudo usermod -aG docker gitlab-runner
|
||||
|
||||
# 全局安装 pnpm
|
||||
sudo -u gitlab-runner npm install -g pnpm
|
||||
|
||||
# 验证
|
||||
sudo -u gitlab-runner docker ps
|
||||
sudo -u gitlab-runner pnpm --version
|
||||
```
|
||||
|
||||
### 第 4 步:配置 CI/CD 变量
|
||||
|
||||
在 GitLab 中打开 **Settings → CI/CD → Variables**,添加:
|
||||
GitLab → **Settings → CI/CD → Variables**:
|
||||
|
||||
| 变量名 | 说明 | 勾选 Masked |
|
||||
|--------|------|-------------|
|
||||
| `PROD_DB_PASSWORD` | MySQL root 密码 | ✅ |
|
||||
| `PROD_JWT_SECRET` | JWT 签名密钥 | ✅ |
|
||||
| 变量名 | 说明 | Masked |
|
||||
|--------|------|--------|
|
||||
| `PROD_DB_PASSWORD` | 生产数据库密码 | ✅ |
|
||||
| `PROD_JWT_SECRET` | 生产 JWT 密钥 | ✅ |
|
||||
| `TEST_DB_PASSWORD` | 测试数据库密码 | ✅ |
|
||||
| `TEST_JWT_SECRET` | 测试 JWT 密钥 | ✅ |
|
||||
|
||||
### 第 5 步:创建环境变量文件
|
||||
### 第 5 步:推送代码触发部署
|
||||
|
||||
```bash
|
||||
# 在服务器项目目录下创建 .env(只需一次)
|
||||
cd /path/to/repo/deploy/docker
|
||||
cp .env.example .env
|
||||
vi .env
|
||||
# 填入 PROD_DB_PASSWORD 和 PROD_JWT_SECRET 的真实值
|
||||
```
|
||||
# 推送 test 分支 → 自动部署测试环境
|
||||
git push origin test
|
||||
|
||||
### 第 6 步:推送代码触发部署
|
||||
|
||||
```bash
|
||||
# 推送 prod 分支 → 自动部署生产环境
|
||||
git push origin prod
|
||||
```
|
||||
|
||||
推送后 GitLab 会自动运行流水线:
|
||||
|
||||
1. **install** 阶段 — 安装依赖
|
||||
2. **build** 阶段 — 并行构建 server / merchant / platform
|
||||
3. **deploy** 阶段 — 停止旧服务 → 构建镜像 → 启动新服务
|
||||
|
||||
可以在 GitLab → **CI/CD → Pipelines** 页面查看实时日志。
|
||||
流水线:install → build(并行构建 4 个应用)→ deploy
|
||||
|
||||
---
|
||||
|
||||
## 三、故障排查
|
||||
## 三、常用命令
|
||||
|
||||
```bash
|
||||
make help # 查看所有命令
|
||||
|
||||
# 生产环境
|
||||
make prod-deploy # 完整部署(停止→构建→启动)
|
||||
make prod-logs # 查看日志
|
||||
make prod-logs-server # 查看后端日志
|
||||
make prod-ps # 查看容器状态
|
||||
make prod-restart # 重启
|
||||
|
||||
# 测试环境
|
||||
make test-deploy # 完整部署
|
||||
make test-logs # 查看日志
|
||||
make test-ps # 查看容器状态
|
||||
make test-restart # 重启
|
||||
|
||||
# 网关
|
||||
make gateway-up # 启动网关
|
||||
make gateway-reload # 重载网关配置
|
||||
|
||||
# 其他
|
||||
make clean # 清理所有环境(包括数据)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、故障排查
|
||||
|
||||
### 查看服务状态
|
||||
|
||||
```bash
|
||||
make ps
|
||||
make prod-ps # 生产环境
|
||||
make test-ps # 测试环境
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 所有服务
|
||||
make logs
|
||||
make prod-logs # 生产环境所有日志
|
||||
make prod-logs-server # 生产环境后端日志
|
||||
make test-logs # 测试环境所有日志
|
||||
|
||||
# 仅后端
|
||||
make logs-server
|
||||
|
||||
# 特定容器
|
||||
docker logs rent-mysql
|
||||
docker logs rent-redis
|
||||
docker logs rent-server
|
||||
# 直接查看某个容器
|
||||
docker logs rent-prod-server
|
||||
docker logs rent-test-mysql
|
||||
```
|
||||
|
||||
### 数据库连接失败
|
||||
### 数据库连接
|
||||
|
||||
```bash
|
||||
# 检查 MySQL 是否就绪
|
||||
docker exec rent-mysql mysqladmin ping -h localhost -u root -p
|
||||
# 生产环境
|
||||
docker exec -it rent-prod-mysql mysql -u root -p rent_platform
|
||||
|
||||
# 进入 MySQL 手动检查
|
||||
docker exec -it rent-mysql mysql -u root -p rent_platform
|
||||
# 测试环境
|
||||
docker exec -it rent-test-mysql mysql -u root -p rent_platform
|
||||
```
|
||||
|
||||
### 重建某个服务
|
||||
### 重建单个服务
|
||||
|
||||
```bash
|
||||
# 只重建后端
|
||||
docker-compose -f deploy/docker/docker-compose.yml up -d --build server
|
||||
# 只重建生产环境后端
|
||||
docker-compose -f deploy/docker/docker-compose.prod.yml up -d --build server
|
||||
|
||||
# 只重建商家后台
|
||||
docker-compose -f deploy/docker/docker-compose.yml up -d --build merchant-admin
|
||||
# 只重建测试环境商家后台
|
||||
docker-compose -f deploy/docker/docker-compose.test.yml up -d --build merchant-admin
|
||||
```
|
||||
|
||||
### 网关问题
|
||||
|
||||
```bash
|
||||
# 检查网关状态
|
||||
docker logs rent-gateway
|
||||
|
||||
# 重载网关配置(修改了 gateway.conf 后)
|
||||
make gateway-reload
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user