# KPL域名访问问题解决报告 ## 问题描述 访问 https://kpl.ireborn.com.cn 返回 403 Forbidden 错误 ## 问题原因 Vite开发服务器默认只允许特定域名访问。在 `vite.config.ts` 的 `allowedHosts` 配置中缺少 `kpl.ireborn.com.cn` 域名,导致请求被拒绝。 ## 解决步骤 ### 1. 定位问题 ```bash # 发现容器和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`: ```typescript server: { allowedHosts: [ 'aiedu.ireborn.com.cn', 'kpl.ireborn.com.cn', // ← 添加这一行 'kaopeilian-frontend-dev', 'kpl-frontend-dev', // ← 添加这一行 '120.79.247.16', 'localhost' ], // ... 其他配置 } ``` ### 3. 重启容器 ```bash docker restart kpl-frontend-dev ``` ### 4. 验证修复 ```bash # 前端访问正常 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` - 已更新故障排查章节 ## 当前状态 ✅ 已解决 - 系统正常运行 ## 访问地址 - 开发系统: https://kpl.ireborn.com.cn (支持热重载) - 演示系统: https://aiedu.ireborn.com.cn (生产模式) --- # 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表完全不存在** ## 最佳解决方案:完整备份恢复 与其逐个添加字段,直接用完整数据库备份恢复更快更可靠。 ### 解决步骤 ```bash # 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测试通过: ```bash ✅ 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` ## 当前状态 ✅ 已完全解决 - 系统功能正常