跳到主要内容

QVMConsole 架构设计

本页面主要是展示QVMConsole程序技术公开。

整体架构

QVMConsole 采用前后端分离架构,后端基于 Go 语言,前端使用 Vue.js 3。

后端架构

技术栈

组件技术说明
Web 框架Gin高性能 HTTP 框架
虚拟化 APIlibvirt虚拟机管理接口
数据库SQLite轻量级嵌入式数据库
任务队列自研基于 goroutine 的异步任务系统

目录结构

server/
├── main.go # 程序入口
├── config/ # 配置管理
│ └── config.go
├── router/ # 路由定义
│ └── router.go
├── handler/ # HTTP 请求处理
│ ├── auth.go # 认证相关
│ ├── vm.go # 虚拟机管理
│ ├── network.go # 网络管理
│ ├── template.go # 模板管理
│ ├── user.go # 用户管理
│ └── ...
├── middleware/ # 中间件
│ ├── auth.go # JWT 认证
│ └── cors.go # CORS 跨域
├── model/ # 数据模型
│ ├── db.go # 数据库初始化
│ ├── user.go # 用户模型
│ ├── vm_cache.go # VM 缓存模型
│ └── ...
├── service/ # 业务逻辑
│ ├── libvirt.go # libvirt 封装
│ ├── vm_create.go # VM 创建
│ ├── vm_runtime.go # VM 运行时管理
│ ├── network.go # 网络服务
│ └── ...
├── taskqueue/ # 任务队列
│ └── queue.go
└── utils/ # 工具函数
└── cmd.go # 系统命令执行

请求处理流程

API 路由结构

中间件系统

中间件功能应用范围
CORSMiddleware处理跨域请求全局
AuthMiddlewareJWT 令牌验证需要认证的接口
AdminMiddleware管理员权限验证管理员接口
VMAccessMiddlewareVM 归属权限验证VM 操作接口
ElasticCloudOnlyMiddleware弹性云功能限制弹性云专属功能
TokenTypeMiddleware令牌类型验证特定类型接口

前端架构

技术栈

组件技术说明
框架Vue.js 3渐进式 JavaScript 框架
构建工具Vite下一代前端构建工具
状态管理PiniaVue 3 官方状态管理
UI 组件库Element PlusVue 3 组件库
HTTP 客户端Axios基于 Promise 的 HTTP 库
路由Vue Router 4Vue.js 官方路由

目录结构

web/src/
├── main.js # 程序入口
├── App.vue # 根组件
├── api/ # API 接口定义
│ ├── auth.js # 认证接口
│ ├── vm.js # 虚拟机接口
│ ├── network.js # 网络接口
│ └── ...
├── assets/ # 静态资源
├── components/ # 公共组件
│ ├── VmForm.vue # VM 表单组件
│ ├── SnapshotList.vue # 快照列表组件
│ └── ...
├── layout/ # 布局组件
│ └── index.vue # 主布局
├── router/ # 路由配置
│ └── index.js
├── store/ # 状态管理
│ ├── user.js # 用户状态
│ └── vm.js # VM 状态
├── utils/ # 工具函数
│ ├── request.js # HTTP 请求封装
│ ├── clipboard.js # 剪贴板操作
│ └── vnc.js # VNC 连接
└── views/ # 页面视图
├── dashboard/ # 首页仪表盘
├── vm/ # 虚拟机管理
├── network/ # 网络管理
├── template/ # 模板管理
└── ...

页面路由

状态管理

数据库设计

核心数据表

数据表说明

表名用途
users用户账户信息
vm_cache虚拟机信息缓存
tasks异步任务记录
system_settings系统配置项
vm_credentialsVM 登录凭据
vm_locksVM 锁定状态
vm_schedulesVM 定时任务
storage_pools存储池配置
network_bridges网桥配置
vpc_switchesVPC 交换机
vpc_security_groups安全组

任务队列系统

架构设计

支持的任务类型

任务类型说明可取消
clone虚拟机克隆
linked_clone原生链式克隆
batch批量克隆
create普通创建 VM
reinstall重装系统
delete删除 VM
snapshot快照操作
migrationVM 迁移
import导入 VM
export导出 VM
template模板操作

任务生命周期

虚拟化集成

libvirt 交互

支持的虚拟化操作

操作libvirt API说明
创建 VMDefineXML + Create定义并启动
关机Shutdown / Destroy正常/强制关机
暂停Suspend暂停 VM
恢复Resume恢复运行
快照SnapshotCreateXML创建快照
迁移MigrateToURI跨节点迁移
克隆DefineXML + 磁盘复制克隆 VM

安全机制

认证流程

权限控制

高风险操作二次验证

操作验证方式
删除 VMTOTP/邮箱验证码
重置密码TOTP/邮箱验证码
导出 VMTOTP/邮箱验证码
修改系统设置TOTP/邮箱验证码
删除用户TOTP/邮箱验证码

SSE 实时推送

QVMConsole 使用 Server-Sent Events 实现实时数据推送:

SSE 端点

端点推送内容
/api/vm/sseVM 列表状态
/api/vm/:name/sse单个 VM 详情
/api/host/stats/sse宿主机资源
/api/task/sse任务进度
/api/scheduler/events/sse调度事件

部署架构

生产环境配置

组件配置
Web 服务器Nginx (反向代理 + SSL)
应用服务QVMConsole (systemd)
数据库SQLite (本地文件)
虚拟化libvirt + QEMU/KVM
前端静态文件 (Nginx 托管)