chore(deploy): 新增部署快捷脚本

This commit is contained in:
2025-12-15 14:34:19 +08:00
parent 89f36ee666
commit 9b38248cbf
2 changed files with 195 additions and 0 deletions

View File

@@ -1,5 +1,19 @@
# 在线商城PHP项目 # 在线商城PHP项目
## Git 分支策略
| 环境 | 推荐分支 | 备选分支 | 说明 |
|------|----------|----------|------|
| local | `dev` | `develop` | 本地开发环境 |
| development | `dev` | `development` | 开发测试环境 |
| test | `test` | `staging` | 测试环境 |
| staging | `staging` | `pre-release` | 预发布环境 |
| production | `master` | `main` | 生产环境 |
**部署建议**
- 每个环境部署前请先切换到对应的Git分支
- 确保代码版本与目标环境匹配
- 生产环境部署前建议先在staging环境验证
## Docker 部署 ## Docker 部署
@@ -21,7 +35,12 @@ cp .env.example .env.development
## 开发环境-local 部署 ## 开发环境-local 部署
**对应Git分支**: `main``develop`
```bash ```bash
# 切换到本地开发分支
git checkout main # 或 develop
# 本地部署时,需要将 APP_ENV 设置为 local, 并指定 docker-compose.local.yml 文件 # 本地部署时,需要将 APP_ENV 设置为 local, 并指定 docker-compose.local.yml 文件
docker-compose --env-file .env.local -f docker-compose.local.yml up -d 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 # 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 部署 ## 开发环境-development 部署
**对应Git分支**: `dev``development`
```bash ```bash
# 切换到开发分支
git checkout dev # 或 development
# 默认使用 docker-compose.yml 文件 # 默认使用 docker-compose.yml 文件
docker-compose --project-name shop_development --env-file .env.development up -d docker-compose --project-name shop_development --env-file .env.development up -d
# docker-compose down 命令,用来停止并删除容器 # docker-compose down 命令,用来停止并删除容器
docker-compose --project-name shop_development down -v 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
```

100
deploy.sh Normal file
View File

@@ -0,0 +1,100 @@
#!/bin/bash
# deploy.sh - 环境切换与部署脚本
# 使用方法: ./deploy.sh <environment>
# 示例: ./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"