2026-08-07 09:49:26 +08:00
2026-08-07 09:10:40 +08:00
2026-08-03 18:09:08 +08:00
2026-08-06 16:41:47 +08:00
2026-08-06 16:41:47 +08:00
2026-08-03 18:05:50 +08:00
ota
2026-08-07 09:49:26 +08:00
ota
2026-08-07 09:49:26 +08:00
ota
2026-08-07 09:49:26 +08:00
ota
2026-08-07 09:49:26 +08:00
2026-04-25 19:48:19 +08:00
ota
2026-08-07 09:49:26 +08:00
fix
2026-08-04 09:33:52 +08:00
2026-08-03 18:05:50 +08:00
ota
2026-08-07 09:49:26 +08:00
ota
2026-08-07 09:49:26 +08:00
2026-08-03 18:09:08 +08:00
ota
2026-08-07 09:49:26 +08:00
2026-08-06 17:27:23 +08:00

# iBoard

用于收集和整理经济数据,但是以策略为主体重新组织。

- 首页主要是放经济文章

- 数据主要是放各种经济数据和图表。

- 策略是放按照经济理论组织的相关数据和图表的对比。







## 首页

首页显示新闻模块和报警模块的数据,按照时间最新优先,无限滚动,直到数据库中没有数据为止。





### 新闻模块

增加一个新闻模块,数据来源是每日夜间 3点,通过妙想 MCP 获取国内外最新经济政治新闻,按影响大小排序10条。

存入数据库。





### 报警模块

World Bank 中的数据只用来对比妙想 MCP 拉取的数据正确性。当同一时间的同一项数据不同时,记录一个报警。



## 监控

监控分为服务器监控和服务监控两部分。

服务器监控对接 komari,地址:https://komari.honor3.com/





## 前端 OTA 升级

只升级前端资源 (`dist/`), **不触碰** Tauri 框架/原生层, 不重打 APK.
底层使用 [`tauri-plugin-hotswap`](https://github.com/denniskribl/tauri-plugin-hotswap)
(签名/回滚/资源替换全部由插件处理).

### 工作流

```
开发者                                   服务端
npm run build                ──┐
scripts/build-ota.mjs          │  生成 iboard-ota.tar.gz + minisign 签名
                               │  输出 latest.json (sequence/version/...)
                               ▼
                          ota-package/   ── 部署到服务器 ──▶   /srv/iboard/ota-package
                                                                    │
                                                                    ▼
                                                          GET /api/ota/check/<seq>
客户端 (Tauri)                                                     │
启动 ─▶ notifyReady()                                              ▼
我页 ─▶ checkUpdate()  ◀──── 200 + manifest (含 url/signature) ─────┘
       applyUpdate()  ─▶  下载 tar.gz ─▶ minisign 校验 ─▶ 解压到 AppData/ota-dist
       location.reload() ─▶  后续资源从 tauri://localhost 优先命中覆盖包
```

### 首次部署

1. **生成签名密钥** (一次性):
   ```bash
   # 安装 minisign: Windows (scoop) / macOS (brew) / Linux (apt)
   node scripts/ota-genkey.mjs
   # 产物: ota-package/hotswap.{key, pub}
   ```
2. **把公钥写入 `src-tauri/tauri.conf.json`** 的 `plugins.hotswap.pubkey` 字段
   (脚本会打印).
3. **配置 endpoint** (`src-tauri/tauri.conf.json`):
   ```json
   "hotswap": {
     "endpoint": "https://your-server/api/ota/check/{{current_sequence}}",
     "pubkey": "RWR...",
     "require_https": true
   }
   ```
4. **服务端环境变量** `OTA_PACKAGE_DIR` 指向 `ota-package/` 所在目录.

### 发布新版前端

```bash
npm run build                # 生成 dist/
node scripts/build-ota.mjs   # 打成 tar.gz + 签名 + latest.json
# sequence 默认 = Date.now(), 也可 --sequence 43 手动指定
# 也可加 --notes "修复登录按钮" --min-binary 0.1.0
```

然后把 `ota-package/` 下两个文件 (`iboard-ota.tar.gz` + `latest.json`) 同步到
服务端 `OTA_PACKAGE_DIR` 指向的目录. sequence 单调递增即可.

### 客户端使用

打开 App 的"我"页, 点 [检查更新] → [立即升级] 即可. 失败会自动回滚到内置 dist.

> **注意:** Tauri 2 的 dev 模式 (`tauri dev`) 会代理到 Vite dev server, **OTA 不生效**.
> OTA 仅在 release/打包构建中可用, 测试请用 `tauri build` 产物.

### Web 端

Web 浏览器访问 (同源) 时, 服务端返回简化版 manifest, 仅显示"有新版本请刷新".
Web 端不会自动下载包, 也不会替换前端代码.

S
Description
No description provided
Readme
26 MiB
Languages
TypeScript 68.9%
JavaScript 25.5%
CSS 2.6%
Rust 1.7%
Shell 0.8%
Other 0.4%