# kvmManager **Repository Path**: luonannet/kvmManager ## Basic Information - **Project Name**: kvmManager - **Description**: 适合高校ICT专业,特别是云计算专业的教学管理平台,包含主要目的是把学生创建云主机的功能交给学生自己管理, - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-10 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 教育云平台 - 项目功能说明 ## 项目概述 基于 Go + Gin + MySQL 开发的教育云平台,采用 Center-Agent 分布式架构,提供虚拟机管理、在线考试等核心功能。 **技术栈**: Go | Gin | MySQL | WebSocket | Go Templates | noVNC --- ## 核心功能模块 ### 一、用户与权限管理 #### 1.1 三种角色 | 角色 | 权限范围 | 访问路径 | |------|---------|---------| | **管理员 (admin)** | 全局管理:用户、班级、服务器、镜像、IP池、日志 | `/admin/*` | | **教师 (teacher)** | 管理负责班级:学生、考试 | `/teacher/*` | | **学生 (student)** | 个人资源:虚拟机、考试答题 | `/student/*` | #### 1.2 认证机制 - Cookie 会话认证(`kvm_session`) - 角色权限中间件控制访问 - Agent Bearer Token 认证 --- ### 二、虚拟机管理 (VM) #### 2.1 学生端 VM 功能 - ✅ 创建虚拟机(选择镜像、配置 CPU/内存/磁盘) - ✅ 查看虚拟机列表和状态 - ✅ 启动/停止/重启虚拟机 - ✅ 删除虚拟机(需先停止) - ✅ VNC 远程控制台(基于 noVNC) - ✅ 实时进度显示(创建过程 0-100%) - ✅ 资源配额管理 #### 2.2 管理员 VM 功能 - ✅ 查看所有学生的虚拟机 - ✅ 强制删除任何虚拟机 - ✅ 控制虚拟机状态 #### 2.3 VM 创建流程 ``` 学生请求 → 负载均衡选择服务器 → 分配IP → 分配VNC端口 → 创建数据库记录 → WebSocket/HTTP通知Agent → Agent创建VM → 实时进度回传 → 学生端显示 ``` #### 2.4 负载均衡算法 - CPU 使用率权重: 35% - 内存使用率权重: 35% - 磁盘使用率权重: 20% - VM 数量均衡权重: 10% --- ### 三、服务器管理 - ✅ 添加/编辑/删除物理服务器 - ✅ 服务器状态监控(在线/离线/维护) - ✅ 系统资源统计(CPU、内存、磁盘) - ✅ Agent WebSocket 连接管理 - ✅ 心跳检测与自动状态同步 --- ### 四、镜像管理 #### 4.1 支持的镜像类型 | 类型 | 说明 | 用途 | |------|------|------| | **系统模板** | 预配置的系统模板 | 快速创建VM | | **ISO 光盘镜像** | 操作系统安装镜像 | 安装操作系统 | | **QCOW2 磁盘镜像** | QEMU 磁盘镜像 | 直接使用或作为基础磁盘 | #### 4.2 支持的操作系统 - CentOS 7 - Rocky Linux 10 - openEuler 25 - Ubuntu 25 - Windows 11 #### 4.3 管理功能 - ✅ 上传镜像文件 - ✅ 编辑镜像信息 - ✅ 删除镜像文件 - ✅ 启用/禁用镜像 --- ### 五、班级管理 #### 5.1 管理员功能 - ✅ 创建/编辑/删除班级 - ✅ 绑定/解绑教师 - ✅ 批量导入学生(CSV) - ✅ 查看班级学生列表 - ✅ 调整学生虚拟机配额 #### 5.2 教师功能 - ✅ 查看负责的班级 - ✅ 管理班级学生 - ✅ 导入学生名单 - ✅ 查看学生虚拟机使用情况 - ✅ 重置学生密码 --- ### 六、考试系统 ⭐ #### 6.1 学生端 - 考试中心 **考试列表** - ✅ 显示所属班级的所有考试 - ✅ 展示完整信息:标题、简介、总分、考试时间、出卷人、出卷时间、时长 - ✅ 显示提交状态(待答题/已提交) **答题功能** - ✅ 支持五种题型: - 单选题(单选按钮) - 多选题(复选框) - 判断题(正确/错误) - 填空题(文本输入) - 问答题(大文本输入) - ✅ 倒计时功能(剩余5分钟警告) - ✅ 实时进度条 - ✅ 临时保存(手动 + 60秒自动保存) - ✅ 一次性提交(提交后不可修改) - ✅ 时间到达自动提交 **核心规则** - ❌ 无正确答案显示 - ❌ 无系统自动判分 - ❌ 不显示分数 - ✅ 只存储学生答案 #### 6.2 教师端 - 考试管理 **创建考试** - ✅ 设置考试信息:标题、简介、总分、考试时间、时长 - ✅ 系统自动记录:出卷人、出卷时间 - ✅ 选择发布班级 **在线组卷** - ✅ 添加题目(五种题型) - ✅ 单选题/多选题:支持动态添加选项 - ✅ 判断题:无需添加选项 - ✅ 填空题/问答题:无需添加选项 - ✅ 设置每题分值 - ✅ 实时统计题目总数和总分 **考试管理** - ✅ 编辑考试基本信息 - ✅ 发布考试(学生可见) - ✅ 归档考试(结束考试) - ✅ 删除考试(含题目和答卷) - ✅ 按班级筛选考试 **查看答卷** - ✅ 查看所有学生的答卷列表 - ✅ 显示提交状态和提交时间 - ✅ 查看单个学生的完整答卷 - ✅ 原样展示学生答案(客观题+主观题) - ✅ 统计已答题数和未答题数 #### 6.3 考试状态流转 ``` 草稿 → 发布 → 学生答题 → 提交 → 归档 ``` #### 6.4 AI 评分接口(预留) - ✅ 配置文件支持 DeepSeek API - ✅ AI 评分服务代码已实现 - ✅ 默认关闭,可按需启用 - ✅ 配置位置:`config.toml` 的 `[ai]` 段 --- ### 七、IP 地址管理 - ✅ IP 池管理(添加/删除 IP) - ✅ 批量添加 IP - ✅ IP 状态管理(可用/已用/保留) - ✅ 自动分配 IP 给虚拟机 - ✅ 删除 VM 时自动释放 IP --- ### 八、系统日志 - ✅ 记录用户操作日志 - ✅ 记录操作目标(用户、VM、班级等) - ✅ 记录操作详情 - ✅ 按时间排序查看 --- ### 九、个人中心 - ✅ 查看个人信息 - ✅ 修改密码 - ✅ 更新个人资料 --- ## 技术架构 ### 架构模式 ``` 用户浏览器 | | HTTP/WebSocket (8080) v ┌─────────────────────┐ │ Center 服务 │ │ - Web 界面 │ │ - 业务逻辑 │ │ - 数据库 │ │ - WebSocket 管理 │ └──────────┬──────────┘ | WebSocket/HTTP v ┌─────────────────────┐ │ Agent 服务 │ │ - KVM/libvirt 控制 │ │ - VM 创建/删除 │ │ - VNC 代理 │ │ - 资源监控 │ └─────────────────────┘ ``` ### 代码结构 ``` myEdu/ ├── build/ # 部署目录(可直接拷贝到目标服务器) │ ├── center-linux-amd64-* # Center 二进制(各发行版) │ ├── agent-linux-amd64-* # Agent 二进制(各发行版) │ ├── config.toml # Center 配置 │ ├── agent.toml # Agent 配置 │ ├── install.sh # 智能安装脚本 │ ├── start.sh # 启动脚本 │ ├── stop.sh # 停止脚本 │ ├── sql/ # 数据库脚本 │ ├── static/ # 静态资源 │ └── templates/ # HTML 模板 ├── cmd/ # 程序入口 │ ├── center/main.go # Center 入口 │ └── agent/main.go # Agent 入口 ├── config/ # 配置模板 ├── database/ # 数据库连接 ├── middleware/ # 中间件 ├── model/ # 数据模型 ├── router/ # 路由处理器 ├── service/ # 业务逻辑层 ├── tests/ # 集成测试 ├── uploads/ # 上传文件 ├── utils/ # 工具函数 ├── go.mod / go.sum # Go 模块 ├── build.sh # 编译脚本(在根目录运行) ├── install.sh # 安装脚本入口(自动调用 build/install.sh) └── README.md # 项目说明 ``` **部署方式:** - 开发调试:在根目录运行 `./start.sh` - 生产部署:直接拷贝 `build/` 整个目录到目标服务器,运行 `sudo bash install.sh` ### 数据库表结构 | 表名 | 说明 | |------|------| | `users` | 用户表(管理员/教师/学生) | | `classes` | 班级表 | | `class_teachers` | 班级-教师关联表 | | `student_info` | 学生扩展信息 | | `server_nodes` | 服务器节点表 | | `vm_images` | 虚拟机镜像表 | | `virtual_machines` | 虚拟机表 | | `ip_pool` | IP 地址池表 | | `system_logs` | 系统日志表 | | `exams` | 考试表 | | `exam_questions` | 考试题目表 | | `exam_answers` | 学生答卷表 | --- ## 快速开始 ### 1. 编译项目 **编译所有发行版:** ```bash cd /root/go/src/myEdu ./build.sh all ``` 编译后的二进制文件存放在 `build/` 目录。 **编译指定发行版:** ```bash # 仅编译 Rocky Linux ./build.sh "linux/amd64:linux-amd64-rocky" ``` **支持的发行版:** | 发行版 | 平台标识 | 最低版本 | |--------|---------|---------| | Rocky Linux | `linux-amd64-rocky` | 9+ | | Ubuntu | `linux-amd64-ubuntu` | 22.04+ | | openEuler | `linux-amd64-openeuler` | 22+ | | Debian | `linux-amd64-debian` | 12+ | | openSUSE | `linux-amd64-opensuse` | Leap 15+ | ### 2. 一键安装(推荐) 使用智能安装脚本,自动检测发行版并安装对应依赖: ```bash sudo ./install.sh ``` 脚本将自动: - ✅ 检测当前 Linux 发行版类型 - ✅ 从 `build/` 目录选择匹配的二进制文件 - ✅ 安装对应的 KVM 虚拟化组件和 MariaDB 数据库 - ✅ 配置防火墙和 systemd 服务 - ✅ 启动所有服务 **安装选项:** ```bash sudo ./install.sh -i # 交互式配置 sudo ./install.sh --kvm-only # 仅安装 KVM 环境 sudo ./install.sh --no-firewall # 跳过防火墙 sudo ./install.sh --uninstall # 卸载 ``` ### 3. 开发调试 ```bash # 使用根目录的入口脚本 ./start.sh ``` ### 4. 访问系统 打开浏览器访问:`http://localhost:8080` 默认管理员账号:`admin` / `admin123` --- ## 配置文件说明 ### config.toml - Center 配置 ```toml [server] port = 8080 # 服务端口 mode = "debug" # debug | release [database] host = "127.0.0.1" # 数据库地址 port = 3306 # 数据库端口 user = "root" # 数据库用户 password = "123456" # 数据库密码 dbname = "kvm_manager" # 数据库名 [session] secret = "kvm-manager-secret" # 会话密钥 max_age = 86400 # 会话有效期(秒) [ai] # AI 评分配置(可选) enabled = false # 是否启用 provider = "deepseek" # AI 提供商 api_key = "sk-45678" # API Key api_url = "https://api.deepseek.com/v1/chat/completions" model = "deepseek-chat" # 模型名称 timeout = 30 # 超时时间(秒) ``` ### agent.toml - Agent 配置 ```toml [server] port = 8081 # Agent 端口 [agent] name = "test-server" # Agent 名称 api_token = "change-me" # API Token server_id = 2 # Center 分配的服务器 ID [center] host = "127.0.0.1" # Center 地址 port = 8080 # Center 端口 ``` --- ## 考试模块使用说明 ### 教师端操作流程 1. **创建考试** - 登录教师账号 - 点击"考试管理"或从"班级管理"进入 - 点击"创建考试" - 填写考试信息并选择班级 - 点击"创建" 2. **添加题目** - 在考试列表点击"编辑" - 点击"添加题目" - 选择题型、填写内容和分值 - 重复添加直到完成 3. **发布考试** - 在考试编辑页面点击"发布考试" - 确认后学生可见 4. **查看答卷** - 在考试列表点击"答卷" - 查看学生提交情况 - 点击"查看答卷"查看详细内容 ### 学生端操作流程 1. **查看考试** - 登录学生账号 - 点击"考试中心" - 查看考试列表 2. **答题** - 点击"进入考试" - 认真答题 - 系统自动保存(60秒) - 也可手动点击"临时保存" 3. **提交** - 点击"提交答卷" - 确认后提交(不可修改) --- ## 常见问题 ### Q1: 学生看不到考试? **A:** 检查: 1. 学生是否已分配到班级 2. 考试是否已发布 3. 考试是否发布到该学生班级 ### Q2: VM 创建失败? **A:** 检查: 1. 服务器是否在线 2. 是否有可用镜像 3. Agent 是否正常运行 4. 查看 center.log 和 agent.log ### Q3: 如何启用 AI 评分? **A:** 1. 在 `config.toml` 设置 `enabled = true` 2. 配置有效的 DeepSeek API Key 3. 重启 Center 服务 --- ## 版本历史 ### v2.0 (2026-04-06) - ✅ 完整考试系统(学生端 + 教师端) - ✅ 五种题型支持 - ✅ 考试临时保存和自动保存 - ✅ 考试倒计时功能 - ✅ AI 评分接口预留 - ✅ 班级管理优化 - ✅ UI 界面优化 ### v1.0 - ✅ 用户管理 - ✅ 虚拟机管理 - ✅ 服务器管理 - ✅ 镜像管理 - ✅ 班级管理 - ✅ IP 地址管理 - ✅ 系统日志 --- ## 许可证 本项目为教育用途开发。 --- ## 联系方式 如有问题,请联系系统管理员。