feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

223
deploy/scripts/check-config.sh Executable file
View File

@@ -0,0 +1,223 @@
#!/bin/bash
# 配置一致性检查脚本
# 用于快速验证系统各组件配置是否一致
echo "🔧 配置一致性检查脚本"
echo "========================"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查结果统计
PASS_COUNT=0
FAIL_COUNT=0
# 检查函数
check_service() {
local service_name=$1
local url=$2
local expected_response=$3
echo -n "检查 $service_name ... "
if command -v curl >/dev/null 2>&1; then
response=$(curl -s --connect-timeout 5 "$url" 2>/dev/null)
if [[ $? -eq 0 && "$response" == *"$expected_response"* ]]; then
echo -e "${GREEN}✅ 通过${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 失败${NC}"
echo " 期望包含: $expected_response"
echo " 实际响应: $response"
((FAIL_COUNT++))
fi
else
echo -e "${YELLOW}⚠️ 跳过 (curl 未安装)${NC}"
fi
}
# 检查Docker服务
check_docker_service() {
local service_name=$1
echo -n "检查 Docker 服务 $service_name ... "
if command -v docker-compose >/dev/null 2>&1; then
if docker-compose ps | grep -q "$service_name.*Up"; then
echo -e "${GREEN}✅ 运行中${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 未运行${NC}"
((FAIL_COUNT++))
fi
else
echo -e "${YELLOW}⚠️ 跳过 (docker-compose 未安装)${NC}"
fi
}
# 检查配置文件
check_config_file() {
local file_path=$1
local description=$2
echo -n "检查 $description ... "
if [[ -f "$file_path" ]]; then
echo -e "${GREEN}✅ 存在${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 缺失${NC}"
echo " 文件路径: $file_path"
((FAIL_COUNT++))
fi
}
# 检查端口占用
check_port() {
local port=$1
local service_name=$2
echo -n "检查端口 $port ($service_name) ... "
if command -v lsof >/dev/null 2>&1; then
if lsof -i :$port >/dev/null 2>&1; then
echo -e "${GREEN}✅ 已占用${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 未占用${NC}"
((FAIL_COUNT++))
fi
elif command -v netstat >/dev/null 2>&1; then
if netstat -an | grep -q ":$port "; then
echo -e "${GREEN}✅ 已占用${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 未占用${NC}"
((FAIL_COUNT++))
fi
else
echo -e "${YELLOW}⚠️ 跳过 (lsof/netstat 未安装)${NC}"
fi
}
echo "1. 检查基础服务状态"
echo "-------------------"
# 检查Docker服务
check_docker_service "mysql"
check_docker_service "redis"
# 检查端口占用
check_port 3306 "MySQL"
check_port 6379 "Redis"
check_port 8000 "后端API"
check_port 3001 "前端开发服务器"
echo ""
echo "2. 检查服务健康状态"
echo "-------------------"
# 检查后端健康状态
check_service "后端API健康检查" "http://localhost:8000/health" "healthy"
# 检查前端服务
check_service "前端服务" "http://localhost:3001" "考培练系统"
echo ""
echo "3. 检查配置文件"
echo "---------------"
# 检查关键配置文件
check_config_file "kaopeilian-backend/app/config/settings.py" "后端配置文件"
check_config_file "kaopeilian-frontend/src/api/config.ts" "前端API配置"
check_config_file "docker-compose.yml" "Docker配置文件"
check_config_file "配置一致性检查清单.md" "配置检查清单"
echo ""
echo "4. 检查认证功能"
echo "---------------"
# 检查登录API
echo -n "检查登录API ... "
if command -v curl >/dev/null 2>&1; then
login_response=$(curl -s -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "password": "TestPass123!"}' 2>/dev/null)
if [[ "$login_response" == *"access_token"* ]]; then
echo -e "${GREEN}✅ 正常工作${NC}"
((PASS_COUNT++))
# 提取token测试认证
if command -v jq >/dev/null 2>&1; then
token=$(echo "$login_response" | jq -r '.data.access_token' 2>/dev/null)
if [[ "$token" != "null" && "$token" != "" ]]; then
echo -n "检查token认证 ... "
auth_response=$(curl -s -H "Authorization: Bearer $token" \
http://localhost:8000/api/v1/auth/me 2>/dev/null)
if [[ "$auth_response" == *"testuser"* ]]; then
echo -e "${GREEN}✅ 正常工作${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 失败${NC}"
((FAIL_COUNT++))
fi
fi
else
echo " (跳过token测试 - jq未安装)"
fi
else
echo -e "${RED}❌ 失败${NC}"
echo " 响应: $login_response"
((FAIL_COUNT++))
fi
else
echo -e "${YELLOW}⚠️ 跳过 (curl 未安装)${NC}"
fi
echo ""
echo "5. 检查CORS配置"
echo "---------------"
echo -n "检查CORS预检请求 ... "
if command -v curl >/dev/null 2>&1; then
cors_response=$(curl -s -X OPTIONS http://localhost:8000/api/v1/auth/login \
-H "Origin: http://localhost:3001" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type" 2>/dev/null)
if [[ $? -eq 0 ]]; then
echo -e "${GREEN}✅ 正常响应${NC}"
((PASS_COUNT++))
else
echo -e "${RED}❌ 失败${NC}"
((FAIL_COUNT++))
fi
else
echo -e "${YELLOW}⚠️ 跳过 (curl 未安装)${NC}"
fi
echo ""
echo "========================"
echo "📊 检查结果统计"
echo "------------------------"
echo -e "通过: ${GREEN}$PASS_COUNT${NC}"
echo -e "失败: ${RED}$FAIL_COUNT${NC}"
if [[ $FAIL_COUNT -eq 0 ]]; then
echo -e "\n🎉 ${GREEN}所有检查都通过了!系统配置正常。${NC}"
exit 0
else
echo -e "\n⚠ ${YELLOW}发现 $FAIL_COUNT 个问题,请检查配置。${NC}"
echo ""
echo "💡 解决建议:"
echo "1. 确保Docker服务已启动: docker-compose up -d"
echo "2. 检查端口是否被占用或服务未启动"
echo "3. 参考 '配置一致性检查清单.md' 核对配置"
echo "4. 确保数据库密码、CORS域名等配置一致"
exit 1
fi