Files
jerryandClaude Fable 5 27946edc2b P0/M1: 收编 encryption-test 工具链入 tooling/
- legacy_plantai_server_package/: phase_a–f + compile_* + bin/plantai_admin.py
  + tools/(audit/elf_visibility/smoke/build_delivery_manifest) 完整基线
- legacy_docker_packager/: protected 形态参考
- crypto/client/: plantai_core.py(AES-GCM 原语) + install_plantai.sh 参考
- secrets/provision 严格排除(gitignore),入 git 前已脱敏清理
- LEGACY_MAPPING.md 记录源与改造方向

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 12:59:29 +08:00

97 lines
4.9 KiB
Markdown

# PlantAI / RAG / RAG-QA Docker 一键打包工具
本工具只封装已经完成阶段 A 加固的三个产物,不重新编译、不重新加密、不生成密钥、不签发许可证,也不启动现有服务。
## 当前构建策略
- 不构建或复制“全环境镜像”,镜像中不包含 `/opt/conda`、`test4py311`、`rnaseq`、`rnaR` 或 `gfpy312`。
- 不复用 `plantai-allenv` 或任何既有 PlantAI 应用镜像。
- PlantAI、RAG、RAG-QA 分别构建为三个独立镜像。
- PlantAI/RAG 从官方 `python:3.11-bookworm` 开始,RAG-QA 从官方 `python:3.12-bookworm` 开始。
- 正式构建固定使用 `docker pull`、`docker build --pull --no-cache`,确保重新解析基础镜像并从头安装运行时 Python 依赖。
- PlantAI 只额外安装 Identify 必需的 `hmmer` 和 `ncbi-blast+`,不恢复旧 Conda/allenv。
- RAG/QA 固定从 PyTorch 官方 CPU 索引安装 `torch==2.13.0+cpu`,不从通用
`torch>=2.0` 解析并下载 CUDA 运行库。
- Debian 源切换为 HTTPS,并结合 `BUILD_NETWORK=host`、下载重试与超时控制,避免此前 Docker bridge 访问 `deb.debian.org:80` 超时。
官方 Python 基础镜像仍然是 Docker 构建所需的干净操作系统/Python 起点,但它不是已有业务镜像,也不包含旧 PlantAI 文件。
## 一键使用
```bash
cd /home/xzq/5090/PlanAI-cooperate/hsj-workspace/encryption-test/server/protected_docker_packager
cp pack.env.example pack.env
vi pack.env
CHECK_ONLY=1 bash build_package.sh
bash build_package.sh
```
正式构建输出:
```text
dist/plantai-protected-docker-1.0.0-linux-amd64.tar.zst
dist/plantai-protected-docker-1.0.0-linux-amd64.tar.zst.sha256
```
同名包已存在时默认拒绝覆盖;确认只覆盖本工具自己的旧输出后使用:
```bash
OVERWRITE=1 bash build_package.sh
```
## 构建流程
1. 校验三个 `.hardened-build.json` 与 CPython ABI。
2. 建立隔离 staging,排除输入、历史输出、日志、缓存、Git、测试、密钥、许可证和符号链接,并加入最小离线 Pfam 家族映射。
3. 删除已有同名 Cython `.so` 的 `.py` 明文副本。
4. 拉取两个干净的官方 Python 基础镜像。
5. 使用三个 Dockerfile 和三个独立依赖清单执行无缓存构建。
6. 验证三个镜像的 Python 版本、加固标记、`.so` 和敏感文件名;额外验证 PlantAI
的 `hmmscan`、`hmmsearch`、`blastp`、`makeblastdb`、完整 Pfam-A 数据库与离线家族映射,
并验证 RAG/QA 使用固定 CPU-only Torch。
7. 导出三个应用镜像;按配置刷新并导出 Redis/Qdrant/Neo4j 上游镜像。
8. 组装客户运行包并生成 SHA-256。
`CHECK_ONLY=1` 只验证路径、ABI、排除规则、staging、Docker 构建策略和 Compose,不拉取或构建镜像。
## 非全环境模式的边界
当前镜像只安装 Python 应用运行依赖。依赖以下专用环境或外部二进制的任务不会由本包提供:
- RNA-seq 专用 Conda 环境;
- R 及 RNA-R 分析环境;
- gene-family 专用 Python/系统工具链;
- 其他系统级生信软件、数据库客户端或 GPU/CUDA 运行库。
例外是 Identify 的最小必要工具:`hmmer` 和 `ncbi-blast+` 已直接安装进 PlantAI 镜像。
这不代表 RNA-seq、R 绘图或其他全环境已经恢复。
为避免已知家族在 RAG 数据暂不可用时直接失败,构建工具还会写入以下经过源码现有
别名表核对的最小离线映射:SPL/SBP → `PF03110`、WRKY → `PF03106`、
NAC → `PF02365`。这只修复这些已知家族的 Identify 入口,不代替完整知识库。
因此 Compose 的 `worker-medium` 只监听 `.medium` 队列,不监听 `.rnaseq`、`.rnar`、`.gfpy`。如果客户确实需要这些任务,应把相应工具做成独立受控镜像或挂载为客户现场依赖,不能再把整个 allenv 塞回应用镜像。
客户仍需单独准备 Ollama/模型、RAG-QA reranker 模型、Qdrant/Neo4j 业务数据、密码和 API 配置。
当前模板中的 `NEO4J_PASSWORD=test1234` 仅用于本次测试,正式交付前必须替换。
## 客户侧安装
```bash
sha256sum -c plantai-protected-docker-1.0.0-linux-amd64.tar.zst.sha256
tar --zstd -xf plantai-protected-docker-1.0.0-linux-amd64.tar.zst
cd plantai_protected_product
./install.sh
vi bbav5.env
./start.sh
./health-check.sh
```
`health-check.sh` 不再只判断端口是否能访问,还会拒绝“Qdrant collection 为空”或
“Neo4j 节点数为 0”的伪健康状态。若在全新安装目录启动但未恢复业务数据,该检查
会明确失败;这表示 RAG 数据未就绪,而不是容器未启动。
## 安全说明
Docker 是封装,不是新的密码学加密层。本包不做 TPM/硬件绑定,镜像持有者能够加载和检查镜像;Cython `.so` 只能提高逆向成本。不得把 `server/secrets`、私钥、主密钥、`license.json` 或真实 `.env` 放入本工具目录或构建上下文。Compose 默认只绑定 `127.0.0.1`。