Update docs: README + project structure for v0.6

This commit is contained in:
2026-06-11 10:48:58 +08:00
parent 7dc87d9f3a
commit 7436f699fb
2 changed files with 99 additions and 139 deletions
+55 -76
View File
@@ -9,116 +9,95 @@
## ✨ 特性
- 🎨 **Textual TUI**三栏界面 + 系统监控面板 + CLI 回退
- 🎨 **Textual TUI** — 系统监控面板 + 命令补全 + CLI 回退
- 🔌 **插件系统** — 热加载、权限隔离、依赖解析、进程隔离
- 🗄️ **项目注册表**插件声明 `project.yaml` 申请端口和资源
- 🗄️ **项目引擎**接管任何 Python/命令行项目 (subprocess + 日志 + stdin)
- 🔀 **反向代理** — HTTP/WS 代理,本地/局域网/公网端口映射
- 📊 **SQLite 持久化** — 插件状态、权限、审计日志统一存储
- 🌐 **Web 管理面板** — aiohttp + WebSocket:4200 实时仪表盘
- 🔐 **安全认证** — PBKDF2-SHA256、环境变量密码、Token 管理
- 🐳 **Docker 部署** — Alpine 镜像 <100MBsystemd 服务文件
- 🧪 **23 个回归测试** — pytest,零失败
- 🌐 **Web 管理面板** — aiohttp + SSE,项目管理/代理/插件控制页
- 🔐 **安全认证** — PBKDF2-SHA256、环境变量密码
- 🐳 **Docker 部署** — Alpine 镜像,systemd 服务文件
- 🧪 **28 个回归测试** — pytest,零失败
- 🛠️ **插件 SDK** — 命令装饰器 + Web 面板 + API + SSE 推送
## 🚀 快速开始
```bash
# 安装依赖
pip install -r requirements.txt
# 启动 (TUI 模式)
python main.py
# 启动 (headless,适合 SSH/systemd/Docker)
python main.py --headless
# 运行测试
python -m pytest tests/ -v
python main.py # TUI 模式
python main.py --headless # 后台模式
python -m pytest tests/ -v # 运行测试
```
## 🏗️ 架构
```
main.py → SenSuFramework
├─ ServiceManager (15 服务)
├─ CoreBridge ⇄ PluginBridge ⇄ NetworkBridge
├─ PluginService (热加载 + 依赖解析)
├─ ProjectService (项目注册表 + 端口分配)
├─ SenSuDB (SQLite 5 表)
├─ TuiService (Textual + 系统监控)
├─ InternetService (HTTP :4200 + WS :4240)
├─ WebPanel (管理面板 /SenSu)
└─ PermissionService (4 级权限)
main.py → SenSuFramework (15 服务)
├── ProjectEngine ← 接管任何项目 (subprocess + 日志)
├── ProxyService ← 反向代理 (HTTP+WS)
├── PyEnvManager ← Python 版本 + venv + git clone
├─ PluginWebMixin ← 插件 Web 控制面板 SDK
├── PluginService ← 热加载 + 状态追踪
├── SenSuDB ← SQLite 5 表
├── TuiService ← Textual + 系统监控
├── InternetService ← HTTP :4200 + WS :4240
└── WebPanelManager ← /SenSu 管理面板
```
## 📁 目录结构
## 📁 目录
```
SenSu-Alpha/
├── main.py # 框架入口
├── service_manager.py # 服务注册表
├── sdk/ # 插件开发工具包
│ ├── plugin_command_decorator.py
├── plugin_status.py
│ └── plugin_error.py
├── services/ # 核心服务 (15 个)
│ ├── sensu_db.py # SQLite 持久化
│ ├── project_service.py # 项目注册表
│ ├── process_isolated.py # 进程隔离
│ └── sysmon_widget.py # 系统监控
├── bridges/ # 消息桥接
├── plugins/ # 插件目录
├── deploy/ # 部署文件
│ ├── sensu.service # systemd
│ └── Dockerfile # Docker
├── tests/ # 23 个测试
── docs/ # 开发文档
├── main.py, service_manager.py
├── sdk/ plugin_command, plugin_status, plugin_error, plugin_web
├── services/ 15 个核心服务
├── bridges/ CoreBridge + PluginBridge + NetworkBridge
├── plugins/ 插件目录 + example_plugin (含 Web 面板)
├── deploy/ systemd + Dockerfile
├── tests/ 28 个测试
└── docs/ 开发文档
```
## 🌐 Web 面板
```
http://0.0.0.0:4200/SenSu/
├── /dashboard 仪表盘
├── /pages/projects 项目管理 (添加/启动/Git部署) ← NEW
├── /pages/proxy 反向代理管理 ← NEW
── /plugin/{name} 插件控制面板 ← NEW
├── /console Web 终端
├── /logs 实时日志
└── /plugins 插件列表
```
## 🔌 插件开发
```python
# plugins/my_plugin/__init__.py
from sdk.plugin_command_decorator import plugin_command
from sdk.plugin_web import PluginWebMixin
class Plugin:
class Plugin(PluginWebMixin):
def __init__(self, plugin_name=None, config=None, bridge=None):
PluginWebMixin.__init__(self)
self.plugin_name = plugin_name
self.bridge = bridge
async def initialize(self):
# 注册网络路由
await self.network_bridge.register_http_route(
"/api/my/info", self._handler, methods=["GET"])
self.register_web_page("my_plugin", "My Panel", "<h1>Hello</h1>")
@plugin_command(name="hello", description="打招呼")
@plugin_command(name="hello")
async def cmd_hello(self, *args):
return f"Hello from {self.plugin_name}!"
async def shutdown(self):
pass
return "Hello World!"
```
详细文档见 `docs/SenSu 插件开发详细指南.md`
## 🌐 API 端点
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/health` | 健康检查 |
| GET | `/SenSu/` | Web 管理面板 |
| POST | `/SenSu/api/login` | 面板登录 |
| GET | `/SenSu/api/system` | 系统状态 |
| GET | `/SenSu/api/plugins` | 插件列表 |
| POST | `/SenSu/api/command` | 执行命令 |
| GET | `/api/example/info` | 示例插件 |
## 🔧 环境变量
| 变量 | 默认值 | 说明 |
|------|------|------|
| `SENSU_ADMIN_PASSWORD` | `admin123` | 管理员密码 |
| `SENSU_API_PASSWORD` | `api123` | API 密码 |
| `SENSU_PANEL_USER` | `admin` | 面板用户名 |
| `SENSU_PANEL_PASS` | `admin` | 面板密码 |
| 变量 | 默认值 |
|------|------|
| `SENSU_ADMIN_PASSWORD` | `admin123` |
| `SENSU_API_PASSWORD` | `api123` |
| `SENSU_PANEL_USER` | `admin` |
| `SENSU_PANEL_PASS` | `admin` |
## 📄 许可证