- _inst.sh: 补入遗漏的 3 个模块(confs 之后、core 之前) - ai_review/_fetch_onnx_model.sh: 新增 chromadb onnx 模型预下载脚本 (默认 ModelScope 镜像,支持 ONNX_MODEL_BASE_URL/CHROMA_CACHE_DIR 覆盖, 断点续传+幂等,绕过 chromadb 写死的 AWS S3 下载) - ai_review/_set.sh: 安装后自动调用模型下载 - README.md: 更新部署说明 - docs/reviews/DEPLOY_DEFECT_AUDIT_20260806.md: 新增部署缺陷审查报告 - docs/INDEX.md: 登记审查报告
4.3 KiB
4.3 KiB
blackbird 部署缺陷审查报告(2026-08-06)
来源:2026-08-06 首次原生编译部署全流程观察(qsont 运维实录) 范围:
_inst.sh构建链、systemd 单元、chromadb 模型下载、key 路径约定等部署/运维相关代码缺陷 状态标记:🔴 高(影响可靠性) 🟡 中(坑人/影响开发) 🟢 低(文档/非功能)
🔴 高(影响可靠性)
1. Nidus.service 没有 Restart= 配置
- 位置:
core/Nidus.service - 问题:README 声称"崩溃守护由 systemd 负责",但 service 文件只有
ExecStart,systemd 默认Restart=no。 - 影响:nidus 一旦崩溃不会被拉起,12 个服务全部停摆,且无告警。
- 建议:加
Restart=on-failure+RestartSec=5。
2. _inst.sh 遗漏 3 个模块(已修复 ✅)
- 位置:
_inst.sh(本次已修复) - 问题:ai_review、aibox、redirect80 不在构建列表,README 只提到 ai_review 需单独安装。
- 影响:按 README 部署的人会发现 init.txt 引用的服务有 3 个没装。
- 修复:已补入
_inst.sh(confs 之后、core 之前),并更新 README 说明。
3. chromadb 模型从 AWS S3 硬编码下载(已修复 ✅)
- 位置:chromadb 第三方库
onnx_mini_lm_l6_v2.py(MODEL_DOWNLOAD_URL写死 S3) - 问题:国内直连 18KB/s,90MB 模型要 1 小时+,下载失败直接抛异常导致服务起不来。
- 影响:ai_review 在国内环境首次启动必挂。
- 修复:新增
ai_review/_fetch_onnx_model.sh,默认从 ModelScope 镜像下载(560KB/s),支持ONNX_MODEL_BASE_URL/CHROMA_CACHE_DIR环境变量覆盖,断点续传 + 幂等;ai_review/_set.sh自动调用。
4. key 路径硬编码 + 运行身份不一致
- 位置:
aibox/_setenv.sh(读~/.cert/deepseek.key) - 问题:Nidus 以 root 运行,root 的
~与 qing 的~不是同一路径,部署时缺 key 服务启动即崩(RuntimeError),日志难排查。 - 影响:aibox / ai_review 缺 DeepSeek key 时静默崩溃。
- 建议:改为环境变量优先,fallback 到
/root/.cert/与/home/<user>/.cert/多路径探测。
🟡 中(坑人/影响开发)
5. waf/_gen.sh 产物与配置不匹配
- 位置:
waf/_gen.sh、waf/config.yaml - 问题:脚本生成
server.crt,配置要求certs/full_chain.crt,需手动改名/移动。 - 建议:脚本直接输出到
certs/目录并命名full_chain.crt。
6. pymsg 构建产物属主污染
- 位置:
pymsg/(egg-info / build 目录) - 问题:
_inst.sh以 root 运行,构建产物变成 root 属主,之后 qing 用户再构建报 "Cannot update time stamp"。 - 建议:构建脚本里
chown回原用户,或明确要求统一以 root 构建。
7. core Makefile install 注释掉 mkdir -p
- 位置:
core/Makefile(#@mkdir -p $(INSTL_DIRS)) - 问题:依赖目标目录预存在,
/usr/local/bin恰好存在所以未炸,属隐藏脆弱点。 - 建议:取消注释。
8. captcha/_set.sh 复制粘贴错误
- 位置:
captcha/_set.sh - 问题:nuitka 注释行写的是
smtp.py而非captcha.py(照抄 smtp)。 - 建议:修正为
captcha_service.py。
🟢 低(文档/非功能)
9. 部署树创建无文档
- 位置:README 部署章节
- 问题:
make install只装二进制和 systemd 单元,/opt/micro_servers需自行创建,首次部署必踩 127。 - 建议:README 补充
mkdir -p /opt/micro_servers与同步命令。
10. docker-compose 与原生部署并存
- 位置:
docker-compose.yml - 问题:compose 中 db/ai_review/dnfs 端口与原生部署冲突,切换方式未文档化。
- 建议:README 说明两种模式互斥,或提供
docker.sh切换脚本说明。
11. .env 无模板
- 位置:
ai_review/ - 问题:依赖 README 贴示例,无
.env.example,漏配一个 key 就是启动崩溃。 - 建议:提供
.env.example并纳入 git。
优先级建议
- #1 Restart 策略 — 一行 systemd 配置,消除生产事故级隐患
- #4 key 路径探测 — 消除部署时静默崩溃
- #5-#8 — 开发体验类,随手可改
- #9-#11 — 文档类,随 README 更新一起做