logo
0
0
WeChat Login
docs: 完善项目文档和README内容

云原生在线考试系统

📖 项目概述

这是一个基于云原生架构的在线考试系统,采用前后端分离设计,支持考生考试、考官出题与阅卷等功能。系统使用 Docker 容器化部署,具有高可用、易扩展的特点。

✨ 核心特性

  • ✅ 用户认证与授权(考生/考官双角色)
  • ✅ 试卷管理与题目编辑
  • ✅ 在线考试与自动阅卷
  • ✅ 考试结果查看与分析
  • ✅ 健康检查与监控
  • ✅ 容器化部署(Docker + Docker Compose)
  • ✅ 数据持久化(MySQL + Redis)

🏗️ 系统架构

┌─────────────────┐ ┌─────────────────┐ │ Frontend │ │ Backend │ │ (Vue 3 + Vite) │◄────────►│ (Go + Gin) │ │ :3000 │ │ :8080 │ └─────────────────┘ └─────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ MySQL │ │ Redis │ │Prometheus│ │ :3306 │ │ :6379 │ │ :9090 │ └──────────┘ └──────────┘ └──────────┘

🚀 快速启动

./start.sh

启动脚本会自动完成以下操作:

  1. 构建 Docker 镜像(frontend, backend)
  2. 启动所有服务容器(MySQL, Redis, Backend, Frontend)
  3. 初始化数据库结构和种子数据
  4. 配置网络和服务间通信

🌐 服务访问地址

服务地址说明
📱 前端应用http://localhost:3000Vue 3 用户界面
🧪 后端APIhttp://localhost:8080Go RESTful API
💚 健康检查http://localhost:8080/healthz服务健康状态
📊 指标监控http://localhost:8080/metricsPrometheus 指标
📈 Prometheushttp://localhost:9090监控面板

🔐 默认账号

系统已创建以下测试账号:

角色用户名密码密钥
考生testuserpassword123kotres-gyxfa3-vywmyQ
考官examineradmin123mazmyk-gubbit-pohFo1

⚠️ 生产环境请修改默认密码和密钥


📋 技术栈

前端技术

  • 框架: Vue 3.3+ (Composition API)
  • 语言: TypeScript 5.0+
  • 构建: Vite 5.0+
  • 状态管理: Pinia 2.1+
  • 路由: Vue Router 4.2+
  • 样式: Tailwind CSS 3.4+
  • HTTP: Axios 1.6+
  • Web 服务器: Nginx Alpine

后端技术

  • 语言: Go 1.24
  • Web 框架: Gin
  • ORM: 标准 database/sql
  • 数据库: MySQL 8.0
  • 缓存: Redis 7 Alpine
  • 认证: JWT (golang-jwt/jwt)
  • 日志: Zap Logger
  • 监控: Prometheus

DevOps

  • 容器: Docker
  • 编排: Docker Compose
  • CI/CD: CNB (Cloud Native Build)
  • 镜像仓库: CNB Docker Registry

📁 项目结构

