brunoandClaude 2848a75aa2
CI/CD Pipeline / Build Backend Image (push) Failing after 0s
CI/CD Pipeline / Build Frontend Image (push) Failing after 0s
CI/CD Pipeline / Deploy to Kubernetes (push) Has been skipped
feat: 配置完整 CI/CD 流程和 Kubernetes 部署
## 🚀 CI/CD 流程

### Gitea Actions Workflow
- 自动构建 Backend 和 Frontend Docker 镜像
- 推送镜像到 Harbor (192.168.1.83:8080)
- 自动部署到 Kubernetes learn namespace
- 支持滚动更新和健康检查

### Docker 镜像
- **Backend**: Python 3.11 + FastAPI
  - 多阶段构建优化
  - 健康检查探针
  - 生产环境优化
- **Frontend**: Node 18 + Vue 3 + Nginx
  - 多阶段构建
  - Gzip 压缩
  - 静态资源缓存优化

## ☸️ Kubernetes 部署

### 基础设施
- Namespace: learn
- PostgreSQL 15 (持久化存储)
- ConfigMap 和 Secret 管理
- Service 和 Ingress 配置

### 应用部署
- Backend: 2 副本,资源限制
- Frontend: 2 副本,Nginx 服务
- 健康检查:Liveness + Readiness Probes
- 滚动更新策略

### 访问配置
- Ingress: pager.learn.local
- Frontend: http://pager.learn.local
- API: http://pager.learn.local/api
- API Docs: http://pager.learn.local/api/docs

## 📊 Grafana 监控

### ServiceMonitor
- Prometheus 自动服务发现
- Backend、Frontend、PostgreSQL 指标采集
- 30s 采集间隔

### Dashboard 面板
- HTTP 请求速率和响应时间
- Pod CPU 和内存使用
- 数据库连接数
- 错误率 (4xx/5xx)
- Pod 重启次数
- 磁盘使用率

## 📦 新增文件

### Docker
- `backend/Dockerfile` - 后端镜像构建
- `frontend/Dockerfile` - 前端镜像构建
- `frontend/nginx.conf` - Nginx 配置
- `.dockerignore` - 构建优化

### CI/CD
- `.gitea/workflows/ci-cd.yaml` - Gitea Actions 配置

### Kubernetes
- `k8s/namespace.yaml` - Namespace 定义
- `k8s/configmap.yaml` - 应用配置
- `k8s/secret.yaml` - 敏感信息
- `k8s/postgres.yaml` - PostgreSQL 部署
- `k8s/deployment.yaml` - 应用部署
- `k8s/service.yaml` - Service 配置
- `k8s/ingress.yaml` - Ingress 路由

### 监控
- `k8s/monitoring/servicemonitor.yaml` - Prometheus 采集
- `k8s/monitoring/grafana-dashboard.json` - Dashboard 定义
- `k8s/monitoring/install-dashboard.sh` - 安装脚本

### 文档和脚本
- `CICD_DEPLOY.md` - 完整部署文档
- `deploy.sh` - 快速部署脚本

## 🔧 配置要求

### Gitea Secrets
- `HARBOR_PASSWORD`: Harbor 密码
- `KUBECONFIG`: K8s 配置 (base64 编码)

### Harbor
- 项目: pager
- 认证: admin/admin123

### Kubernetes
- 版本: 1.24+
- Namespace: learn
- Ingress Controller: nginx

## 📝 使用说明

### 自动部署
```bash
git push origin master
# 自动触发 CI/CD 流程
```

### 手动部署
```bash
./deploy.sh
```

### 查看状态
```bash
kubectl get pods -n learn
kubectl logs -f -l app=pager-backend -n learn
```

### 监控
1. 部署 ServiceMonitor: `kubectl apply -f k8s/monitoring/`
2. 安装 Grafana Dashboard: `cd k8s/monitoring && ./install-dashboard.sh`

## 🎯 特性

- ✅ 自动化 CI/CD 流程
- ✅ Docker 多阶段构建优化
- ✅ Kubernetes 高可用部署
- ✅ 滚动更新零停机
- ✅ 健康检查和自动恢复
- ✅ Prometheus + Grafana 监控
- ✅ 完整的故障排查文档

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2025-11-22 22:56:31 +08:00
2025-11-02 22:44:18 +08:00
2025-11-02 22:44:18 +08:00
2025-11-02 22:44:18 +08:00
2025-11-02 22:44:18 +08:00
2025-11-02 22:44:18 +08:00
2025-11-02 22:44:18 +08:00

学习助手 Pro 部署指南

这是一个基于 FastAPI + Vue3 的智能试卷管理与学习跟踪系统,支持PDF试卷智能解析、题目自动提取、错题管理和学习统计等功能。

✨ 核心功能

📄 智能试卷管理

  • PDF试卷上传和预览
  • 多学科试卷分类管理(数学、语文、英语等)
  • 试卷信息自动识别和标注

🔍 题目智能提取

  • AI驱动的PDF文本层解析,速度快准确率高(95%+)
  • OCR备份解析,处理扫描版PDF
  • 自动识别题目类型(选择题、填空题、解答题等)
  • 智能提取题目图片(几何图形、函数图像等)
  • 数学符号自动修复和优化

📊 错题管理系统

  • 智能错题收集和分类
  • 艾宾浩斯遗忘曲线复习提醒
  • 个性化学习计划生成
  • 错题复习统计和进度跟踪

