- 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>
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
构建流程
- 校验三个
.hardened-build.json与 CPython ABI。 - 建立隔离 staging,排除输入、历史输出、日志、缓存、Git、测试、密钥、许可证和符号链接,并加入最小离线 Pfam 家族映射。
- 删除已有同名 Cython
.so的.py明文副本。 - 拉取两个干净的官方 Python 基础镜像。
- 使用三个 Dockerfile 和三个独立依赖清单执行无缓存构建。
- 验证三个镜像的 Python 版本、加固标记、
.so和敏感文件名;额外验证 PlantAI 的hmmscan、hmmsearch、blastp、makeblastdb、完整 Pfam-A 数据库与离线家族映射, 并验证 RAG/QA 使用固定 CPU-only Torch。 - 导出三个应用镜像;按配置刷新并导出 Redis/Qdrant/Neo4j 上游镜像。
- 组装客户运行包并生成 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。