- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
247 lines
8.0 KiB
Bash
247 lines
8.0 KiB
Bash
#!/bin/bash
|
||
# 环境设置脚本
|
||
|
||
set -e
|
||
|
||
ENV_TYPE=${1:-development}
|
||
FORCE_SETUP=${2:-false}
|
||
|
||
echo "=== 考培练系统环境设置 ==="
|
||
echo "环境类型: $ENV_TYPE"
|
||
echo "设置时间: $(date)"
|
||
echo ""
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 打印带颜色的消息
|
||
print_message() {
|
||
local color=$1
|
||
local message=$2
|
||
echo -e "${color}${message}${NC}"
|
||
}
|
||
|
||
# 检查必要的工具
|
||
check_requirements() {
|
||
print_message $BLUE "检查系统要求..."
|
||
|
||
# 检查Docker
|
||
if ! command -v docker &> /dev/null; then
|
||
print_message $RED "❌ Docker未安装,请先安装Docker"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查Docker Compose
|
||
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
||
print_message $RED "❌ Docker Compose未安装,请先安装Docker Compose"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查Node.js (如果需要本地开发)
|
||
if [ "$ENV_TYPE" = "development" ] && ! command -v node &> /dev/null; then
|
||
print_message $YELLOW "⚠️ Node.js未安装,建议安装以支持本地开发"
|
||
fi
|
||
|
||
# 检查Python (如果需要本地开发)
|
||
if [ "$ENV_TYPE" = "development" ] && ! command -v python3 &> /dev/null; then
|
||
print_message $YELLOW "⚠️ Python3未安装,建议安装以支持本地开发"
|
||
fi
|
||
|
||
print_message $GREEN "✅ 系统要求检查完成"
|
||
}
|
||
|
||
# 设置前端环境
|
||
setup_frontend_env() {
|
||
print_message $BLUE "设置前端环境配置..."
|
||
|
||
local env_file="kaopeilian-frontend/.env.$ENV_TYPE"
|
||
local example_file="kaopeilian-frontend/.env.example"
|
||
|
||
if [ ! -f "$env_file" ] || [ "$FORCE_SETUP" = "true" ]; then
|
||
if [ -f "$example_file" ]; then
|
||
cp "$example_file" "$env_file"
|
||
print_message $GREEN "✅ 创建前端环境配置: $env_file"
|
||
else
|
||
print_message $YELLOW "⚠️ 前端配置模板不存在: $example_file"
|
||
fi
|
||
else
|
||
print_message $GREEN "✅ 前端环境配置已存在: $env_file"
|
||
fi
|
||
|
||
# 根据环境类型更新配置
|
||
if [ -f "$env_file" ]; then
|
||
case $ENV_TYPE in
|
||
development)
|
||
sed -i.bak 's/VITE_APP_TITLE=.*/VITE_APP_TITLE=考培练系统(开发)/' "$env_file"
|
||
sed -i.bak 's/VITE_APP_ENV=.*/VITE_APP_ENV=development/' "$env_file"
|
||
sed -i.bak 's/VITE_API_BASE_URL=.*/VITE_API_BASE_URL=http:\/\/localhost:8000/' "$env_file"
|
||
sed -i.bak 's/VITE_ENABLE_DEVTOOLS=.*/VITE_ENABLE_DEVTOOLS=true/' "$env_file"
|
||
rm -f "$env_file.bak"
|
||
;;
|
||
production)
|
||
sed -i.bak 's/VITE_APP_TITLE=.*/VITE_APP_TITLE=考培练系统/' "$env_file"
|
||
sed -i.bak 's/VITE_APP_ENV=.*/VITE_APP_ENV=production/' "$env_file"
|
||
sed -i.bak 's/VITE_API_BASE_URL=.*/VITE_API_BASE_URL=https:\/\/aiedu.ireborn.com.cn/' "$env_file"
|
||
sed -i.bak 's/VITE_ENABLE_DEVTOOLS=.*/VITE_ENABLE_DEVTOOLS=false/' "$env_file"
|
||
rm -f "$env_file.bak"
|
||
;;
|
||
esac
|
||
print_message $GREEN "✅ 前端环境配置已更新"
|
||
fi
|
||
}
|
||
|
||
# 设置后端环境
|
||
setup_backend_env() {
|
||
print_message $BLUE "设置后端环境配置..."
|
||
|
||
local env_file="kaopeilian-backend/.env.$ENV_TYPE"
|
||
local example_file="kaopeilian-backend/.env.example"
|
||
|
||
if [ ! -f "$env_file" ] || [ "$FORCE_SETUP" = "true" ]; then
|
||
if [ -f "$example_file" ]; then
|
||
cp "$example_file" "$env_file"
|
||
print_message $GREEN "✅ 创建后端环境配置: $env_file"
|
||
else
|
||
print_message $YELLOW "⚠️ 后端配置模板不存在: $example_file"
|
||
fi
|
||
else
|
||
print_message $GREEN "✅ 后端环境配置已存在: $env_file"
|
||
fi
|
||
|
||
# 根据环境类型更新配置
|
||
if [ -f "$env_file" ]; then
|
||
case $ENV_TYPE in
|
||
development)
|
||
sed -i.bak 's/ENV=.*/ENV=development/' "$env_file"
|
||
sed -i.bak 's/DEBUG=.*/DEBUG=true/' "$env_file"
|
||
sed -i.bak 's/DATABASE_URL=.*/DATABASE_URL=mysql+aiomysql:\/\/root:Kaopeilian2025!@#@localhost:3306\/kaopeilian?charset=utf8mb4/' "$env_file"
|
||
sed -i.bak 's/MYSQL_HOST=.*/MYSQL_HOST=localhost/' "$env_file"
|
||
rm -f "$env_file.bak"
|
||
;;
|
||
production)
|
||
sed -i.bak 's/ENV=.*/ENV=production/' "$env_file"
|
||
sed -i.bak 's/DEBUG=.*/DEBUG=false/' "$env_file"
|
||
sed -i.bak 's/DATABASE_URL=.*/DATABASE_URL=mysql+aiomysql:\/\/root:Kaopeilian2025!@#@mysql:3306\/kaopeilian?charset=utf8mb4/' "$env_file"
|
||
sed -i.bak 's/MYSQL_HOST=.*/MYSQL_HOST=mysql/' "$env_file"
|
||
rm -f "$env_file.bak"
|
||
;;
|
||
esac
|
||
print_message $GREEN "✅ 后端环境配置已更新"
|
||
fi
|
||
}
|
||
|
||
# 设置Docker环境
|
||
setup_docker_env() {
|
||
print_message $BLUE "设置Docker环境..."
|
||
|
||
case $ENV_TYPE in
|
||
development)
|
||
if [ ! -f "docker-compose.dev.yml" ]; then
|
||
print_message $RED "❌ 开发环境Docker配置不存在: docker-compose.dev.yml"
|
||
return 1
|
||
fi
|
||
print_message $GREEN "✅ 开发环境Docker配置已就绪"
|
||
;;
|
||
production)
|
||
if [ ! -f "docker-compose.yml" ]; then
|
||
print_message $RED "❌ 生产环境Docker配置不存在: docker-compose.yml"
|
||
return 1
|
||
fi
|
||
print_message $GREEN "✅ 生产环境Docker配置已就绪"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# 启动环境
|
||
start_environment() {
|
||
print_message $BLUE "启动$ENV_TYPE环境..."
|
||
|
||
case $ENV_TYPE in
|
||
development)
|
||
if command -v docker-compose &> /dev/null; then
|
||
docker-compose -f docker-compose.dev.yml up -d
|
||
else
|
||
docker compose -f docker-compose.dev.yml up -d
|
||
fi
|
||
;;
|
||
production)
|
||
if command -v docker-compose &> /dev/null; then
|
||
docker-compose up -d
|
||
else
|
||
docker compose up -d
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
if [ $? -eq 0 ]; then
|
||
print_message $GREEN "✅ 环境启动成功"
|
||
|
||
# 等待服务启动
|
||
print_message $BLUE "等待服务启动..."
|
||
sleep 10
|
||
|
||
# 检查服务状态
|
||
./scripts/check_environment.sh
|
||
else
|
||
print_message $RED "❌ 环境启动失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 显示使用说明
|
||
show_usage() {
|
||
echo "用法: $0 [环境类型] [强制设置]"
|
||
echo ""
|
||
echo "环境类型:"
|
||
echo " development - 开发环境 (默认)"
|
||
echo " production - 生产环境"
|
||
echo ""
|
||
echo "强制设置:"
|
||
echo " true - 强制重新创建配置文件"
|
||
echo " false - 保留已存在的配置文件 (默认)"
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 # 设置开发环境"
|
||
echo " $0 development # 设置开发环境"
|
||
echo " $0 production # 设置生产环境"
|
||
echo " $0 development true # 强制重新设置开发环境"
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||
show_usage
|
||
exit 0
|
||
fi
|
||
|
||
if [ "$ENV_TYPE" != "development" ] && [ "$ENV_TYPE" != "production" ]; then
|
||
print_message $RED "❌ 无效的环境类型: $ENV_TYPE"
|
||
show_usage
|
||
exit 1
|
||
fi
|
||
|
||
check_requirements
|
||
setup_frontend_env
|
||
setup_backend_env
|
||
setup_docker_env
|
||
|
||
# 询问是否启动环境
|
||
read -p "是否启动$ENV_TYPE环境? [y/N]: " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
start_environment
|
||
fi
|
||
|
||
print_message $GREEN "=== 环境设置完成 ==="
|
||
print_message $BLUE "环境类型: $ENV_TYPE"
|
||
print_message $BLUE "前端地址: http://localhost:3001"
|
||
print_message $BLUE "后端地址: http://localhost:8000"
|
||
print_message $BLUE "API文档: http://localhost:8000/docs"
|
||
}
|
||
|
||
main "$@"
|