📈 学习数据分析

  • 详细的学习进度统计
  • 多维度数据可视化
  • 学科强弱项分析
  • 学习效率评估

🚀 性能特点

  • 超快解析速度: 0.01秒完成一页试卷解析
  • 高准确率: 文本识别准确率95%+,性能提升2900倍
  • 智能图片提取: 自动关联题目与图片,完美显示数学图形
  • 热加载开发: 前后端完整热加载支持

🚀 快速启动

后端启动

  1. 进入后端目录:
cd backend
  1. 安装依赖:
pip install -r requirements.txt
  1. 启动后端服务:
python main.py

后端将在 http://0.0.0.0:8888 启动

前端启动

  1. 进入前端目录:
cd frontend
  1. 安装依赖:
npm install
  1. 启动开发服务器:
npm run dev

前端将在 http://localhost:3000 启动 (如端口被占用会自动选择其他端口)

📦 生产环境部署

方法1:使用 Docker (推荐)

创建 docker-compose.yml:

version: '3.8'
services:
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
    environment:
      - DATABASE_URL=sqlite:///./data/wordmaster.db
  
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend

启动:

docker-compose up -d

方法2:使用 PM2

  1. 安装 PM2:
npm install -g pm2
  1. 启动后端:
pm2 start "uvicorn main:app --host 0.0.0.0 --port 8000" --name wordmaster-backend
  1. 构建并启动前端:
cd frontend
npm run build
pm2 serve dist 3000 --name wordmaster-frontend

方法3:使用 Nginx 反向代理

Nginx 配置示例:

server {
    listen 80;
    server_name your-domain.com;

    # 前端静态文件
    location / {
        root /path/to/frontend/dist;
        try_files $uri $uri/ /index.html;
    }

    # API 反向代理
    location /api {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

🌐 远程访问配置

云服务器部署

  1. 阿里云/腾讯云/AWS:

    • 创建云服务器实例
    • 配置安全组,开放 8000 和 3000 端口
    • 使用上述部署方法
  2. 域名配置:

    • 购买域名并解析到服务器IP
    • 配置 HTTPS (使用 Let's Encrypt)

内网穿透 (开发测试)

使用 ngrok 进行内网穿透:

# 安装 ngrok
npm install -g ngrok

# 穿透后端
ngrok http 8000

# 穿透前端
ngrok http 3000

📚 初中英语单词导入

系统已内置初中英语单词,启动后会自动导入。也可以手动导入:

1. 使用 API 导入

curl -X POST "http://localhost:8000/api/words/import" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@initial_words.csv"

2. 使用前端界面导入

  1. 登录系统
  2. 进入"词库管理"页面
  3. 点击"导入单词"按钮
  4. 选择 CSV 或 JSON 文件

3. CSV 格式示例

word,meaning,example,phrases,level
abandon,放弃,He decided to abandon the project,abandon hope;abandon ship,middle_school
ability,能力,She has the ability to learn quickly,have ability;ability to do,middle_school

4. JSON 格式示例

[
  {
    "word": "abandon",
    "meaning": "放弃",
    "example": "He decided to abandon the project",
    "phrases": ["abandon hope", "abandon ship"],
    "level": "middle_school"
  }
]

🔧 环境变量配置

后端环境变量 (可选):

# .env 文件
SECRET_KEY=your-super-secret-key-here
DATABASE_URL=sqlite:///./wordmaster.db
ACCESS_TOKEN_EXPIRE_MINUTES=30

📊 功能特性

🧠 学习算法

  • SM-2 间隔重复算法:个性化复习间隔
  • 主动回忆模式:输入答案,模糊匹配
  • 多种学习模式:抽认卡、选择题、完形填空
  • 双向练习:英→中、中→英自动切换

📈 智能分析

  • 学习统计:准确率、连续天数、学习进度
  • 顽固词检测:自动标记难记单词
  • 记忆曲线:可视化复习预测

🎯 用户体验

  • 响应式设计:支持电脑、平板、手机
  • 语音朗读:TTS 发音功能
  • 快捷键支持:键盘操作更高效
  • 离线缓存:渐进式 Web 应用

🛠️ 技术栈

后端

  • FastAPI:高性能 Python Web 框架
  • SQLAlchemy:ORM 数据库操作
  • JWT:用户认证
  • Pydantic:数据验证

前端

  • Vue 3:组合式 API
  • Element Plus:UI 组件库
  • Pinia:状态管理
  • Vite:构建工具

数据库

  • SQLite:轻量级数据库(可升级到 PostgreSQL/MySQL)

🔒 安全建议

  1. 修改默认密钥:
SECRET_KEY = "your-production-secret-key-very-long-and-random"
  1. CORS 配置:
allow_origins=["https://your-domain.com"]  # 限制具体域名
  1. HTTPS 部署:使用 SSL 证书

  2. 数据库安全:定期备份,访问控制

📱 移动端适配

系统已完全适配移动端,支持:

  • 触摸手势操作
  • 响应式布局
  • PWA 渐进式应用
  • 离线使用

🤝 技术支持

如遇问题,请检查:

  1. 端口是否被占用
  2. 防火墙设置
  3. Node.js 和 Python 版本
  4. 网络连接状态

祝您学习愉快!🎉

S
Description
No description provided
Readme
4.5 MiB
Languages
Vue 56.9%
Python 28.4%
Shell 7.1%
HTML 5.9%
JavaScript 1.6%
Other 0.1%