diff --git a/dsh-server-docs/BRIEF.md b/dsh-server-docs/BRIEF.md index f984e0c..ce690c1 100644 --- a/dsh-server-docs/BRIEF.md +++ b/dsh-server-docs/BRIEF.md @@ -2,13 +2,14 @@ > **用途**:30 秒掌握「现在是什么样、正在做什么、该读哪一篇」。只写**结论与指针**,细节的单一来源见每行括注。 > **防漂移**:本文件是**人工维护的摘要层**,不复制细节;`scripts/docs-audit.py` 会检查本文件引用的档案号是否存在、域名/阈值等关键串是否与来源文件一致。 -> **最后人工核对**:2026-09-12 18:35 +> **最后人工核对**:2026-09-16 10:5x --- ## 1. 一句话 -多租户 DSH 托管平台:门户(`alotbuy.com`)+ 每用户一个独立 dsh 实例(bwrap 合成根 + 独立 uid + systemd scope),部署在阿里云 `47.77.182.89`。 +多租户 DSH 托管平台:门户(`alotbuy.com`)+ 每用户一个独立 dsh 实例(bwrap 合成根 + 独立 uid + systemd scope)。 +**自 2026-09-15 起为集群形态**:`47.77.182.89` = **Manager**(cluster 模式,兼本地 Worker `w-47`)|**106 = Worker `w-106`**(经 SSH 反向隧道)。 ## 2. 现行事实(结论层 · 改任何东西前先对齐这里) @@ -16,7 +17,8 @@ |---|---|---| | **入口** | 门户 `https://alotbuy.com`;用户实例 `https://<用户名>.alotbuy.com`;旧域 `dsh.alotbuy.com` → **301** | 档案 22 / `DEPLOY §1` | | **服务** | systemd `dshs`(`127.0.0.1:3080`)+ 宝塔 nginx 反代(CF 回源 443) | `DEPLOY §1` | -| **运行时** | dsh **0.1.5-rc.1**(2026-09-14 由 0.1.2-rc.1 升级,走档案 07 五阶段全流程;官方包**零改动**)| Node 22.23.2 | pnpm 9.15.9 | bwrap 0.4.0 | nginx 1.28.3 | `DEPLOY §4` | 升级档案 `04/90` | +| **集群拓扑** | 47 = **Manager**(`deployMode=cluster`;控制面库 = 47 上 **PG13** `/var/lib/dshs-pg`,单元 `dshs-pg`,`127.0.0.1:15432`)+ 本地 Worker `w-47`(19100)|**106 = Worker `w-106`**(19000,**经 SSH 反向隧道**落在 Manager loopback,`DSHS_TUNNEL_TARGET`)|存量用户锚 `w-47`、新用户按容量落 `w-106`(**粘性优先**,`epoch` fencing 防双写)。⛔ 47 兼作 Worker 是**有意设计**,勿当待修项。**回滚** = `rm -f /etc/systemd/system/dshs.service.d/cluster.conf && systemctl daemon-reload && systemctl restart dshs` | `交接单/T08 §10` / `集群化改造方案_Manager-Worker_20260914.md` | +| **运行时** | dsh **0.1.5-rc.1**(2026-09-14 由 0.1.2-rc.1 升级,走档案 07 五阶段全流程;官方包**零改动**)| Node 22.23.2 | pnpm 9.15.9 | nginx 1.28.3 | ⚠️ **bwrap 逐机不同:47 = 0.4.0 / 106 = 0.11.0**(`--perms` 属 0.5+ ⇒ 47 上 `Unknown option` ⇒ 沙箱起不来 = 所有实例全挂;要权限**用 `--tmpfs`**) | `DEPLOY §4` | 升级档案 `04/90` | `交接单/T08 §10` | | **隔离** | `ISOLATION_MODE=account`;每用户 uid + bwrap 合成根(`/usr /lib64 /etc` 只读 + 私有 `/tmp` + `--unshare-pid`)+ scope(**内存 = 基础 448 MiB、最多浮动到 1024 MiB**(cgroup `MemoryHigh=MIN` 软限 + `MemoryMax=MAX` 硬限;**与插件开关无关**,2026-09-14,档案 **96**);CPU 150% / TasksMax 128;**V8 堆另须 `--max-old-space-size=256`**);**loopback `127.0.0.0/8` 已封** | 档案 16 / 39 / **58** / 94 / **96** | | **实例页右下角** | **📁 我的文件**(浏览工作区 + 下载 AI 产出)| **🧭 能力**(权威能力清单)| 老会话档位过时会有**顶部提示条** | 档案 56 | | **回到实例页面** | 页面可见即**自检**:顶部提示条「正在检查工作区连接…」→ 若判定页面与实例**已脱节**(探针 2.5 s 无 200)则亮**覆盖层**并**就地恢复**(`enter` 带新 token 原地跳回、**保留路径**),**不跳门户域、无需手动刷新**;导航路径(刷新/首次进入)仍走 `wake.html` 过渡页 | 档案 77(承 72) | @@ -28,18 +30,24 @@ | **证书** | `alotbuy.com + *.alotbuy.com`,DNS-01 via `/etc/cloudflare.ini`,**必须 `--dns-cloudflare-propagation-seconds 60`** | 档案 22 / `02 §C.1` | | **红线** | 不自动升级 dsh;不改官方 dsh 主程序与缓存;client bundle 禁 `exports.default`;服务器 docs 保持 root 600;未明确要求不 commit/push;⛔ **禁止人工删锁 / 接管**(**R9**) | `README §红线` | -## 3. 当前待办(**单一来源 = `03-路线图与待办.md`** + **已规划的单子见 `交接单/README.md §一`**,此处只列最相关的 6 条) +## 3. 当前待办(**单一来源 = `03-路线图与待办.md`** + **已规划的单子见 `交接单/README.md §一`**) + +> `T01–T08` **全部完成归档**;在途单 = **无**。以下只列最相关的几条。 | 优先级 | 事项 | 备注 | |---|---|---| -| 🔴 **待定窗口** | **档案 65 部署**(功能插件启停 ↔ web provider 托管段联动) | 代码完成 + 两态实测通过;**部署需 `systemctl restart dshs` → 中断在线用户**,等窗口 → 档案 65 §7.3 | -| P1 | **T03**:7 个自研插件整合为 1 个功能插件并投放 | **候选池上传已完成**(**现行池内 = `dsh-plugin-mcn-suite @0.3.9`**,09-13 00:02;0.3.0 曾因 peer 范围被预检拒收 → 0.3.2 加 `peerDependenciesMeta.optional` → 0.3.3 补 `xlsx` 依赖 → 0.3.9 修 client 注册层与 `inject` 语义);**admin 已装并验通(host 面 3 个注册)**;剩 **guest 未启用** → 用户在「能力管理」启用 → 重启 → 验收 → 归档 → `交接单/README.md §一` | -| P1 | **T01**:实例内「我的技能」section + 阶段 4 权限收口 | 决策点 1 **已定**(=**A 扩展 `business-plugins`**,2026-09-12 用户拍板);只等开工 → `交接单/T01-*.md` | -| 触发式 | dsh 升级回归(档案 26 六类耦合点)|会话 GC | 升级 / 容量触发 | +| 🔴 **第一件实事** | **会合 / 中继从 Manager 拆成可独立部署的组件** | 现状 = 绑在 Manager 上的**单中心 SSH 反向隧道**;是所有后续(多区域 / 多中心 / 骨干层)的**前置**。**只读取证 + 改造方案已产出**(工作区根 `会合中继拆分_取证与改造方案_20260916.md`,S0–S4 分步 + 每步验收/回滚)⇒ 下一步 = 从 **S0(抽接口,零行为变更)** 开工 | +| 🟡 待排期 | **T08 收尾项**:`join-worker.sh` 一键装机 | 集中日志 / metrics | `smoke-domain` 定性 | drop-in 里 PG 口令收权(现 root 可读)| 106 上的**旧控制面单元**待清理 | `03-路线图 §二` 🟡 / `交接单/T08 §16.5` | +| 🟡 待排期 | **106 的 provisioner 未铺** ⇒ 新用户落到 106 后**无人建号**(uid 须由 Manager 下发;47 上那套读 SQLite 的脚本在集群下失效) | 工作区根 `跨节点迁移与节点自举_完整流程方案_20260916.md` | +| 🟡 待排期 | 覆盖网络线后续:**`MEMORY.md` 精简**(已超体量上限、每轮都被注入)| 之后按**档案 112「只做三件事」**(presence + 游戏服放 L1 + 块级内容寻址)开工 | `03-路线图 §二` | +| ⏳ **待拍板** | **骨干节点的服务范围** = A 只服务自己名下设备 / B 服务全网(**倾向 A→B 渐进**) | 档案 **105 §七** | +| ⏳ 待拍板 | **D6**(集群化最后一问,**不阻塞**) | `集群化改造方案_Manager-Worker_20260914.md` | +| ❓ 待复核 | **档案 65**(功能插件启停 ↔ web provider 托管段联动)是否已随 09-13~09-15 各轮上线 —— 本节原行停在 09-12「等窗口」,未确认 | 档案 65 §7.3 | ## 4. 最近动作(详见 `03-路线图 §已完成`) -档案 77 **回到页面自检 + 就地恢复**:判据从「进程在不在跑」换成「**页面能不能连上实例**」(实例侧探针,`404/405` 自动降级回旧判据)+ **顶部提示条 / 覆盖层**(旧提示只活 600 ms,肉眼看不到)+ **不再跳门户域**(`proxy.ts` 单文件;配置层全绿,浏览器观感待实测)|**AnySearch 已按用户决定彻底放弃**(候选池条目下架 + 存量插件体检;下架当时池内仅 `dsh-univer-office` —— **09-13 起池内另有 `dsh-plugin-mcn-suite @0.3.9`**,见 §3 T03 行)|**R9 新红线**:⛔ **禁止人工删锁 / 接管**(用户 2026-09-12 明令)|档案 73 让锁真正拦得住人(措辞修正 + PreToolUse 强制钩子;待 `/hooks` 面板审核启用)|档案 72 实例回收后回到页面**自动唤醒重建连接**(`b23e386`)|档案 71 插件**兼容性预检**:导入/上传即判定(`8d19e89`)|档案 70 anysearch 插件与 dsh 不兼容致实例崩溃循环(**已止损**;能力已按用户决定下架)|档案 69 并发治理落地(commit 常态化 + 服务器侧操作锁)。**此前**:档案 68 候选池启停 root 属主污染根治(含 `npm pack` 带旧包修复)|档案 67「功能管理」section 按 UI 规范重做(v0.2.4)|档案 66 业务插件 P0 误报 → admin 显式信任|档案 65 功能插件启停 ↔ web provider 配置联动(待部署)|档案 64 接入 AnySearch 搜索 provider|档案 62 插件目录缓存状态可见化。**更早**:档案 58 实例内存配额下调(512M→384M)|档案 56 实例助手|档案 53 文档质量审查。 +**09-16** 覆盖网络 / 客户端化线:**10 份规划转正式档案 103–112**(`4e3a1a4`)+ **会合/中继拆分的只读取证与改造方案**产出(工作区根 `会合中继拆分_取证与改造方案_20260916.md`;**零代码、零服务器改动**)|`guest` 用户迁至 `w-106`(epoch 4)|106 补齐实例运行能力(**`/var/lib/dshs/users` 权限 711** —— 原 `drwx------` 会致实例必崩)+ ffmpeg/ffprobe。 +**09-15** **T08 集群化 + 生产整体切换**:47 = Manager、106 = Worker,控制面库换成 47 上的 **PG13**;`guest` 迁移;实例内存配额与插件开关**解耦**(档案 96);文档库**并入代码仓**(R4 选 a);开源导出 K8s 残留清零。**此前**:档案 100/101 实例内「我的技能」+ 分区改名 + 页内 tab(`business-plugins` 0.3.22)|档案 102 语言切换搬入「用户设置」(0.3.23 + `portal-entry` 0.5.5)|档案 93 兼容收口|档案 88 内置 dsh 安装路径探测|档案 77 回到页面自检 + 就地恢复|档案 73 让锁真正拦得住人|档案 72 实例回收后自动唤醒重建连接|档案 71 插件兼容性预检|档案 69 并发治理(commit 常态化 + 服务器侧操作锁)。 ## 5. 高频问题 → 读哪一篇 @@ -66,5 +74,6 @@ ## 7. 文档层约定 单一来源:清单与状态 = `INDEX.md` §二|待办 = `03-路线图`|部署事实 = `DEPLOY-本部署.md`|术语以档案 38b 为准|域名以 `alotbuy.com` 为准。详见 `README §阅读约定` 与档案 53 / 54。 +**归档编号**:至 **112**(其中 103–112 = 覆盖网络 / 客户端化 10 份规划);**编号 63 是空号,勿补占**。 **本机工作区(2026-09-13 起)**:`E:\ProgramData\AI技能\aliyun-dsh-server`(文档库工作树 = `dsh-server-docs/`);代码仓仍为 `D:\github\dsh_shenxian`。历史文档里出现的 `D:\AI技能\...` 一律是**迁移前旧值**,勿照抄执行。