Files
2026-05-10 10:56:52 +08:00

315 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 服务。
---
## 📄 许可证
本项目仅供学习和参考使用。