Files
PlantAI-rag-new/tooling/legacy_docker_packager/README.md
T
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

4.9 KiB

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 文件。

一键使用

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

正式构建输出:

dist/plantai-protected-docker-1.0.0-linux-amd64.tar.zst
dist/plantai-protected-docker-1.0.0-linux-amd64.tar.zst.sha256

同名包已存在时默认拒绝覆盖;确认只覆盖本工具自己的旧输出后使用:

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 仅用于本次测试,正式交付前必须替换。

客户侧安装

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。