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

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

224 lines
6.3 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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