90 lines
6.9 KiB
Markdown
90 lines
6.9 KiB
Markdown
# 接续包 · 涉密内容外置到配置目录(2026-09-19)
|
||||
|
|
|
|||
|
|
> **本包是唯一细节来源**。接续会话开工第一步:`state.py` → 重算本文件 md5 → 与 automation prompt 里的值比对,
|
|||
|
|
> **不符即停并报告「口径已更新,需重新接续」**。
|
|||
|
|
> ⚠️ **本棒已完成并入库**;下一棒默认动作 = **核实完成状态后报告结束**(⛔ 勿自行开工、⛔ 勿扩大范围)。
|
|||
|
|
|
|||
|
|
## 1. 目标(已达成)
|
|||
|
|
|
|||
|
|
**用户原话**:「很多涉密内容包含在代码中 开源时非常容易泄密,把所有涉密内容统一整理到配置文件夹对应文件中,
|
|||
|
|
代码中引用对应配置信息」+「处理完毕后 提交仓库」+ 收口时追加「改造后记得**完整检查两遍**」。
|
|||
|
|
|
|||
|
|
| # | 需求 | 状态 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| ① | 涉密内容统一收进配置文件夹 | ✅ 新建 `config/`,真实值入 `config/platform.env`(gitignore 排除) |
|
|||
|
|
| ② | 代码引用对应配置 | ✅ TS 走 `src/platform-paths.ts`;shell 走 `config/load.sh`;node 走 `config/index.cjs` |
|
|||
|
|
| ③ | 完整检查两遍 | ✅ 两遍均跑(语法 + 扫描 + 编译 + 测试),第 2 遍抓到第 1 遍的漏项 |
|
|||
|
|
| ④ | 提交仓库 | ✅ `452924d` 已提交并**双推**(原仓 + CNB,三方裸 sha 全等) |
|
|||
|
|
|
|||
|
|
## 2. 已完成(可核对的落点)
|
|||
|
|
|
|||
|
|
| 项 | 值 |
|
|||
|
|
|---|---|
|
|||
|
|
| commit | **`452924d89c87cbd175b31d57e26395dfbccaa52f`**(100 文件,+585/−453) |
|
|||
|
|
| 双推 | `work.alotbuy.com:maogeigei/dsh_shenxian.git` + `cnb.cool/maogeigei/dsh-shenxian.git` ⇒ 三方裸 sha **全等** |
|
|||
|
|
| 新增(入库) | `config/{platform.env.example,load.sh,index.cjs,README.md}` · `src/platform-paths.ts` |
|
|||
|
|
| 不入库 | `config/platform.env`(`.gitignore:37` 排除;服务器侧 600) |
|
|||
|
|
| 档案 | `dsh-server-docs/04-调整方案/140-涉密内容外置到配置目录.md`(**未登记 INDEX.md**) |
|
|||
|
|
| 部署 | 47:`config/`→`/opt/dshs/config/`(服务器侧由自身 env 生成 `platform.env`,32 键/600)· `lib/`→`/opt/dshs/lib`(297 文件) |
|
|||
|
|
| 新增 drop-in | `/etc/systemd/system/dshs.service.d/platform-dirs.conf`:`DSH_PLATFORM_DIR=/opt/dsh` · `DSH_INSTALL_DIR=/opt/dshs` |
|
|||
|
|
| 回滚点 | `/opt/dsh/backups/pre-secrets-config-20260919-150752/lib`(294 文件) |
|
|||
|
|
| 零回归 | `tsc` 0 错;`npm test` **373/375**(唯一失败 `lease` 属**既有**);`/opt/dsh/{state,backups}` 未搬家、`/var/lib/dshs/platform` 未误建;端点 200 / API 401 / 单元 active / 0 错误 |
|
|||
|
|
|
|||
|
|
## 3. 在途 / 未完成
|
|||
|
|
|
|||
|
|
- **无代码在途**。工作区仅剩历史临时目录(`_tmp_seq24/`、`_tmp_seq40/`、`_中间产物_待清理/`,本轮未动;
|
|||
|
|
本轮扫描器已移入 `_中间产物_待清理/_seq140_涉密外置/`,可删)。
|
|||
|
|
- 全局执行锁:**已释放**。档案占号锁 `.lock-140`:**已释放**。
|
|||
|
|
- **档案 140 未登记 `INDEX.md`**(本轮未做)。
|
|||
|
|
|
|||
|
|
## 4. 🔴 关键决定(后续别推翻)
|
|||
|
|
|
|||
|
|
1. **真实值只放 `config/platform.env`,且只放本机 / 对应机器那一份**。服务器侧的 `platform.env`
|
|||
|
|
由 `systemctl show dshs -p Environment` **生成** ⇒ ⛔ **drop-in 改动后必须重新生成**,否则脚本读旧值。
|
|||
|
|
2. **优先级 = 系统 env > `config/platform.env` > 代码内中性默认值**。代码内默认一律中性
|
|||
|
|
(`<数据根>/platform`、空域名),⛔ 别把生产值写回代码默认。
|
|||
|
|
3. 🔴 **`platform-dirs.conf` 必须保留 `DSH_PLATFORM_DIR=/opt/dsh`** —— 删掉它,`platformDir` 退化成
|
|||
|
|
`<dataRoot>/platform` = `/var/lib/dshs/platform` ⇒ state/backups/artifacts **静默搬家**。
|
|||
|
|
4. **`DEFAULT_OVERLAY_SEED` / `DEFAULT_OVERLAY_BOOTSTRAP_SEEDS` 刻意留空**,种子一律由
|
|||
|
|
`DSHS_OVERLAY_BOOTSTRAP_SEEDS` 提供(线上已配 3 条)。测试断言已把「必须为空」固化为回归项 ⇒ ⛔ 别写回生产域名。
|
|||
|
|
5. **`src/platform-paths.ts` 必须零副作用**(不 mkdir/不写文件)—— 它会被只读路径调用;
|
|||
|
|
`resolveConfig()` 会 mkdir 数据根并可能生成 `secret.key`,⛔ 不要在 paths 模块里调它。
|
|||
|
|
6. **注释里的真标识无法「引用配置」** ⇒ 一律中性化(`<server-public-ip>`/`<base-domain>`/`<host-a>`)。
|
|||
|
|
7. `web/wake.html` 的注册域白名单改为**运行时从 `location.hostname` 推导**(去最左一段)—— 换域名零改动。
|
|||
|
|
|
|||
|
|
## 5. 下一步(⛔ 无必须开工项)
|
|||
|
|
|
|||
|
|
1. **开源导出层要补一条**:`config/platform.env` 是新的「单一秘密副本」⇒ 导出**必须排除它**;
|
|||
|
|
若要随包发模板,**只能加 `platform.env.example`**(属技能 `dsh-opensource-release` 的 lane)。
|
|||
|
|
2. **档案 140 登记 `INDEX.md`**(本轮未做)。
|
|||
|
|
3. **可选**:`test/lease.test.mjs` 那 1 个既有失败(与本次无关)—— 修不修由你定。
|
|||
|
|
4. **既有缺陷已发现未动**:`scripts/start-cluster-manager.sh` 第 11 行原缺 `#` 注释前缀(会被当命令执行)。
|
|||
|
|
按「发现即报告、不顺手改」留给你。
|
|||
|
|
5. **既有约定,本轮未改(已报告)**:仓库 `core.autocrlf=true` ⇒ `scripts/*.sh`、`config/load.sh`
|
|||
|
|
在**索引里是 CRLF**(本机/服务器工作副本是 LF,故实际运行正常)。若将来改为 **Linux 端 `git clone` 部署**,
|
|||
|
|
`.sh` 会带 CRLF ⇒ source 失败 ⇒ 那时需给 `*.sh` 加 `-text`。**属仓库级改动(>10 文件),须先出清单再动。**
|
|||
|
|
6. **在册旧账(与本次无关)**:D8 云安全组(唯一在册红)、档案 136 控制面并集(已立项未落地)。
|
|||
|
|
7. 🔴 **`.workbuddy/memory/MEMORY.md` 已超注入上限(≈7,800 字符)**,本会话开机时系统已要求清理,
|
|||
|
|
**本轮未做**。⇒ 下一棒应做一次「只减不增」的合并去重(先把已过期/已被档案取代的条目删掉,
|
|||
|
|
再考虑新增),⛔ 别在超限状态下继续追加。
|
|||
|
|
|
|||
|
|
## 6. 复发验证(想自己复核时照跑)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 三方 sha
|
|||
|
|
cd /d/github/dsh_shenxian && git rev-parse HEAD
|
|||
|
|
git ls-remote origin -h refs/heads/master | cut -f1
|
|||
|
|
git ls-remote https://cnb.cool/maogeigei/dsh-shenxian.git -h refs/heads/master | cut -f1
|
|||
|
|
|
|||
|
|
# 代码面涉密标识应为 0(务必大小写不敏感 —— 大写 AI1net 曾漏过)
|
|||
|
|
grep -rniE 'ai1net|alotbuy|47\.77\.182\.89|/opt/dshs|/var/lib/dshs|dshs-worker-' src/ test/ scripts/ web/ assets/ config/ | grep -v 'platform.env'
|
|||
|
|
|
|||
|
|
# 派生路径零回归
|
|||
|
|
ssh -p 22 [email protected] 'ls /opt/dsh/state /opt/dsh/backups; ls -d /var/lib/dshs/platform 2>/dev/null && echo "回归!" || echo "no-platform-dir ok"'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
⚠️ **⛔ 不要用 `git stash` 做「临时回基线」**(HISTORY 里 2026-09-19 实测事故):
|
|||
|
|
本棒用它做基线比对时被 SIGTERM 打断 ⇒ **`.git/refs` 被删、仓库一度不可识别**,
|
|||
|
|
所幸 pack 完好 + reflog 完整,按 reflog(三处收敛 `9c2e7975`)重建 refs +
|
|||
|
|
`git fetch origin` 取回对象 + `git reset` 重建 index 后**完整恢复**(`git fsck` 干净)。
|
|||
|
|
⇒ 要基线比对用 `git worktree add`;动手前先落 patch / tar 备份。
|