/workspace/ ├── cloud-native-exam-system/ # 主项目目录 │ ├── backend/ # Go 后端服务 │ │ ├── cmd/api/ # API 服务入口 │ │ │ └── main.go # 应用启动 │ │ ├── app/ # 业务逻辑层 │ │ │ ├── repo/ # 数据访问层 (10个文件) │ │ │ ├── service/ # 业务服务层 (9个文件) │ │ │ └── store/ # 状态存储 (Redis Token) │ │ ├── domain/ # 领域模型 │ │ │ ├── model/ # 数据模型 │ │ │ ├── exam.go # 考试模型 │ │ │ ├── paper.go # 试卷模型 │ │ │ └── question.go # 题目模型 │ │ ├── handler/ # HTTP 处理器 │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── auth.go # 认证处理器 │ │ │ ├── exam.go # 考试处理器 │ │ │ ├── paper.go # 试卷处理器 │ │ │ ├── submit.go # 提交处理器 │ │ │ └── result.go # 结果处理器 │ │ ├── middleware/ # 中间件 │ │ │ ├── auth.go # JWT 认证 │ │ │ ├── logger.go # 日志记录 │ │ │ ├── recover.go # 异常恢复 │ │ │ ├── request_id.go # 请求 ID │ │ │ └── require_role.go # 角色验证 │ │ ├── pkg/ # 公共包 │ │ │ ├── errno/ # 错误码定义 │ │ │ └── resp/ # 统一响应格式 │ │ ├── migrations/ # 数据库迁移 │ │ │ ├── 001_init_schema.sql │ │ │ └── 002_seed_data.sql │ │ ├── configs/ # 配置文件 │ │ ├── deploy/ # 部署配置 │ │ ├── Dockerfile # 后端镜像构建 │ │ ├── go.mod # Go 模块依赖 │ │ ├── Makefile # 构建脚本 │ │ └── .env # 环境变量 │ ├── frontend/ # Vue 3 前端应用 │ │ ├── src/ │ │ │ ├── api/ # API 客户端 │ │ │ │ ├── auth.ts │ │ │ │ ├── exam.ts │ │ │ │ ├── paper.ts │ │ │ │ ├── submission.ts │ │ │ │ └── client.ts │ │ │ ├── components/ # 公共组件 │ │ │ │ ├── Navbar.vue │ │ │ │ ├── Footer.vue │ │ │ │ ├── Toast.vue │ │ │ │ ├── AnswerSelector.vue │ │ │ │ └── QuestionEditorModal.vue │ │ │ ├── router/ # 路由配置 │ │ │ │ └── index.ts │ │ │ ├── store/ # Pinia 状态管理 │ │ │ │ ├── auth.ts │ │ │ │ └── index.ts │ │ │ ├── views/ # 页面视图 │ │ │ │ ├── candidate/ # 考生端 │ │ │ │ │ ├── Dashboard.vue │ │ │ │ │ ├── Taking.vue │ │ │ │ │ └── Submissions.vue │ │ │ │ ├── examiner/ # 考官端 │ │ │ │ │ ├── Dashboard.vue │ │ │ │ │ ├── Exams.vue │ │ │ │ │ ├── Papers.vue │ │ │ │ │ ├── PaperEditor.vue │ │ │ │ │ └── Results.vue │ │ │ │ ├── Login.vue │ │ │ │ ├── Register.vue │ │ │ │ └── NotFound.vue │ │ │ ├── types/ # TypeScript 类型 │ │ │ ├── utils/ # 工具函数 │ │ │ ├── App.vue │ │ │ └── main.ts │ │ ├── public/ # 静态资源 │ │ ├── Dockerfile # 前端镜像构建 │ │ ├── nginx.conf # Nginx 配置 │ │ ├── vite.config.ts # Vite 构建配置 │ │ ├── tailwind.config.ts # Tailwind 配置 │ │ └── package.json # NPM 依赖 │ └── deploy/ # 部署配置 │ └── migrations/ # 完整迁移脚本 ├── images/ # 自定义镜像 │ ├── mysql/ # MySQL 镜像 │ └── redis/ # Redis 镜像 ├── docs/ # 文档目录 │ └── PROJECT_DOCUMENTATION.md # 详细项目文档 ├── docker-compose.yml # CI/CD 配置 ├── start.sh # 启动脚本 ├── Dockerfile # 根 Dockerfile └── README.md # 项目说明

🔄 业务流程

考生流程

1. 用户登录/注册 ↓ 2. 查看可用考试列表 ↓ 3. 选择考试开始答题(倒计时开始) ↓ 4. 答题(单选/多选/判断题) ↓ 5. 提交答卷 ↓ 6. 查看成绩与详细结果

考官流程

1. 用户登录/注册 ↓ 2. 创建试卷 ↓ 3. 添加题目(支持多种题型) ↓ 4. 发布考试(设置时间窗口) ↓ 5. 查看考生提交记录 ↓ 6. 查看成绩统计与分析

