From 9b38248cbfbc05e2ce65d6fdf9ea3c527531d377 Mon Sep 17 00:00:00 2001 From: ZF sun <34314687@qq.com> Date: Mon, 15 Dec 2025 14:34:19 +0800 Subject: [PATCH] =?UTF-8?q?chore(deploy):=20=E6=96=B0=E5=A2=9E=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E5=BF=AB=E6=8D=B7=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++ deploy.sh | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100644 deploy.sh diff --git a/README.md b/README.md index 5df0f8efe..e17a17db9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,19 @@ # 在线商城PHP项目 +## Git 分支策略 + +| 环境 | 推荐分支 | 备选分支 | 说明 | +|------|----------|----------|------| +| local | `dev` | `develop` | 本地开发环境 | +| development | `dev` | `development` | 开发测试环境 | +| test | `test` | `staging` | 测试环境 | +| staging | `staging` | `pre-release` | 预发布环境 | +| production | `master` | `main` | 生产环境 | + +**部署建议**: +- 每个环境部署前请先切换到对应的Git分支 +- 确保代码版本与目标环境匹配 +- 生产环境部署前建议先在staging环境验证 ## Docker 部署 @@ -21,7 +35,12 @@ cp .env.example .env.development ## 开发环境-local 部署 +**对应Git分支**: `main` 或 `develop` + ```bash +# 切换到本地开发分支 +git checkout main # 或 develop + # 本地部署时,需要将 APP_ENV 设置为 local, 并指定 docker-compose.local.yml 文件 docker-compose --env-file .env.local -f docker-compose.local.yml up -d # docker-compose --project-name shop_local --env-file .env.local -f docker-compose.local.yml up -d @@ -34,10 +53,86 @@ docker-compose -f docker-compose.local.yml down -v ## 开发环境-development 部署 +**对应Git分支**: `dev` 或 `development` + ```bash +# 切换到开发分支 +git checkout dev # 或 development + # 默认使用 docker-compose.yml 文件 docker-compose --project-name shop_development --env-file .env.development up -d # docker-compose down 命令,用来停止并删除容器 docker-compose --project-name shop_development down -v +``` + +## 开发环境-test 部署 (测试环境) + +**对应Git分支**: `test` 或 `staging` + +```bash +# 切换到测试分支 +git checkout test # 或 staging + +# 默认使用 docker-compose.yml 文件 +docker-compose --project-name shop_test --env-file .env.test up -d + +# docker-compose down 命令,用来停止并删除容器 +docker-compose --project-name shop_test down -v +``` + +## 开发环境-staging 部署(预发布环境) + +**对应Git分支**: `staging` 或 `pre-release` + +```bash +# 切换到预发布分支 +git checkout staging # 或 pre-release + +# 默认使用 docker-compose.yml 文件 +docker-compose --project-name shop_staging --env-file .env.staging up -d + +# docker-compose down 命令,用来停止并删除容器 +docker-compose --project-name shop_staging down -v +``` + +## 生产环境-production 部署 + +**对应Git分支**: `master` 或 `main` 或 `production` + +```bash +# 切换到生产分支 +git checkout main + +# 确保代码是最新的生产版本 +git pull origin main + +# 默认使用 docker-compose.yml 文件 +docker-compose --project-name shop_production --env-file .env.production up -d + +# docker-compose down 命令,用来停止并删除容器 +docker-compose --project-name shop_production down -v +``` + +## 便捷部署脚本 + +### 环境切换与部署脚本 + +- `deploy.sh` 脚本: + + +### 使用方法 + +```bash +# 赋予执行权限 +chmod +x deploy.sh + +# 部署到开发环境 +./deploy.sh development + +# 部署到测试环境 +./deploy.sh test + +# 部署到生产环境 +./deploy.sh production ``` \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 000000000..d54626122 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +# deploy.sh - 环境切换与部署脚本 +# 使用方法: ./deploy.sh +# 示例: ./deploy.sh development + +ENVIRONMENT=$1 +PROJECT_NAME="shop_${ENVIRONMENT}" +BRANCH="" +COMPOSE_FILE="docker-compose.yml" +ENV_FILE=".env.${ENVIRONMENT}" + +# 现实运行中的服务器网站,数据库备份目录 +RUN_SERVER_WEB_ROOT="/data/wwwroot/shop-projects" +RUN_SERVER_DB_BACKUP_DIR="/data/backup/shop-projects" + +case $ENVIRONMENT in + "local") + BRANCH="dev" + COMPOSE_FILE="docker-compose.local.yml" + ENV_FILE=".env.local" + ;; + "development") + BRANCH="dev" + ;; + "test") + BRANCH="test" + ;; + "staging") + BRANCH="staging" + ;; + "production") + BRANCH="main" + ;; + *) + echo "错误: 不支持的环境 '$ENVIRONMENT'" + echo "支持的环境: local, development, test, staging, production" + exit 1 + ;; +esac + +echo "==========================================" +echo "部署环境: $ENVIRONMENT" +echo "项目名称: $PROJECT_NAME" +echo "Git分支: $BRANCH" +echo "配置文件: $COMPOSE_FILE" +echo "环境文件: $ENV_FILE" +echo "==========================================" + +# 切换分支 +echo "切换到Git分支: $BRANCH" +git checkout $BRANCH +if [ $? -ne 0 ]; then + echo "错误: 无法切换到分支 $BRANCH" + exit 1 +fi + +# 拉取最新代码 +echo "拉取最新代码..." +git pull origin $BRANCH + +# 根据不同的环境,执行不同的操作 +# 预发布环境、生产环境都需要使用运行服务上的用户文件,将用户文件复制到指定目录 + + + +# 根据不同的环境,执行不同的操作 +# 预发布环境、生产环境都需要还原数据库,使用数据库备份文件,并尝试使用数据库升级 +if [ "$ENVIRONMENT" = "local" ]; then + echo "本地环境,跳过数据库还原" +else + echo "还原数据库..." + # 还原数据库 + docker-compose --project-name $PROJECT_NAME exec -T db bash -c "mysql -uroot -p$DB_ROOT_PASSWORD shop < $DB_BACKUP_DIR/shop.sql" + if [ $? -ne 0 ]; then + echo "错误: 数据库还原失败" + exit 1 + fi + + # 尝试使用数据库升级脚本 + echo "尝试使用数据库升级..." + docker-compose --project-name $PROJECT_NAME exec -T db bash -c "php artisan migrate --force" + if [ $? -ne 0 ]; then + echo "数据库升级失败" + else + echo "数据库升级成功" + fi +fi + +# 构建并启动容器 +echo "构建并启动Docker容器..." +if [ "$ENVIRONMENT" = "local" ]; then + docker-compose --env-file $ENV_FILE -f $COMPOSE_FILE up -d +else + docker-compose --project-name $PROJECT_NAME --env-file $ENV_FILE up -d +fi + +echo "部署完成!" +echo "查看容器状态: docker-compose --project-name $PROJECT_NAME ps" +echo "查看日志: docker-compose --project-name $PROJECT_NAME logs -f" \ No newline at end of file