feat: implement macOS notarization and ad-hoc signing in afterSign script

feat: add run-server script to manage server execution and compatibility checks

feat: create main application logic for desktop with window management, server handling, and auto-updater

test: add unit tests for desktop runtime helpers

feat: implement desktop server environment configuration and health check

test: add tests for server configuration and desktop routes

feat: add native module guard for better-sqlite3 compatibility

test: add tests for native module guard functionality

test: add comprehensive tests for account verification feedback handling

feat: implement account verification feedback helpers

chore: add TypeScript configuration for desktop builds
This commit is contained in:
cita
2026-03-06 16:24:41 +08:00
parent acdc846b13
commit 2a810facb8
45 changed files with 6712 additions and 405 deletions
+13 -40
View File
@@ -83,54 +83,27 @@ docker run -d --name metapi \
> - `./data:/app/data` — 相对路径,数据存到当前目录下的 `data` 文件夹
> - 也可以使用绝对路径:`/your/custom/path:/app/data`
## Release 包部署(免 Docker)
## 桌面版部署(Windows / macOS / Linux)
适用于没有 Docker 环境的服务器,或 Windows / macOS 桌面使用场景。
个人电脑本地部署请直接使用 [Releases](https://github.com/cita-777/metapi/releases) 中的 Electron 安装包:
### 前置条件
1. 下载与你系统匹配的桌面安装包
2. 安装并启动 Metapi Desktop
3. 桌面壳会自动启动本地服务并将数据保存到应用数据目录
- Node.js 20+(推荐 22 LTS)
桌面版特性:
### 步骤
1. 从 [Releases](https://github.com/cita-777/metapi/releases) 下载与你系统匹配的压缩包(Linux / Windows / macOS)
2. 解压后进入目录
Linux / macOS:
```bash
export AUTH_TOKEN=your-admin-token
export PROXY_TOKEN=your-proxy-sk-token
export PORT=4000
export DATA_DIR=./data
./start.sh
```
Windows(PowerShell):
```powershell
$env:AUTH_TOKEN="your-admin-token"
$env:PROXY_TOKEN="your-proxy-sk-token"
$env:PORT="4000"
$env:DATA_DIR="./data"
.\start.bat
```
`start.sh` / `start.bat` 的作用是:
- 先检查 `better-sqlite3` 与当前 Node.js ABI 是否兼容
- 若检测到 ABI 不匹配,会自动尝试 `npm rebuild better-sqlite3`
- 若重建失败,会回退到 `npm ci --omit=dev` 重新安装运行时依赖
- 最后执行数据库迁移并启动服务
- 内置本地 Metapi 服务,无需手动准备 Node.js 运行环境
- 托盘菜单支持重新打开窗口、重启后端、开机自启
- 支持基于 GitHub Releases 的应用内更新检查
> [!NOTE]
> 如果本机 Node 主版本与打包时不同(例如包内依赖基于 Node 22,而本机是 Node 24),首次启动可能触发自动重建,需联网。
> 服务器部署不再提供裸 Node.js Release 压缩包,统一推荐 Docker / Docker Compose。
### Release 包升级
### 桌面版升级
1. 下载新版本的 Release 包
2. 解压覆盖旧文件(`data/` 目录不受影响)
3. 重新启动即可
1. 通过应用内更新提示安装新版本,或从 Releases 下载最新安装包覆盖安装
2. 用户数据目录会保留,升级后自动继续使用原有数据
---
+5 -5
View File
@@ -80,14 +80,14 @@ docker compose up -d
或使用 `.env` 文件。
### Q: Release 包启动失败
### Q: 桌面版启动失败
**A:** 排查步骤:
1. 确认 Node.js 已安装且版本 ≥ 20:`node --version`
2. 首次启动时如果报 `better-sqlite3` 相关错误,启动脚本会尝试自动重建,需要网络连接
3. 如果本机 Node 主版本与打包时不同(例如包内依赖基于 Node 22,而本机是 Node 24),首次启动需联网执行 `npm rebuild`
4. Windows 用户确认使用 PowerShell 而非 CMD 运行 `start.bat`
1. 确认下载的是与你系统匹配的桌面安装包
2. Windows 首次运行若出现“未知发布者”,先确认安装包来自官方 Releases
3. 如果桌面版提示后端启动失败,优先查看托盘菜单中的日志目录
4. 如需部署到服务器,请改用 Docker / Docker Compose,而不是桌面安装包
---
+6 -24
View File
@@ -60,34 +60,16 @@ docker compose up -d
> 如果未显式设置(非 Compose 场景),默认值为 `change-me-admin-token`(仅建议本地调试)。
> 若你在后台「设置」里修改过管理员令牌,后续登录请使用新令牌。
## 方式二:Release 包启动(Linux / macOS / Windows)
## 方式二:桌面版启动(Windows / macOS / Linux)
如果不想用 Docker,可以直接下载预打包的 Release 产物运行:
如果你是在个人电脑上本地使用,请直接下载桌面版安装包:
1. 打开 [Releases](https://github.com/cita-777/metapi/releases) 下载与你系统匹配的压缩包
2. 解压后进入目录
3. 设置环境变量并启动
Linux / macOS:
```bash
export AUTH_TOKEN=your-admin-token
export PROXY_TOKEN=your-proxy-sk-token
./start.sh
```
Windows(PowerShell):
```powershell
$env:AUTH_TOKEN="your-admin-token"
$env:PROXY_TOKEN="your-proxy-sk-token"
.\start.bat
```
`start.sh` / `start.bat` 会自动检查 `better-sqlite3` ABI 兼容性、执行数据库迁移并启动服务。
1. 打开 [Releases](https://github.com/cita-777/metapi/releases) 下载与你系统匹配的桌面安装包
2. 安装并启动 Metapi Desktop
3. 桌面壳会自动启动本地服务并保存数据,无需手动准备 Node.js 环境
> [!NOTE]
> Release 包依赖本机安装 Node.js(支持 20+,推荐 22 LTS)。
> 服务器部署统一推荐 Docker / Docker Compose,不再提供裸 Node.js 的 Release 压缩包。
## 方式三:本地开发启动
+3 -3
View File
@@ -23,10 +23,10 @@ metapi/
├── scripts/ # 项目脚本(按场景分组)
│ ├── dev/
│ │ └── restart.bat # Windows 开发环境快捷重启
│ └── release/
│ ├── start.sh # Release 包启动脚本(Linux/macOS)
│ └── start.bat # Release 包启动脚本(Windows)
│ └── desktop/
│ └── afterSign.mjs # Electron macOS 签名后处理 / 可选公证
├── src/
│ ├── desktop/ # Electron 主进程与桌面运行时
│ ├── server/ # Fastify 后端服务
│ └── web/ # React 前端应用
├── .github/workflows/ # CI/CD 工作流