chore(deploy): 新增部署快捷脚本
This commit is contained in:
95
README.md
95
README.md
@@ -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
100
deploy.sh
Normal 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"
|
||||||
Reference in New Issue
Block a user