🛑 停止服务

docker compose down

如果需要删除所有数据卷:

docker compose down -v

🔧 API 接口

认证接口

方法路径描述权限
POST/auth/login用户登录公开
POST/auth/register用户注册公开
GET/auth/me获取当前用户需认证
POST/auth/logout用户登出需认证

试卷管理

方法路径描述权限
POST/papers创建试卷需认证
GET/papers试卷列表教师角色
GET/papers/:id试卷详情教师角色
POST/papers/change/:id更新试卷教师角色
DELETE/papers/:id删除试卷教师角色

考试管理

方法路径描述权限
POST/exams创建考试需认证
GET/exams考试列表教师角色
GET/exams/:id考试详情需认证
GET/exams/available可用考试需认证
POST/exams/:id/publish发布考试需认证
POST/exams/:id/close关闭考试教师角色
DELETE/exams/:id删除考试教师角色

答题提交

方法路径描述权限
POST/exams/:id/submit提交答案需认证

成绩查询

方法路径描述权限
GET/results成绩列表需认证

健康检查

方法路径描述
GET/healthz健康检查
GET/readyz就绪检查

📊 数据库设计

核心数据表

表名说明关键字段
users用户表id, username, password_hash, role, status
paper试卷表id, name, total_score
question题目表id, paper_id, type, score, content, answer_key
exam考试表id, title, status, start_at, end_at, paper_id
submission提交记录表id, exam_id, student_id, status, submitted_at
answer答案表id, submission_id, question_id, value
result成绩表id, submission_id, total_score

🔧 故障排查

端口冲突

如果提示端口被占用:

# 查看占用进程 lsof -i :3000 # 前端端口 lsof -i :8080 # 后端端口 lsof -i :3306 # MySQL 端口 lsof -i :6379 # Redis 端口 # 强制结束进程 sudo kill -9 <PID>

镜像构建失败

清理后重新构建:

docker compose down --rmi all ./start.sh

数据库初始化失败

检查数据库配置和 SQL 文件:

# 查看 MySQL 日志 docker compose logs mysql # 重置数据库(会删除所有数据) docker compose down -v ./start.sh

前端无法访问后端

如果前端显示"后端服务未启动":

  1. 检查后端是否正常运行:curl http://localhost:8080/healthz
  2. 查看后端日志:docker compose logs backend
  3. 检查网络连接:docker network ls

登录失败

如果遇到登录问题:

  1. 确认使用正确的用户名和密码
  2. 检查后端日志:docker compose logs backend
  3. 清除浏览器缓存和 localStorage
  4. 使用默认测试账号验证系统状态

🎯 项目特点

  1. 云原生架构 - 完整的容器化部署,支持 Kubernetes 扩展
  2. 前后端分离 - 独立开发部署,API 驱动
  3. RESTful 设计 - 标准化的 REST API 接口
  4. 高可用性 - 健康检查、自动恢复、监控告警
  5. 易维护性 - 清晰的分层架构、完善的文档
  6. 可扩展性 - 模块化设计、微服务友好
  7. 类型安全 - TypeScript + Go 强类型语言
  8. 现代技术栈 - Vue 3 Composition API + Go Gin

📝 开发规范

Git 提交规范

feat: 新功能 fix: 修复 bug docs: 文档更新 style: 代码格式调整 refactor: 重构 test: 测试相关 chore: 构建/工具链相关

代码规范

  • Go: 遵循 Go 官方规范,使用 gofmt 格式化
  • TypeScript: 使用 ESLint + Prettier
  • 组件: 单一职责原则,组件复用
  • API: RESTful 设计规范,统一响应格式

📚 扩展阅读

详细项目文档请查看:docs/PROJECT_DOCUMENTATION.md

包含内容:

  • 详细的项目架构说明
  • 后端分层架构模式
  • 前端组件化开发
  • 数据库设计详解
  • 部署配置说明
  • CI/CD 流程

最后更新: 2026-02-21