init
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
# 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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user