feat: 优化虚拟机列表,支持多主机聚合显示

- 新增 /vm/list-all API 聚合所有主机虚拟机
- parse_vm_info 支持 include_ip 参数控制IP获取
- VMList 添加主机选择器,显示宿主机列
- 修复 API 路径 /host/list -> /hosts/list
- 新增启动脚本 scripts/start.sh
- 新增 Guest Agent 安装脚本 scripts/install-guest-agent.sh
- 更新 README 文档
This commit is contained in:
admin
2026-05-07 14:52:45 +08:00
parent 8ccccf8f52
commit dbba1694d8
8 ha cambiato i file con 899 aggiunte e 76 eliminazioni
+126 -23
Vedi File
@@ -1,22 +1,25 @@
# KVM 虚拟化管理平台
基于 FastAPI + Vue 3 + Element Plus 的 KVM 虚拟机管理平台,通过 libvirt API 管理虚拟机。
基于 FastAPI + Vue 3 + Element Plus 的 KVM 虚拟机管理平台,通过 libvirt API 管理虚拟机,支持多主机纳管
## 技术栈
- **后端**: FastAPI + libvirt Python API
- **前端**: Vue 3 + Element Plus + Vite
- **前端**: Vue 3 + Element Plus + Vite + noVNC
- **虚拟化**: QEMU/KVM + libvirt
- **认证**: JWT Token
## 功能
- 🖥️ 虚拟机管理(创建/启动/停止/删除/快照
- 🖥️ 虚拟机管理(创建/启动/停止/删除/克隆/迁移
- 📊 资源监控(CPU/内存/磁盘/网络)
- 💾 存储池管理
- 🌐 网络管理
- 📋 控制台访问(noVNC
- 💾 存储池管理(支持多种存储类型)
- 🌐 网络管理(桥接/NAT/独立网络)
- 📋 控制台访问(WebSocket VNC
- 📸 快照管理
- 🔐 用户认证
- 🔐 用户认证JWT
- 🖧 多主机纳管(支持 SSH/TCP 连接远程 KVM
- 📡 IP 地址自动获取(需要配置 QEMU Guest Agent
## 项目结构
@@ -24,42 +27,142 @@
kvm-manager/
├── backend/
│ ├── app/
│ │ ├── main.py
│ │ ├── config.py
│ │ ├── database.py
│ │ ├── models.py
│ │ ├── auth.py
│ │ └── routers/
│ │ ├── vm.py
│ │ ├── storage.py
│ │ ├── network.py
│ │ ├── snapshot.py
│ │ ── monitor.py
│ │ ├── main.py # FastAPI 应用入口
│ │ ├── config.py # 配置
│ │ ├── libvirt_conn.py # libvirt 连接池
│ │ ├── hosts.py # 主机注册表
│ │ ├── utils.py # 工具函数
│ │ └── routers/ # API 路由
│ │ ├── vm.py # 虚拟机管理
│ │ ├── storage.py # 存储管理
│ │ ├── network.py # 网络管理
│ │ ├── snapshot.py # 快照管理
│ │ ── monitor.py # 资源监控
│ │ └── host.py # 主机管理
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── views/
│ │ ├── components/
│ │ ├── api/
│ │ ├── router/
│ │ ├── views/ # 页面组件
│ │ ├── components/ # 通用组件
│ │ ├── api/ # API 调用
│ │ ├── router/ # 路由配置
│ │ └── App.vue
│ ├── package.json
│ └── vite.config.js
├── scripts/ # 工具脚本
│ ├── start.sh # 服务启动脚本
│ └── install-guest-agent.sh # Guest Agent 安装脚本
├── docker-compose.yml
└── README.md
```
## 快速开始
### 方式一:使用启动脚本(推荐)
```bash
cd kvm-manager/scripts
# 启动所有服务
./start.sh
# 查看服务状态
./start.sh status
# 停止服务
./start.sh -s
```
### 方式二:手动启动
```bash
# 后端
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8004
# 前端
# 前端(另开终端)
cd frontend
npm install
npm run dev
```
### 方式三:Docker 部署
```bash
docker-compose up -d
```
## 访问地址
- 前端界面:http://localhost:8005
- API 接口:http://localhost:8004
- API 文档:http://localhost:8004/docs
## 多主机纳管
在「主机管理」页面添加远程 KVM 主机,支持以下连接方式:
- **本地连接**`qemu:///system`
- **SSH 连接**`qemu+ssh://user@host/system`
- **TCP 连接**`qemu+tcp://host/system`
## QEMU Guest Agent
用于自动获取虚拟机 IP 地址。
### 安装脚本
```bash
# 单个虚拟机
./scripts/install-guest-agent.sh VM_NAME
# 所有虚拟机
./scripts/install-guest-agent.sh --all
```
### 手动配置
1. 关机虚拟机
2. 编辑配置:`virsh edit VM_NAME`
3.`<devices>` 中添加:
```xml
<controller type='virtio-serial' index='0'/>
<channel type='unix'>
<source mode='bind'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
```
4. 开机后安装 Agent
```bash
# CentOS/RHEL
yum install qemu-guest-agent
systemctl enable qemu-guest-agent
# Ubuntu/Debian
apt install qemu-guest-agent
systemctl enable qemu-guest-agent
```
5. 验证:`virsh qemu-agent-command VM_NAME '{"execute":"guest-info"}'`
## 配置说明
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `LIBVIRT_URI` | 本地 libvirt 连接 URI | `qemu:///system` |
| `API_PREFIX` | API 路径前缀 | `/api` |
| `SECRET_KEY` | JWT 密钥 | 自动生成 |
| `KVM_DATA_DIR` | 主机数据存储目录 | `/var/lib/kvm-manager` |
## 注意事项
- 远程主机 VNC 需要监听 `0.0.0.0` 才能被代理访问
- SSH 模式需要配置无密码 SSH 登录
- Guest Agent 需要虚拟机内部安装并运行才能获取 IP