Files
012-kaopeilian/deploy/scripts/setup_environment.sh
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

247 lines
8.0 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "$@"