8.1 KiB
0.2.1 发布任务 — 目标与现状
最后更新:2026-10-27 07:05 分支:
dev-0.2(已推送,与origin/dev-0.2同步于b29be62) 状态:代码与打包全部就绪;生产切换尚未执行(停在"镜像已构建,待起栈+迁移+切域名")
一、任务目标(用户原始要求)
- 域名
iboard.honor3.com已指向 3000 端口、HTTPS 证书已配好 → 客户端全面切到该域名。 - Windows 外壳 + 离线编辑功能正式合并到
dev-0.2,完整版本号 0.2.1。 - 确保 Android 功能正常(通过 CI 编译验证,不在本地装 Android 工具链)。
- 确保 CI/CD 正常。
- Windows 本地打包正常即可。
dev-0.2更新完成后 通过master分支发布。- 追加要求:不要再有 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 步):
- 起新栈(先用
HOST_PORT=13011灰度,不动现网) - 数据迁移:现网 MySQL → 新 PG(
scripts/etl-mariadb-to-pg.mjs,只读源库) - 验证:健康检查、登录、任务列表、离线编辑(断网后仍可读)、同步回流
- 切换:停
iboard旧容器 → 新栈改绑 3001 → 域名iboard.honor3.com生效 → 下线验证栈(13001/13002/13443)
然后 dev-0.2 → master 合并推送,触发 CI 发布。
四、需要确认的信息(阻塞项)
-
Gitea Actions Secrets 是否要配 PG 密钥? 需配:
PG_PASSWORD、PS_STORAGE_PASSWORD、JWT_SECRET、POWERSYNC_JWT_SECRET、POWERSYNC_JWT_KEY_B64。 不配的话:master 的 CI 只构建镜像不部署,生产靠手工执行scripts/deploy/prod.sh(当前默认路径)。 -
生产数据迁移的时间窗口:迁移需短暂停写(现网 MySQL 只读快照)。是否可以挑一个低峰时间、期间 (~10 分钟) 站点只读?
-
现网 MySQL 里的米家凭证/缓存:
/app/iboard/cache(auth.txt等)是否要一并搬到新栈的deploy/prod/data/cache? -
用户密码:迁移只搬数据,
JWT_SECRET若换新,所有人需重新登录;是否沿用现网JWT_SECRET(iboard)以保持登录态?建议换新(当前值过弱)。 -
域名端口说明:
iboard.honor3.com实际反代到 baihu 3001(NPM 配置:114.134.187.170:3001,SSL 强制)。 你提到"已转向 3000 端口"——请确认指的是honor3.com根域(→ homepage)而非iboard子域, 否则需要调整 NPM 的 forward_port。
五、关键路径与命令速查
# 仓库
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重装即可。