docs(0.2.1): 新增 021任务.md —— 目标/现状/卡点/待确认信息速查
This commit is contained in:
+156
@@ -0,0 +1,156 @@
|
||||
# 0.2.1 发布任务 — 目标与现状
|
||||
|
||||
> 最后更新:2026-10-27 07:05
|
||||
> 分支:`dev-0.2`(已推送,与 `origin/dev-0.2` 同步于 `b29be62`)
|
||||
> 状态:**代码与打包全部就绪;生产切换尚未执行(停在"镜像已构建,待起栈+迁移+切域名")**
|
||||
|
||||
---
|
||||
|
||||
## 一、任务目标(用户原始要求)
|
||||
|
||||
1. 域名 `iboard.honor3.com` 已指向 3000 端口、HTTPS 证书已配好 → 客户端全面切到该域名。
|
||||
2. **Windows 外壳 + 离线编辑功能正式合并到 `dev-0.2`**,完整版本号 **0.2.1**。
|
||||
3. 确保 **Android** 功能正常(通过 CI 编译验证,不在本地装 Android 工具链)。
|
||||
4. 确保 **CI/CD** 正常。
|
||||
5. Windows **本地打包正常**即可。
|
||||
6. `dev-0.2` 更新完成后 **通过 `master` 分支发布**。
|
||||
7. 追加要求:**不要再有 13002 这类独立端口**,所有版本合并成一套。
|
||||
|
||||
---
|
||||
|
||||
## 二、已完成
|
||||
|
||||
### 2.1 分支合并
|
||||
|
||||
| 内容 | 结果 |
|
||||
| --- | --- |
|
||||
| `dev-0.2.1`(离线编辑 + 项目编号 + PG/PowerSync)→ `dev-0.2` | 已合并 `e689e44` |
|
||||
| `dev-windows-0.1`(Windows 外壳:托盘/悬浮球/吸附/自启动)→ `dev-0.2` | 已按路径迁入 `eef2969` |
|
||||
| `dev-0.2` → `android-1.0`(触发 APK 构建) | 已合并 `4958359` |
|
||||
| 冲突处理 | `projects.js`/`tasks.js`/`api/task.js` 手工合并,**两边功能都保留**(`autoArchive` 归档 + `code` 编号) |
|
||||
| 归档功能补齐到本地库 | `src/api/task.js` 新增 `archive`/`unarchive`/`archivedList`;`schema.js` 加 `archived/archivedAt/archiveSource/autoArchive`;`sync-config.yaml` 与 upload 处理器同步 |
|
||||
| Prisma 客户端补齐 | dev-0.2 原来缺任务模块 6 个模型,已重新 generate `fc23919` |
|
||||
|
||||
### 2.2 版本与域名
|
||||
|
||||
- 版本统一 **0.2.1**:`package.json` / `src-tauri/tauri.conf.json` / `Cargo.toml` / `Cargo.lock`(`scripts/ci/check-version.mjs` 通过)
|
||||
- 域名切 `https://iboard.honor3.com`:
|
||||
- `src/api/client.js` 注释、`.env.shell`、`scripts/wsl/build-apk.sh`、`.gitea/workflows/android-build.yml`、`.gitea/workflows/docker-build.yml`、`Dockerfile`(`OTA_PUBLIC_BASE`)、`tauri.conf.json`(OTA endpoint + CSP)
|
||||
- 旧域名 `bh.vps.honor3.com:3001` 仅保留在 CSP 白名单里做滚动兼容
|
||||
|
||||
### 2.3 单端口架构(去掉 13002)
|
||||
|
||||
| 改动 | 位置 |
|
||||
| --- | --- |
|
||||
| Express 增加 `/sync`、`/socket` 同域反代到内网 powersync | `server/powersync-proxy.js` + `server/index.js`(挂在 `express.json()` 之前,支持长连接) |
|
||||
| 生产编排:app(3001 对外) + pg(内网) + powersync(内网) | `deploy/prod/docker-compose.yml` |
|
||||
| 生产部署脚本(幂等:迁移 → publication → 起栈 → 健康检查) | `scripts/deploy/prod.sh` |
|
||||
| PG 初始化(powersync_storage 用户) | `deploy/prod/initdb/01-powersync-storage.sh` |
|
||||
| 逻辑复制 publication(**建表后**执行) | `deploy/prod/sql/publication.sql` |
|
||||
| 部署文档 | `deploy/prod/README.md`、`.env.example` |
|
||||
| CI 部署段改为调用宿主脚本,未配 PG secrets 时自动跳过 | `.gitea/workflows/docker-build.yml` |
|
||||
|
||||
### 2.4 Windows 本地打包 — 通过 ✅
|
||||
|
||||
`npm run build:win` 全流程成功(本机需 Node 20.19+;已用便携 Node 20.18.1 之外的 Node 24 验证过 vite 构建):
|
||||
|
||||
| 产物 | 路径 | 大小 |
|
||||
| --- | --- | --- |
|
||||
| 安装包 | `artifacts/windows/iBoard_0.2.1_x64-setup.exe` | 6.9 MB |
|
||||
| 便携版 zip | `artifacts/windows/iBoard_0.2.1_x64-portable.zip` | 7.9 MB |
|
||||
|
||||
外壳能力(继承 dev-windows-0.1):托盘、悬浮球吸附、自动隐藏、单实例、自启动、窗口尺寸单值配置
|
||||
(`%APPDATA%\com.iboard.app\shell-config.json` 的 `window_width`,高度按 405:720 锁定推导)。
|
||||
|
||||
离线能力(继承 0.2.1):GET 响应本地缓存、同步凭证持久化(离线不清库)、左上角「离线」徽标。
|
||||
|
||||
### 2.5 Android CI — 通过 ✅
|
||||
|
||||
- 触发:`android-1.0` 分支 push(`4ded8e3`)
|
||||
- 结果:**16 个步骤全部 success**,`Build release APK` + `Publish APK to Gitea packages` 成功
|
||||
- 产物:`app-universal-release.apk`(20 MB),versionName = **0.2.1**
|
||||
已发布到 `http://git.honor3.com/api/packages/Fullstack/generic/iboard/1.0-4ded8e30/`
|
||||
- 首次失败原因:runner 宿主机(baihu)磁盘 **95%** → `No space left on device`;
|
||||
清理悬空镜像 + 构建缓存后释放 11.5 GB,重跑通过。**磁盘现已 60%(39 GB 可用)**
|
||||
|
||||
### 2.6 CI/CD 现状
|
||||
|
||||
| Workflow | 触发 | 状态 |
|
||||
| --- | --- | --- |
|
||||
| `docker-build.yml` | `master` push | 改造完成,未在 master 上验证(部署段会因缺 secrets 跳过) |
|
||||
| `android-build.yml` | `android-*` push | **已验证通过** |
|
||||
| `ota-build.yml` / `sync-registry.yml` | 参照原逻辑 | 未改动 |
|
||||
|
||||
---
|
||||
|
||||
## 三、当前卡点(生产切换未执行)
|
||||
|
||||
生产镜像 **已构建成功**:`iboard:latest` = `db6b27b851b8`(924 MB,2026-10-26 22:53)
|
||||
|
||||
baihu 上当前跑着两套:
|
||||
|
||||
| 容器 | 用途 | 端口 |
|
||||
| --- | --- | --- |
|
||||
| `iboard`(旧) | **现网生产**,MySQL(宿主 3306) | 3001 |
|
||||
| `iboard-021-app-1` 等 4 个 | 0.2.1 验证栈 | 13001 / 13002 / 13443 |
|
||||
| (未启动)`iboard-prod` | **新生产栈**(PG + PowerSync + app) | 3001(计划) |
|
||||
|
||||
`/app/iboard-prod` 已上传源码、`deploy/prod/.env` 已生成(6 个密钥,600 权限)。
|
||||
|
||||
**剩余步骤(约 4 步)**:
|
||||
|
||||
1. 起新栈(先用 `HOST_PORT=13011` 灰度,不动现网)
|
||||
2. 数据迁移:现网 MySQL → 新 PG(`scripts/etl-mariadb-to-pg.mjs`,只读源库)
|
||||
3. 验证:健康检查、登录、任务列表、离线编辑(断网后仍可读)、同步回流
|
||||
4. 切换:停 `iboard` 旧容器 → 新栈改绑 3001 → 域名 `iboard.honor3.com` 生效 → 下线验证栈(13001/13002/13443)
|
||||
|
||||
然后 `dev-0.2` → `master` 合并推送,触发 CI 发布。
|
||||
|
||||
---
|
||||
|
||||
## 四、需要确认的信息(阻塞项)
|
||||
|
||||
1. **Gitea Actions Secrets 是否要配 PG 密钥?**
|
||||
需配:`PG_PASSWORD`、`PS_STORAGE_PASSWORD`、`JWT_SECRET`、`POWERSYNC_JWT_SECRET`、`POWERSYNC_JWT_KEY_B64`。
|
||||
不配的话:master 的 CI 只构建镜像不部署,生产靠手工执行 `scripts/deploy/prod.sh`(当前默认路径)。
|
||||
|
||||
2. **生产数据迁移的时间窗口**:迁移需短暂停写(现网 MySQL 只读快照)。是否可以挑一个低峰时间、期间 (~10 分钟) 站点只读?
|
||||
|
||||
3. **现网 MySQL 里的米家凭证/缓存**:`/app/iboard/cache`(`auth.txt` 等)是否要一并搬到新栈的 `deploy/prod/data/cache`?
|
||||
|
||||
4. **用户密码**:迁移只搬数据,`JWT_SECRET` 若换新,所有人需重新登录;是否沿用现网 `JWT_SECRET`(`iboard`)以保持登录态?**建议换新**(当前值过弱)。
|
||||
|
||||
5. **域名端口说明**:`iboard.honor3.com` 实际反代到 baihu **3001**(NPM 配置:`114.134.187.170:3001`,SSL 强制)。
|
||||
你提到"已转向 3000 端口"——请确认指的是 `honor3.com` 根域(→ homepage)而非 `iboard` 子域,
|
||||
否则需要调整 NPM 的 forward_port。
|
||||
|
||||
---
|
||||
|
||||
## 五、关键路径与命令速查
|
||||
|
||||
```bash
|
||||
# 仓库
|
||||
C:\Users\Rabbit\Documents\workbetch\iboard # dev-0.2 主工作区
|
||||
C:\Users\Rabbit\Documents\workbetch\iboard-dev-0.2.1 # 研究分支 worktree
|
||||
C:\Users\Rabbit\Documents\workbetch\iboard-dev-windows # Windows 外壳 worktree
|
||||
|
||||
# 服务器
|
||||
ssh root@baihu # 生产 + CI runner(baihu 上跑 act_runner,注册名 baishe)
|
||||
ssh root@baishe # 反代(NPM)、Gitea、homepage
|
||||
|
||||
# 生产目录
|
||||
/app/iboard-prod/deploy/prod/{docker-compose.yml,.env,data/,powersync/,sql/,initdb/}
|
||||
|
||||
# 常用
|
||||
docker compose -f /app/iboard-prod/deploy/prod/docker-compose.yml --env-file /app/iboard-prod/deploy/prod/.env ps
|
||||
bash /app/iboard-prod/scripts/deploy/prod.sh
|
||||
curl -s https://iboard.honor3.com/api/health
|
||||
```
|
||||
|
||||
## 六、已知遗留
|
||||
|
||||
- `dev-0.2.1` / `dev-windows-0.1` 两个 worktree 分支内容已全部并入 `dev-0.2`,可择机删除。
|
||||
- `tmp-offline-edit` 分支 = `1cd5b85`,历史遗留,可删。
|
||||
- 临时测试脚本 `scripts/_browser-test.mjs`、`scripts/_shell-offline-test.mjs` 含真实口令,**不要入库**。
|
||||
- 0.2.1 验证库里可能残留测试任务(`浏览器验证任务` / `IBOARD-8`),迁移后建议清理。
|
||||
- `node_modules` 曾在多种 Node 版本间切换,如遇 esbuild 权限报错,清 `node_modules` 重装即可。
|
||||
Reference in New Issue
Block a user