#!/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"