Files
server/scripts/deploy/README.md
T
2026-01-16 15:49:34 +08:00

214 lines
5.6 KiB
Markdown

# Docker 蓝绿部署脚本
## 文件说明
- `deploy-config.sh` - **端口配置文件**(统一管理所有端口配置)
- `docker-blue-green.sh` - 蓝绿部署主脚本,执行零停机部署
- `git-deploy.sh` - 从 Git 拉取代码并自动部署的脚本
- `rollback.sh` - 快速回滚到上一个版本
- `rollback-git.sh` - 从 Git 回滚到指定版本并部署
- `migrate.sh` - 单独执行数据库迁移脚本
- `seed.sh` - 单独执行数据填充脚本
## 端口配置
**重要:** 所有端口配置统一在 `deploy-config.sh` 文件中管理。
### 修改端口
只需修改 `scripts/deploy/deploy-config.sh` 文件:
```bash
# 编辑配置文件
vim scripts/deploy/deploy-config.sh
# 修改端口配置:
export BLUE_PORT="${BLUE_PORT:-3000}" # 蓝环境端口
export GREEN_PORT="${GREEN_PORT:-3001}" # 绿环境端口
export CONTAINER_PORT="${CONTAINER_PORT:-3000}" # 容器内部端口
```
### 通过环境变量覆盖
```bash
# 临时使用其他端口
export BLUE_PORT=4000
export GREEN_PORT=4001
./scripts/deploy/docker-blue-green.sh
```
详细说明请参考:`scripts/deploy/README-PORT-CONFIG.md`
## 使用方法
### 方式一:手动部署(已拉取代码)
```bash
cd /www/goravel-admin
chmod +x scripts/deploy/docker-blue-green.sh
./scripts/deploy/docker-blue-green.sh
```
### 方式二:从 Git 拉取并部署
```bash
# 设置环境变量(可选)
export GIT_REPO_URL="https://github.com/your-username/goravel-admin.git"
export GIT_BRANCH="main"
export DEPLOY_DIR="/www/goravel-admin"
# 执行部署
chmod +x scripts/deploy/git-deploy.sh
./scripts/deploy/git-deploy.sh
```
或者直接修改脚本中的配置:
```bash
# 编辑脚本
vim scripts/deploy/git-deploy.sh
# 修改这些变量:
# GIT_REPO_URL="你的仓库地址"
# GIT_BRANCH="main"
# DEPLOY_DIR="/www/goravel-admin"
```
## 部署流程
1. **检测当前版本** - 自动检测运行的是 blue 还是 green
2. **构建新版本** - 在备用环境构建新镜像(包含启动脚本)
3. **启动新版本** - 启动新版本容器(不同端口)
4. **自动执行迁移** - 容器启动脚本会在应用启动前自动执行数据库迁移
5. **数据填充(可选)** - 提示是否执行数据填充
6. **健康检查** - 等待新版本通过健康检查
7. **切换流量** - 更新 Nginx 配置(如果存在)
8. **停止旧版本** - 停止旧版本容器
## 数据库迁移和填充
### 自动迁移(容器启动时执行)
**重要:** 迁移在容器启动时自动执行,确保在应用启动前完成:
-**启动前执行** - 容器启动脚本会在应用启动前执行迁移,避免字段不存在错误
-**自动执行** - 无需手动操作,每次容器启动都会执行
-**幂等操作** - Goravel 的 `migrate` 命令是安全的,可以重复执行
-**失败退出** - 如果迁移失败,容器会退出,部署脚本会自动检测并回滚
- ⚙️ **可配置** - 通过环境变量 `SKIP_MIGRATE=true` 可以跳过迁移
### 数据填充
部署脚本会提示是否执行数据填充:
- ⚠️ **需要确认** - 会提示用户是否执行
- ⚠️ **可能重复** - 填充可能会重复插入数据,请谨慎使用
- 💡 **建议** - 通常只在首次部署或需要更新基础数据时执行
### 通过环境变量控制
可以通过环境变量跳过填充提示:
```bash
# 自动执行填充(不提示)
export RUN_SEED=true
./scripts/deploy/docker-blue-green.sh
# 跳过填充(不提示)
export RUN_SEED=false
./scripts/deploy/docker-blue-green.sh
```
### 单独执行迁移或填充
如果需要单独执行迁移或填充:
```bash
# 执行数据库迁移
chmod +x scripts/deploy/migrate.sh
./scripts/deploy/migrate.sh # 自动检测容器
./scripts/deploy/migrate.sh goravel-admin-blue # 指定容器
# 执行数据填充
chmod +x scripts/deploy/seed.sh
./scripts/deploy/seed.sh # 自动检测容器
./scripts/deploy/seed.sh goravel-admin-blue # 指定容器
```
## 前置要求
- Docker 和 Docker Compose 已安装
- 服务器上已配置 `.env` 文件
- 如果需要 Nginx 切换,需要配置 Nginx
## 健康检查
应用需要提供 `/health` 端点,已在 `routes/web.go` 中配置。
## 故障处理
如果部署失败,脚本会自动回滚:
- 停止新版本容器
- 保持旧版本运行
## 回滚操作
### 快速回滚
如果刚部署的版本有问题,可以快速回滚到上一个版本:
```bash
cd /www/goravel-admin
chmod +x scripts/deploy/rollback.sh
./scripts/deploy/rollback.sh
```
**特点:**
- 自动检测当前运行的版本(blue/green)
- 切换到另一个环境
- 如果旧容器已删除,可以选择从 Git 回滚或重新构建
- 自动切换 Nginx 流量(如果配置了)
### Git 版本回滚
回滚到特定的 Git 提交、标签或分支:
```bash
cd /www/goravel-admin
chmod +x scripts/deploy/rollback-git.sh
# 查看最近提交(不带参数)
./scripts/deploy/rollback-git.sh
# 回滚到上一个提交
./scripts/deploy/rollback-git.sh HEAD~1
# 回滚到指定提交
./scripts/deploy/rollback-git.sh abc1234
# 回滚到指定标签
./scripts/deploy/rollback-git.sh v1.0.0
# 回滚到远程分支
./scripts/deploy/rollback-git.sh origin/main
```
**特点:**
- 支持提交哈希、标签、分支
- 自动执行部署流程
- 需要确认操作
## 查看日志
```bash
# 查看运行中的容器日志
docker logs -f goravel-admin-blue
docker logs -f goravel-admin-green
# 查看容器状态
docker ps | grep goravel-admin
# 查看容器健康状态
docker inspect --format='{{.State.Health.Status}}' goravel-admin-blue
docker inspect --format='{{.State.Health.Status}}' goravel-admin-green
```