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

5.6 KiB

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 文件:

# 编辑配置文件
vim scripts/deploy/deploy-config.sh

# 修改端口配置:
export BLUE_PORT="${BLUE_PORT:-3000}"      # 蓝环境端口
export GREEN_PORT="${GREEN_PORT:-3001}"    # 绿环境端口
export CONTAINER_PORT="${CONTAINER_PORT:-3000}"  # 容器内部端口

通过环境变量覆盖

# 临时使用其他端口
export BLUE_PORT=4000
export GREEN_PORT=4001
./scripts/deploy/docker-blue-green.sh

详细说明请参考:scripts/deploy/README-PORT-CONFIG.md

使用方法

方式一:手动部署(已拉取代码)

cd /www/goravel-admin
chmod +x scripts/deploy/docker-blue-green.sh
./scripts/deploy/docker-blue-green.sh

方式二:从 Git 拉取并部署

# 设置环境变量(可选)
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

或者直接修改脚本中的配置:

# 编辑脚本
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 可以跳过迁移

数据填充

部署脚本会提示是否执行数据填充:

  • ⚠️ 需要确认 - 会提示用户是否执行
  • ⚠️ 可能重复 - 填充可能会重复插入数据,请谨慎使用
  • 💡 建议 - 通常只在首次部署或需要更新基础数据时执行

通过环境变量控制

可以通过环境变量跳过填充提示:

# 自动执行填充(不提示)
export RUN_SEED=true
./scripts/deploy/docker-blue-green.sh

# 跳过填充(不提示)
export RUN_SEED=false
./scripts/deploy/docker-blue-green.sh

单独执行迁移或填充

如果需要单独执行迁移或填充:

# 执行数据库迁移
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 中配置。

故障处理

如果部署失败,脚本会自动回滚:

  • 停止新版本容器
  • 保持旧版本运行

回滚操作

快速回滚

如果刚部署的版本有问题,可以快速回滚到上一个版本:

cd /www/goravel-admin
chmod +x scripts/deploy/rollback.sh
./scripts/deploy/rollback.sh

特点:

  • 自动检测当前运行的版本(blue/green)
  • 切换到另一个环境
  • 如果旧容器已删除,可以选择从 Git 回滚或重新构建
  • 自动切换 Nginx 流量(如果配置了)

Git 版本回滚

回滚到特定的 Git 提交、标签或分支:

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

特点:

  • 支持提交哈希、标签、分支
  • 自动执行部署流程
  • 需要确认操作

查看日志

# 查看运行中的容器日志
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