fuzhengwei / fuzhengwei/WaLiAPI
feat: 支持桌面版与 Headless Linux Web 管理版共存
- Dominant language
- Rust
- Stars
- 128
- Forks
- 39
- Avg merge
- 15h 25m
- Merged PRs (30d)
- 44
Description
## 背景与目标
希望 WaLiAPI 同时支持以下两种运行方式,并复用同一套核心能力:
1. **桌面版**:保留 Tauri 安装包,启动后直接打开本地管理界面。
2. **Web / Headless Linux 版**:在没有桌面环境的 Linux 服务器上,以二进制或 Docker 容器运行,通过浏览器远程访问管理后台。
目标不是维护两套功能,而是让渠道管理、API Key、日志、知识库、模型转发等能力在两种模式下保持一致。
## 建议架构
```text
React 管理界面
└── 统一调用 /admin/api/*
│
Rust 核心服务(Axum + 业务服务 + 数据库)
├── Desktop:Tauri WebView 内嵌管理界面
└── Web:提供静态资源与 HTTP 管理服务
```
- 前端将目前依赖 Tauri `invoke()` 的管理操作,逐步迁移或适配为统一的 HTTP 管理 API。
- Tauri command 与 Axum 管理路由都调用同一层业务 service,避免复制业务逻辑。
- 桌面版可继续使用内嵌 WebView;Web 版直接访问 `/admin`。
- 网关协议接口保持兼容:`/v1/*`、`/health` 等不受影响。
## Web 模式期望
建议提供独立的 headless 启动入口,例如:
```bash
waliapi-server --host 0.0.0.0 --port 8777 --data-dir /data
```
以及 Docker 部署方式:
```bash
docker run -p 8777:8777 -v waliapi-data:/data waliapi
```
浏览器访问 `http://:8777/admin` 管理服务;模型 API 仍通过 `/v1/*` 使用。
## 需要处理的差异
- **安全**:Web 管理 API 必须有登录鉴权、权限控制、CSRF 防护和受限 CORS;不能直接暴露当前本地默认配置。
- **存储**:同一实例的桌面端和浏览器端都应访问同一个后端服务,不能让多个进程直接写同一个 SQLite 文件。多人/多副本部署建议支持 PostgreSQL。
- **桌面专属功能**:系统托盘、自启动、原生更新等保留在桌面版;导入/导出改为浏览器上传/下载。
- **OAuth**:账号登录需兼容浏览器回调地址,或采用设备授权流程。
- **配置**:Web/headless 模式应支持通过 CLI 参数、环境变量或配置文件设置监听地址、端口、数据目录和管理员初始凭据。
## 建议分期
1. 抽取现有 Tauri commands 背后的业务逻辑为可复用 service。
2. 新增受保护的 `/admin/api/*`,覆盖渠道、密钥、日志、设置等核心管理能力。
3. 前端建立 Tauri/HTTP 双适配层,确保现有桌面版无回归。
4. 将生产构建后的 Web 静态资源由 Axum 提供,并新增 headless Linux 二进制与 Docker 镜像。
5. 完善鉴权、部署文档、备份迁移和多用户/数据库方案。
## 验收标准
- 现有桌面版功能可继续使用。
- 无 GUI 的 Linux 环境可启动 WaLiAPI 并通过浏览器完整管理。
- 桌面版与 Web 版管理同一服务实例时数据实时一致。
- 模型转发 API 对现有客户端保持兼容。
- Web 管理端未认证时不能访问任何敏感数据或修改配置。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reading the existing Tauri commands, their Rust business-service layer, and the React calls that currently use invoke(); then inspect the Axum management routes and application startup configuration. This is complete only when the shared management capabilities work through protected /admin/api/* in both desktop and headless modes, with desktop behavior and /v1/* compatibility preserved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, linux, postgresql, react, rust, sqlite
- Domain
- api, backend, databases, desktop, devops, security, web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100