feat: 完成扩展资源验收与同步服务部署

This commit is contained in:
2026-09-10 02:57:38 +08:00
parent d703ab64e3
commit a3c098aa58
29 changed files with 464 additions and 112 deletions
@@ -0,0 +1,47 @@
# OpenNexus Server Sync 阶段一部署记录
部署时间:2026-09-10
部署类型:阶段一明文 HTTP 测试
代码提交:`d703ab64e3f483dde9e5153c55b986d358f4e37d`
## 访问入口
- 控制台:`http://160.202.254.170:18080/`
- 健康检查:`http://160.202.254.170:18080/health`
- 依赖就绪:`http://160.202.254.170:18080/ready`
- 协议握手:`http://160.202.254.170:18080/sync/v1/handshake?protocol=1`
该环境按测试要求直接监听 `0.0.0.0:18080`,没有修改现有 Nginx,也没有配置
HTTPS。正式部署仍须恢复本机监听并由 TLS 反向代理提供外部入口。
## 服务组成
Docker Compose 项目名为 `opennexus-stage1`,包含 PostgreSQL 17.6、MinIO、
一次性初始化任务和两个 Uvicorn worker 的 Sync 服务。长期服务使用独立的
Bucket 限权账号,不使用 MinIO 管理员身份。数据库、对象存储和暂存区均使用
独立具名卷。
目标机可用内存较少,因此阶段一部署为容器设置以下上限:
| 服务 | 内存上限 | CPU 上限 |
| --- | ---: | ---: |
| PostgreSQL | 256 MiB | 1 |
| MinIO | 320 MiB | 1 |
| 初始化任务 | 256 MiB | 1 |
| Sync | 384 MiB | 1 |
## 已执行验证
- `/health` 返回 `status=ok`
- `/ready` 返回 `status=ready`
- 握手返回协议版本 1、100 MiB 对象上限和 1 MiB 分块大小。
- 根路径返回构建后的 Vue 3 + TypeScript Sync Console。
- 从部署机外部完成登录、创建并列出 Vault、退出登录的公开 API 闭环。
- 验证结束后删除临时 Vault、设备与会话,仅保留阶段一演示账号。
- 验证时 Sync、PostgreSQL、MinIO 的内存用量分别约为 214 MiB、27 MiB、
135 MiB,均低于容器上限。
部署凭据只保存在目标机权限受限的 `.env` 中,本文和验收日志不记录口令、
访问令牌、数据库密码或对象存储密钥。
@@ -953,3 +953,20 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- 提交 `ba7414e` 后构建 release Host 与 1523 文件的 PyInstaller Core。便携交付目录为 `H:\OpenNexus-demo\OpenNexus-0.3.0-alpha.1-portable-ba7414e\`,总计 274.3 MiBCore 全部文件与 SHA-256 清单一致,`OpenNexus.exe` 摘要为 `E6136C61CAA910CD0006EF9FD94955B47FCF561ABF3FB217097AE36317394023`。实际启动后 Host 窗口保持响应,Core 子进程从便携目录运行。
- 构建完成后删除工作树中的 `.build`、Rust `target`、前端 `dist`、Sync Console `node_modules` 和 TypeScript 构建缓存,G 盘剩余空间回升到 49.62 GiB。用户 Vault 的现有修改未纳入提交、未移动也未删除。
- 测试地址 `http://yui.kronecker.cc:18080` 当前仍返回空响应,SSH 连接在认证前由对端关闭,因此本次未能把控制台发布到该测试端口;本地 Demo 与可部署源码、静态产物均已完成。其余 12 项长时生产验收继续按用户要求暂缓。
## 增量:Server Sync 阶段一远端部署
- 使用新的测试服务器完成 Server Sync 全栈部署,公开入口为 `http://160.202.254.170:18080/`。按阶段一要求直接监听 HTTP,没有修改 Nginx 或配置 HTTPS;根路径发布 Vue 3 + TypeScript Sync Console。
- Docker Compose 运行 PostgreSQL 17.6、MinIO、一次性初始化任务和两个 Uvicorn worker。Compose 新增可配置的 `SYNC_BIND_ADDRESS``SYNC_PORT`,默认仍只绑定 `127.0.0.1:8080`,只有测试部署显式使用 `0.0.0.0:18080`
- 外部验证 `/health``/ready`、协议握手、登录、创建与列出 Vault、退出登录全部成功。验证后已删除临时 Vault、设备和会话,只保留阶段一演示账号;数据库计数为 1 个用户、0 个 Vault、0 个会话。
- 目标机内存较小,部署为 PostgreSQL、MinIO、初始化任务和 Sync 分别设置 256、320、256、384 MiB 上限。验证时三项长期服务约使用 27、135、214 MiB。部署说明见 `docs/deployment/Server Sync阶段一部署-2026-09-10.md`,不包含口令或令牌。
## 增量:C-04 扩展资源与工具期限生产验收
- 为每个原生扩展实例增加 256 MiB scratch 上限。Host 每 100 ms 从实例专用物理目录重新遍历,拒绝重解析点、符号链接、非普通对象、超过 10000 个条目或超过配额;触发后返回 `EXTENSION_RESOURCE_SCRATCH_EXCEEDED` 并终止整个 Job 进程树。
- 发现 AppContainer 会把传入的物理 `Packages/<实例>/AC` 路径再次虚拟化,导致子进程 TEMP 出现双重 `AC/Packages/.../AC` 路径。现在启动数据为子进程提供 LocalAppData 下的逻辑路径,Host 继续持有并监控真实 scratch 路径,同时通过实例 SID 授予目录继承写权限。
- C-04 driver 固定执行四个精确 Rust Host oracle。真实后台 MCP 分别触发 CPU、512 MiB 内存、16 进程和 256 MiB scratch 上限,全部返回对应错误、清空进程树并能启动替代实例;scratch 超限本轮约 92 ms 可见。真实 60 秒工具期限在 60.015 秒左右回收两级进程树,期限前后 Host 均成功保存并重开本地笔记。文件 broker 第 33 个同秒请求返回 `EXTENSION_BROKER_RATE_LIMITED`
- 直接 driver 结果为 `PASSED`,四组断言全部通过。严格 Clippy `-D warnings` 通过;desktop Rust 全量回归 146 通过、0 失败、14 ignored,总耗时 744 秒;runner 7 项、Server Sync 30 项、前端类型检查和 542 项前端测试均通过。前端测试出现一次对未启动 `localhost:3000` 的预期连接拒绝诊断,但测试进程仍以 104 个文件、542 项全部通过结束。
- 测试依赖和断链目录在验证后从 G/H 盘清理,G 盘可用空间约 49.95 GiB。C-04 可记为通过,正式验收累计 19/30A-01/A-04、C-01/C-02、D-02/D-04 与 E-01E-05 尚未通过,不能据此声明完整第三阶段生产验收完成。