100 lines
2.8 KiB
Bash
100 lines
2.8 KiB
Bash
#!/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" |