- nginx 安全加固 (CSP, HSTS, 缓存策略) - 共享 style.css - 138个页面全部接入 Co-authored-by: Hermes AI <agent@hermes>
410 lines
23 KiB
Markdown
410 lines
23 KiB
Markdown
================================================================================
|
||
博海网络科技 · 博海学习网
|
||
项目设计与规划文档 v1.0
|
||
================================================================================
|
||
|
||
编制:数字员工团队(架构师)
|
||
日期:2026-05-21
|
||
|
||
================================================================================
|
||
一、项目背景
|
||
================================================================================
|
||
|
||
公司业务以IT服务(电脑维修、打印机维修、网络工程)为基础,需要培养内部
|
||
博海学习网团队。结合记忆曲线理论,持续学习、巩固知识、快速提升技能。
|
||
|
||
核心痛点:
|
||
1. 技术知识更新速度快,学习内容零散不成体系
|
||
2. 学完就忘,缺乏科学的复习机制(艾宾浩斯记忆曲线)
|
||
3. 缺少实战练手环境,理论与实践脱节
|
||
4. 学习进度无法量化追踪
|
||
|
||
================================================================================
|
||
二、项目定位
|
||
================================================================================
|
||
|
||
【对内】公司内部工程师技能提升平台
|
||
【对外】未来可扩展为面向公众的IT技术学习平台
|
||
|
||
**核心理念**:学 → 练 → 测 → 复 → 战
|
||
学习新知识 → 动手练习 → 测试检验 → 科学复习 → 实战应用
|
||
|
||
================================================================================
|
||
三、技术架构
|
||
================================================================================
|
||
|
||
沿用现有技术栈,与售后维修系统保持一致:
|
||
|
||
┌────────────────────────────────────────────┐
|
||
│ 前端:Vue3 + Element Plus │
|
||
│ (管理后台风格,一套代码多端适配) │
|
||
└──────────────────┬─────────────────────────┘
|
||
│ HTTP/JSON
|
||
┌──────────────────▼─────────────────────────┐
|
||
│ 后端:Python FastAPI + SQLAlchemy │
|
||
│ RESTful API + WebSocket(代码沙箱) │
|
||
└──────────────────┬─────────────────────────┘
|
||
│
|
||
┌──────────────────▼─────────────────────────┐
|
||
│ 数据库:SQLite (初期) → MySQL │
|
||
└────────────────────────────────────────────┘
|
||
|
||
**辅助能力**:
|
||
- DeepSeek API:AI生成课程内容、编程题、代码评审
|
||
- 企微消息推送:学习提醒、复习提醒、进度通知
|
||
|
||
================================================================================
|
||
四、核心功能模块
|
||
================================================================================
|
||
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 博海学习网 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ ①课程 │ │ ②练习 │ │ ③测验 │ │ ④复习 │ │
|
||
│ │ 学习中心 │ │ 实战沙箱 │ │ 考试中心 │ │ 记忆曲线 │ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ ⑤进度 │ │ ⑥AI助手 │ │ ⑦管理员 │ │
|
||
│ │ 看板 │ │ 智能问答 │ │ 后台管理 │ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
|
||
4.1 课程学习中心
|
||
─────────────────────────────────────────────────────────────────
|
||
• 课程分类:前端(Vue/React/小程序)、后端(Python/FastAPI)、
|
||
数据库(MySQL/SQLite)、DevOps(Docker/Nginx/Linux)
|
||
• 课程形式:Markdown富文本文章(含代码块高亮)
|
||
• 来源:① DeepSeek AI生成课程 ② 各网站最新产品说明书整理
|
||
③ 内部经验沉淀文档
|
||
• 功能:阅读进度保存、书签标记、文章收藏
|
||
• 每篇文章支持「标签」体系,如 #Python #FastAPI #入门 #进阶
|
||
|
||
4.2 练习实战沙箱
|
||
─────────────────────────────────────────────────────────────────
|
||
• 代码沙箱:基于 Docker 的在线代码运行环境
|
||
- 前端沙箱:Vue/React 代码编辑 + 实时预览
|
||
- 后端沙箱:Python 代码执行 + 输出显示
|
||
- 数据库沙箱:在线 SQL 查询练习
|
||
• 类型:代码填空题、代码改错题、自由编码题
|
||
• 提交后自动对比预期输出或调用 AI 做代码评审
|
||
|
||
4.3 测验考试中心
|
||
─────────────────────────────────────────────────────────────────
|
||
• 题目类型:单选题、多选题、简答题
|
||
• 题目来源:AI 自动生成 + 管理员人工审核
|
||
• 每学完一个章节触发「章节测验」
|
||
• 自动计分、错题本收录、答案解析
|
||
|
||
4.4 记忆曲线复习系统(核心亮点)
|
||
─────────────────────────────────────────────────────────────────
|
||
基于艾宾浩斯遗忘曲线,每个知识点/课程设置复习时间轴:
|
||
→ 第1次复习:学习后 30 分钟
|
||
→ 第2次复习:学习后 12 小时
|
||
→ 第3次复习:学习后 1 天
|
||
→ 第4次复习:学习后 3 天
|
||
→ 第5次复习:学习后 7 天
|
||
→ 第6次复习:学习后 15 天
|
||
→ 第7次复习:学习后 30 天
|
||
|
||
• 后台自动计算下次复习时间
|
||
• 登录时首页展示「今日待复习(N)」提醒
|
||
• 企微消息推送复习提醒(可选)
|
||
• 复习方式:快速回顾 + 1-2道关联测验题
|
||
• 复习记录追踪,可视化「掌握度」指标
|
||
|
||
4.5 学习进度看板
|
||
─────────────────────────────────────────────────────────────────
|
||
• 个人学习总览:已学课程、已完成练习、正确率趋势
|
||
• 技能树可视化:前端/后端/数据库/DevOps 四大能力雷达图
|
||
• 每日学习时长统计
|
||
• 连续学习天数(打卡记录)
|
||
• 排行榜(内部竞争激励)
|
||
|
||
4.6 AI智能助手
|
||
─────────────────────────────────────────────────────────────────
|
||
• 对接 DeepSeek API
|
||
• 功能:
|
||
- 根据关键词自动生成教程内容
|
||
- 代码答疑(选中代码块,AI解释/优化建议)
|
||
- 学习路径推荐(根据已完成内容推荐下一步学什么)
|
||
- 错题解析
|
||
|
||
4.7 管理员后台
|
||
─────────────────────────────────────────────────────────────────
|
||
• 课程管理:CRUD文章、设置分类、标签管理
|
||
• 题库管理:增删改查试题、批量导入
|
||
• 用户管理:学习记录查询、学习进度统计
|
||
• 内容审核:AI生成内容审核发布
|
||
• 数据统计:平台整体学习数据、课程热度排行
|
||
|
||
================================================================================
|
||
五、数据库设计(核心表结构)
|
||
================================================================================
|
||
|
||
┌─────────────────────┐
|
||
│ 用户表 users │ ← 复用企微用户体系
|
||
├─────────────────────┤
|
||
│ id, name, wecom_id │
|
||
│ role(admin/user) │
|
||
│ created_at │
|
||
└─────────┬───────────┘
|
||
│
|
||
┌─────────▼───────────┐ ┌─────────────────────────┐
|
||
│ 课程表 courses │ │ 分类表 categories │
|
||
├─────────────────────┤ ├─────────────────────────┤
|
||
│ id, title, content │◄─────│ id, name, parent_id │
|
||
│ category_id(FK) │ │ sort_order │
|
||
│ tags, difficulty │ └─────────────────────────┘
|
||
│ source(AI/manual) │
|
||
│ status(draft/publish)│
|
||
│ view_count │
|
||
│ created_at, updated_at│
|
||
└─────────┬───────────┘
|
||
│
|
||
┌─────────▼───────────┐ ┌─────────────────────────┐
|
||
│ 学习记录表 │ │ 复习计划表 │
|
||
│ learning_records │ │ review_plans │
|
||
├─────────────────────┤ ├─────────────────────────┤
|
||
│ id, user_id(FK) │ │ id, user_id(FK) │
|
||
│ course_id(FK) │ │ course_id(FK) │
|
||
│ progress(0-100) │ │ review_stage(1-7) │
|
||
│ last_study_at │ │ next_review_at │
|
||
│ completed(boolean) │ │ last_reviewed_at │
|
||
│ created_at │ │ mastery(0-100) │
|
||
└─────────────────────┘ └─────────────────────────┘
|
||
|
||
┌─────────────────────┐ ┌─────────────────────────┐
|
||
│ 题库表 questions │ │ 测验记录表 │
|
||
├─────────────────────┤ │ quiz_records │
|
||
│ id, course_id(FK) │ ├─────────────────────────┤
|
||
│ type(single/multi/ │ │ id, user_id(FK) │
|
||
│ short_answer) │ │ question_id(FK) │
|
||
│ content(题目内容) │ │ user_answer(text) │
|
||
│ options(JSON,选择题) │ │ is_correct(boolean) │
|
||
│ answer(text) │ │ score(int) │
|
||
│ explanation(解析) │ │ reviewed(boolean) │
|
||
│ difficulty │ │ created_at │
|
||
│ created_at │ └─────────────────────────┘
|
||
└─────────────────────┘
|
||
|
||
┌─────────────────────┐
|
||
│ 代码练习表 │
|
||
│ code_exercises │
|
||
├─────────────────────┤
|
||
│ id, course_id(FK) │
|
||
│ title, description │
|
||
│ template_code(text) │
|
||
│ language(py/js/sql) │
|
||
│ expected_output │
|
||
│ test_cases(JSON) │
|
||
│ user_submissions │
|
||
│ └── user_id, code, │
|
||
│ result, passed │
|
||
│ created_at │
|
||
└─────────────────────┘
|
||
|
||
================================================================================
|
||
六、记忆曲线算法设计
|
||
================================================================================
|
||
|
||
复习阶段与间隔时间对照表:
|
||
|
||
Stage | 间隔时间 | 复习内容
|
||
───────┼────────────┼─────────────────────────
|
||
1 | 30 分钟 | 快速回顾核心知识点
|
||
2 | 12 小时 | 阅读原文关键段落
|
||
3 | 1 天 | 做2-3道关联选择题
|
||
4 | 3 天 | 简答题记忆碎片
|
||
5 | 7 天 | 综合应用题
|
||
6 | 15 天 | 完整复习+项目实战
|
||
7 | 30 天 | 体系梳理+知识图谱
|
||
|
||
掌握度计算公式(简化版):
|
||
mastery = min(100, initial_mastery + sum_review_bonus)
|
||
|
||
每次复习加分:
|
||
- Stage 1-2: +10 分
|
||
- Stage 3-4: +15 分
|
||
- Stage 5-6: +20 分
|
||
- Stage 7: +25 分
|
||
|
||
初始掌握度 = min(60, 测验正确率 * 60)
|
||
每漏复习一次回退 5 分(惩罚机制)
|
||
|
||
================================================================================
|
||
七、内容来源策略
|
||
================================================================================
|
||
|
||
7.1 DeepSeek AI 生成(主要渠道)
|
||
─────────────────────────────────────────────────────────────────
|
||
• 管理员指定关键词或主题 → AI 生成课程框架 → 人工审核 → 发布
|
||
• AI 自动生成关联测验题(选择题+简答题)
|
||
• 代码练习题目 + 测试用例 AI 生成
|
||
|
||
7.2 产品说明书整理(辅助渠道)
|
||
─────────────────────────────────────────────────────────────────
|
||
• 各技术产品最新官方文档整理(FastAPI、Vue3、Docker等)
|
||
• 按「新功能速递」「版本迁移指南」「最佳实践」等分类
|
||
• 可爬取官网文档,AI自动摘要和结构化
|
||
|
||
7.3 内部经验沉淀
|
||
─────────────────────────────────────────────────────────────────
|
||
• 工程师实际踩坑记录 → 转化为「实战经验」文章
|
||
• 公司项目中用到的技术方案复盘
|
||
|
||
================================================================================
|
||
八、部署方案
|
||
================================================================================
|
||
|
||
• 子域名:learn.sxbh.ltd(暂定,需DNS添加A记录)
|
||
• 后端端口:8001(与 repair 系统8000端口错开)
|
||
• 部署方式:systemd 管理 FastAPI 进程
|
||
• 访问:https://learn.sxbh.ltd → nginx → 127.0.0.1:8001
|
||
• 数据备份:每日自动备份 SQLite 数据库到 /root/backups/
|
||
|
||
nginx 配置示例:
|
||
```
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name learn.sxbh.ltd;
|
||
|
||
ssl_certificate /etc/letsencrypt/live/sxbh.ltd/fullchain.pem;
|
||
ssl_certificate_key /etc/letsencrypt/live/sxbh.ltd/privkey.pem;
|
||
|
||
client_max_body_size 50m;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:8001;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
}
|
||
```
|
||
|
||
================================================================================
|
||
九、开发计划(三阶段)
|
||
================================================================================
|
||
|
||
┌──── 第一阶段:框架搭建 + 核心功能(预计 5 天)────┐
|
||
│ Day 1: 项目初始化(后端+前端脚手架、数据库建表) │
|
||
│ Day 2: 课程学习中心(CRUD + 文章浏览 + 阅读进度) │
|
||
│ Day 3: 测验系统(题库管理 + 答题 + 自动评分) │
|
||
│ Day 4: 记忆曲线复习系统(算法 + 复习提醒 + 进度) │
|
||
│ Day 5: 部署上线(nginx配置 + 子域名 + 数据填充) │
|
||
└─────────────────────────────────────────────────────┘
|
||
|
||
┌──── 第二阶段:完善功能(预计 5 天)──────────────────┐
|
||
│ Day 6-7: 代码沙箱(Docker在线运行环境) │
|
||
│ Day 8: 学习看板 + 技能雷达图 + 排行榜 │
|
||
│ Day 9: AI智能助手(DeepSeek对接) │
|
||
│ Day 10: 管理员后台完善 + 企微消息推送 │
|
||
└─────────────────────────────────────────────────────┘
|
||
|
||
┌──── 第三阶段:数据填充 + 持续优化──────────────────┐
|
||
│ 持续用 AI 生成课程内容 │
|
||
│ 整理各技术产品最新说明书入库 │
|
||
│ 用户反馈优化迭代 │
|
||
│ 未来考虑:扩展为对外公开平台 │
|
||
└─────────────────────────────────────────────────────┘
|
||
|
||
================================================================================
|
||
十、项目目录结构
|
||
================================================================================
|
||
|
||
/root/fullstack-learn/
|
||
├── backend/ # FastAPI 后端
|
||
│ ├── app/
|
||
│ │ ├── api/ # API 路由
|
||
│ │ │ ├── __init__.py
|
||
│ │ │ ├── courses.py # 课程相关
|
||
│ │ │ ├── quizzes.py # 测验相关
|
||
│ │ │ ├── reviews.py # 复习相关
|
||
│ │ │ ├── sandbox.py # 代码沙箱
|
||
│ │ │ ├── progress.py # 学习进度
|
||
│ │ │ ├── ai_assist.py # AI 助手
|
||
│ │ │ └── admin.py # 管理后台
|
||
│ │ ├── models/ # SQLAlchemy 模型
|
||
│ │ │ ├── __init__.py
|
||
│ │ │ ├── user.py
|
||
│ │ │ ├── course.py
|
||
│ │ │ ├── quiz.py
|
||
│ │ │ ├── review.py
|
||
│ │ │ └── exercise.py
|
||
│ │ ├── __init__.py
|
||
│ │ ├── main.py # 主应用入口
|
||
│ │ ├── database.py # 数据库配置
|
||
│ │ ├── schemas.py # Pydantic 模型
|
||
│ │ └── utils/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── memory_curve.py # 记忆曲线算法
|
||
│ │ └── ai_client.py # DeepSeek API 客户端
|
||
│ ├── requirements.txt
|
||
│ ├── pyproject.toml
|
||
│ └── run.py
|
||
├── frontend/ # Vue3 前端
|
||
│ ├── src/
|
||
│ │ ├── views/
|
||
│ │ │ ├── Courses.vue # 课程列表
|
||
│ │ │ ├── CourseDetail.vue # 课程详情/学习
|
||
│ │ │ ├── Quiz.vue # 测验
|
||
│ │ │ ├── Review.vue # 复习中心
|
||
│ │ │ ├── Sandbox.vue # 代码沙箱
|
||
│ │ │ ├── Dashboard.vue # 学习看板
|
||
│ │ │ └── Admin*.vue # 管理后台
|
||
│ │ └── ...
|
||
│ ├── package.json
|
||
│ └── vite.config.ts
|
||
├── PROJECT_DESIGN.md # 本设计文档
|
||
├── docker-compose.yml # 可选 Docker 部署
|
||
└── README.md
|
||
|
||
================================================================================
|
||
十一、需要注意的风险与事项
|
||
================================================================================
|
||
|
||
1. 代码沙箱安全:Docker 容器必须隔离,防止恶意代码逃逸
|
||
→ 方案:限制 CPU/内存,禁用网络,超时自动销毁
|
||
2. 内容版权:爬取其他网站文档注意遵守 robots.txt 和版权声明
|
||
→ 方案:优先AI原创生成,引用来源注明出处
|
||
3. AI生成质量:DeepSeek 生成的内容需要人工审核后再发布
|
||
→ 方案:所有课程默认 draft 状态,审核后才 publish
|
||
4. 数据备份:学习记录是用户核心资产
|
||
→ 方案:每日定时备份数据库
|
||
5. 记忆曲线不要太烦人:复习提醒频率要合理
|
||
→ 方案:可配置复习提醒方式(不提醒/每日/仅站内)
|
||
|
||
================================================================================
|
||
附:记忆曲线算法核心伪代码
|
||
================================================================================
|
||
|
||
```python
|
||
def calculate_next_review(current_stage: int, completed: bool) -> dict:
|
||
"""计算下一次复习时间"""
|
||
intervals = {
|
||
0: timedelta(minutes=30), # 学完后30分钟
|
||
1: timedelta(hours=12), # 第1次复习后12小时
|
||
2: timedelta(days=1), # 第2次复习后1天
|
||
3: timedelta(days=3), # 第3次复习后3天
|
||
4: timedelta(days=7), # 第4次复习后7天
|
||
5: timedelta(days=15), # 第5次复习后15天
|
||
6: timedelta(days=30), # 第6次复习后30天
|
||
}
|
||
if current_stage >= 6:
|
||
return {"is_completed": True, "mastery": 100}
|
||
|
||
next_stage = current_stage + 1
|
||
next_review = datetime.now() + intervals[current_stage]
|
||
return {
|
||
"next_stage": next_stage,
|
||
"next_review_at": next_review,
|
||
"bonus_score": [10, 10, 15, 15, 20, 20, 25][current_stage]
|
||
}
|
||
```
|
||
|
||
================================================================================
|
||
文档结束 · 博海网络科技数字员工团队
|
||
================================================================================
|