Files
virtualbox_client/README.md
T

315 lines
9.3 KiB
Markdown
Raw Normal View History

2026-05-10 10:56:52 +08:00
# VirtualBox Client
**VirtualBox 虚拟机自动化管理工具** — 通过 SSH 和 VirtualBox SDK 实现对 Ubuntu 20.04 虚拟机的全生命周期管理,支持 AI 智能任务执行、文件传输、脚本部署和图形化管理。
---
## ✨ 功能特性
- 🖥️ **虚拟机管理** — 启动、关闭、状态检测(VirtualBox SDK)
- 🔌 **纯 SSH 模式** — 不依赖 VirtualBox,直接通过 SSH 管理远程服务器
- 🤖 **AI 智能代理** — 接入大语言模型(OpenAI API),通过自然语言描述自动执行运维任务
- 📁 **文件传输** — 支持上传/下载文件、上传整个文件夹
- 📂 **工作区浏览器** — 树形文件管理器,支持浏览、新建、重命名、复制、删除、下载文件夹(zip 打包)
- ⚡ **脚本执行** — 上传并执行 Shell 脚本,自动区分部署脚本(sudo)和普通脚本
- 🎨 **图形界面** — 基于 PySide6 构建的现代化暗色主题 GUI
- 📋 **日志面板** — 带等级标识的彩色日志输出,支持自动滚动
---
## 📦 系统要求
| 依赖 | 说明 |
| -------------- | ------------------------ |
| Python | >= 3.14 |
| VirtualBox | 含 VirtualBox SDK(可选) |
| 操作系统 | Windows(主控端) |
| 目标虚拟机 | Ubuntu 20.04(受控端) |
---
## 🚀 快速开始
### 1. 安装依赖
```powershell
# 同步 Python 依赖
uv sync
# 安装 VirtualBox SDK(仅 VirtualBox 模式需要)
# 确保已安装 VirtualBox,找到 sdk 路径后执行:
cd ./sdk/installer/python/
uv run ./vboxapisetup.py install
```
> **📥 VirtualBox SDK 下载**
>
> 如果项目中尚未包含 SDK,请先下载 VirtualBox SDK 并解压到项目目录:
>
> ```powershell
> # 下载 VirtualBox SDK 7.2.8
> curl -L https://download.virtualbox.org/virtualbox/7.2.8/VirtualBoxSDK-7.2.8-173730.zip -o VirtualBoxSDK.zip
> # 解压到项目根目录
> tar -xf VirtualBoxSDK.zip
> ```
>
> SDK 目录结构应包含 `sdk/installer/python/vboxapisetup.py`。
>
> *注意:SDK 版本需与本地安装的 VirtualBox 版本匹配。*
### 2. 配置环境变量
复制 `.env.example` 为 `.env`(或直接在 GUI 中填写):
```env
# 虚拟机配置
VM_NAME=ubuntu20.04
VM_SSH_HOST=127.0.0.1
VM_SSH_PORT=2222
VM_SSH_USER=your_username
VM_SSH_PASS=your_password
# 大模型配置(AI 代理模式需要)
LLM_API_KEY=sk-your-api-key
LLM_BASE_URL=https://api.openai.com
LLM_MODEL=gpt-4o
```
### 3. 启动方式
#### 🖥️ 图形界面
```powershell
uv run gui
```
![GUI Screenshot](docs/images/gui.png) *(screenshot placeholder)*
#### ⌨️ 命令行示例
```powershell
uv run example
```
---
## 📖 使用指南
### 配置面板
左侧配置面板包含三个区域:
1. **运行模式** — 切换「纯 SSH 模式」或「VirtualBox 模式」
2. **虚拟机配置** — SSH 连接信息(主机、端口、用户名、密码)
3. **大模型配置** — AI 代理的 API Key、Base URL 和模型名称
### 任务执行面板
在「任务执行」Tab 中,输入自然语言描述,AI 代理将自动解析并执行:
```
在 /home/user/myproject 下有一个 "myproject" 项目,
请安装 nginx 并确认服务状态
```
系统会自动:
1. 启动虚拟机(VirtualBox 模式)
2. 连接 SSH
3. 调用 LLM 生成执行计划
4. 逐步执行命令并反馈日志
5. 任务完成后询问是否关闭虚拟机
### 文件传输
在「文件传输」Tab 中:
- **上传** — 选择本地文件,指定远程路径,点击上传
- **下载** — 输入远程路径,选择本地保存位置,点击下载
### 脚本执行
在「Script」Tab 中:
1. 点击「Browse」选择本地的 `.sh` 脚本文件
2. 点击「Upload and Execute Script」
3. 脚本会自动上传到 `/tmp/`,执行完成后下载日志并清理临时文件
4. 以 `deploy_` 开头的脚本自动使用 `sudo` 权限执行
### 工作区浏览器
在「工作区」Tab 中,可以像本地文件管理器一样操作远程文件:
- **双击文件夹** — 懒加载展开子目录
- **单击文件** — 显示文件详情
- **右键菜单** — 重命名、复制、删除、下载
- **工具栏** — 上传文件、上传文件夹、新建文件夹、回到根目录
---
## 🛠️ 脚本开发
### 添加新脚本
在 `src/virtualbox_client/scripts/` 下创建 Python 文件:
```python
# src/virtualbox_client/scripts/my_script.py
def run():
print("Hello from my script!")
```
在 `pyproject.toml` 中注册:
```toml
[project.scripts]
my-script = "virtualbox_client.scripts.my_script:run"
```
重新构建并执行:
```powershell
uv sync
uv run my-script
```
### 命令式脚本执行
```powershell
# 直接通过命令行运行脚本模块
uv run -m virtualbox_client.scripts.my_script
```
---
## 📁 项目结构
```
virtualbox_client/
├── src/virtualbox_client/
│ ├── __init__.py
│ ├── gui.py # PySide6 图形界面
│ ├── scripts/
│ │ ├── __init__.py
│ │ ├── agent_task.py # AI 代理任务执行
│ │ ├── example.py # 使用示例
│ │ └── run_script.py # 脚本运行器
│ └── utils/
│ ├── __init__.py
│ ├── ssh_manager.py # 纯 SSH 管理器
│ ├── vbox_ssh_manager.py # VirtualBox + SSH 管理器
│ └── vm_agent.py # AI 代理核心
├── resources/
│ ├── chongming_dev.sh
│ ├── deploy_docker.sh
│ ├── deploy_git.sh
│ ├── deploy_nvm.sh
│ └── deploy_uv.sh
├── scripts/
│ ├── add_script_runner.py
│ ├── add_script_tab.py
│ ├── check_syntax.py
│ ├── clean_pycache.py
│ ├── code_content.py
│ ├── fix_paths.py
│ └── fix_upload_folder.py
├── docs/
│ ├── docker使用手册.md
│ ├── git使用手册.md
│ ├── nvm使用文档.md
│ └── uv使用文档.md
├── .env.example # 环境变量模板
├── .gitignore
├── .python-version
├── gui.spec # PyInstaller 打包配置
├── pyproject.toml # 项目配置与依赖
└── README.md
```
---
## 🧩 技术架构
### 后端
- **VirtualBox SDK** (`vboxapi`) — 通过 Windows COM 接口管理虚拟机生命周期
- **paramiko** — SSH 连接与远程命令执行
- **openai** — 大语言模型 API 调用(AI 代理模式)
- **pywin32** — Windows COM 互操作
### 前端
- **PySide6** — Qt6 的 Python 绑定,提供现代化 GUI
- **QThread** — 后台线程管理,避免 UI 阻塞
- **QTreeWidget** — 带懒加载的远程文件浏览器
### 工作模式
```
┌─────────────────────────────────────────┐
│ VirtualBox Client │
├─────────────────┬───────────────────────┤
│ VirtualBox 模式 │ 纯 SSH 模式 │
│ │ │
│ VirtualBox │ SSH │
│ SDK (COM) │ Manager │
│ ↓ │ ↓ │
│ VBoxSSHManager │ SSHManager │
│ ↓ │ ↓ │
│ Ubuntu VM │ 远程服务器 │
└─────────────────┴───────────────────────┘
```
---
## 🐳 部署与打包
### 使用 PyInstaller 打包为可执行文件
```powershell
uv run pyinstaller gui.spec
```
打包后的可执行文件位于 `dist/` 目录。
---
## ⚙️ 环境搭建详情
| 命令 | 说明 |
| ----------------------------------------- | ----------------------------- |
| `uv sync` | 同步所有 Python 依赖 |
| `uv run ./sdk/installer/python/vboxapisetup.py install` | 安装 VirtualBox SDK |
| `uv run gui` | 启动图形界面 |
| `uv run example` | 运行命令行示例 |
| `uv run agent-task` | 运行 AI 代理任务 |
| `uv run run-script` | 运行脚本 |
| `uv run pyinstaller gui.spec` | 打包为 EXE |
---
## 📝 文档
详细使用文档请参考 `docs/` 目录:
- [Docker 使用手册](docs/docker使用手册.md)
- [Git 使用手册](docs/git使用手册.md)
- [NVM 使用文档](docs/nvm使用文档.md)
- [UV 使用文档](docs/uv使用文档.md)
---
## 🔧 常见问题
**Q: 启动报错 `CoInitialize` 相关错误?**
A: 这是 Windows COM 初始化问题,通常出现在 VirtualBox 模式下。确保已正确安装 VirtualBox SDK。
**Q: SSH 连接失败?**
A: 检查目标虚拟机是否已启动、SSH 服务是否运行、端口转发是否配置正确(默认 2222)。
**Q: AI 代理无响应?**
A: 确保 API Key、Base URL 和模型名称配置正确,且网络可以访问 LLM 服务。
---
## 📄 许可证
本项目仅供学习和参考使用。