Files
012-kaopeilian/知识库/kpl域名访问问题-已解决.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

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

4.5 KiB
Raw Blame History

KPL域名访问问题解决报告

问题描述

访问 https://kpl.ireborn.com.cn 返回 403 Forbidden 错误

问题原因

Vite开发服务器默认只允许特定域名访问。在 vite.config.tsallowedHosts 配置中缺少 kpl.ireborn.com.cn 域名,导致请求被拒绝。

解决步骤

1. 定位问题

# 发现容器和nginx都正常运行
docker ps | grep kpl

# 但前端容器返回403
curl http://localhost:3002/  # 200 OK (本地访问正常)
curl https://kpl.ireborn.com.cn  # 403 Forbidden (域名访问失败)

2. 修改配置

编辑 /root/aiedu/kaopeilian-frontend/vite.config.ts:

server: {
  allowedHosts: [
    'aiedu.ireborn.com.cn',
    'kpl.ireborn.com.cn',        // ← 添加这一行
    'kaopeilian-frontend-dev',
    'kpl-frontend-dev',           // ← 添加这一行
    '120.79.247.16',
    'localhost'
  ],
  // ... 其他配置
}

3. 重启容器

docker restart kpl-frontend-dev

4. 验证修复

# 前端访问正常
curl -I https://kpl.ireborn.com.cn
# HTTP/2 200

# 后端API正常
curl https://kpl.ireborn.com.cn/health
# {"status":"healthy","service":"KaoPeiLian","version":"1.0.0"}

解决时间

2025-11-02 23:46 (约5分钟)

预防措施

  1. vite.config.ts 中预先配置所有可能使用的域名
  2. 开发环境可以考虑使用 allowedHosts: 'all' (不推荐生产环境)
  3. 文档中明确说明需要配置的域名列表

相关文件

  • /root/aiedu/kaopeilian-frontend/vite.config.ts - Vite配置文件
  • /root/aiedu/双系统部署完成报告.md - 已更新故障排查章节

当前状态

已解决 - 系统正常运行

访问地址


KPL域名500错误解决报告 (后续问题)

问题描述 (2025-11-02 16:00)

403问题解决后访问 https://kpl.ireborn.com.cn 出现新的500错误

  • GET /api/v1/users/me/recent-exams → 500
  • GET /api/v1/courses → 500
  • POST /api/v1/ability/analyze-yanji → 500

问题原因

开发数据库(kpl-mysql-dev)表结构与代码模型不一致,缺少多个表和字段:

  1. courses表缺少4个字段

    • student_count, is_new, broadcast_audio_url, broadcast_generated_at
  2. course_materials表缺少2个字段

    • created_by, updated_by
  3. exams表缺少3个字段

    • round1_score, round2_score, round3_score
  4. ability_assessments表完全不存在

最佳解决方案:完整备份恢复

与其逐个添加字段,直接用完整数据库备份恢复更快更可靠。

解决步骤

# 1. 备份当前数据库
docker exec kpl-mysql-dev mysqldump -u root -pnj861021 kaopeilian > /tmp/backup_$(date +%Y%m%d_%H%M%S).sql

# 2. 重建数据库
docker exec kpl-mysql-dev mysql -u root -pnj861021 -e "
DROP DATABASE IF EXISTS kaopeilian; 
CREATE DATABASE kaopeilian CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
"

# 3. 从备份恢复
docker exec -i kpl-mysql-dev mysql -u root -pnj861021 kaopeilian < \
  "/root/aiedu/考培练系统规划/数据库-里程碑备份/9-完成服务器测试-20251017_084942.sql"

# 4. 重启后端
docker restart kpl-backend-dev

# 5. 等待启动完成
sleep 10

验证结果

所有API测试通过

✅ GET /api/v1/users/me/recent-exams - 返回5条记录
✅ GET /api/v1/courses - 返回12门课程  
✅ POST /api/v1/ability/analyze-yanji - 分析成功

恢复后的数据库状态:

表名 行数
ability_assessments 3
course_materials 15
courses 13
exams 191
users 16

解决时间

2025-11-02 16:00-16:15 (约15分钟)

关键经验

推荐做法

  1. 优先使用完整备份恢复 - 快速、完整、可靠
  2. 定期从里程碑备份恢复开发数据库 - 保持一致性
  3. 操作前先备份 - 安全第一

避免的做法

  1. 不要逐个添加字段 - 费时费力,容易遗漏
  2. 不要在生产容器上直接操作
  3. 不要跳过备份步骤

数据库容器对应关系

域名映射:
kpl.ireborn.com.cn → kpl-backend-dev → kpl-mysql-dev (root/nj861021)
aiedu.ireborn.com.cn → kaopeilian-backend → kaopeilian-mysql (root/Kaopeilian2025!@#)

备份文件位置

  • 里程碑备份目录:/root/aiedu/考培练系统规划/数据库-里程碑备份/
  • 最新可用备份:9-完成服务器测试-20251017_084942.sql
  • 临时备份位置:/tmp/kpl_backup_*.sql

当前状态

已完全解决 - 系统功能正常