forked from admin/PlantAI-rag-new
feat(deploy): 176 部署完成与启动脚本可移植化
- start.sh×3: venv 解析改为安装包内 ../venv 优先(175 旧路径回退), 176 等目标机免改 - build_all.sh: start_all 模板补 vstore 拉起 + BFF 前 source sdk/.env + PYBIN 可移植解析 + env 目录 mkdir - DEPLOY_FLOW.md: §5.1 重写(176 实战模板: venv/torch 安装顺序/.env 键/ollama 离线携带/下载源可达性/内网直连), §0 增 176 已部署行 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,8 @@ ENTRY="${2:-app}"
|
||||
ENV_FILE="${LEGACY_ENV_FILE:-$AGENT_ROOT/env/prod.env}"
|
||||
LOG_FILE="${LEGACY_LOG_FILE:-/tmp/plantai-agent-legacy-$PORT.log}"
|
||||
PID_FILE="$AGENT_ROOT/run/legacy-$PORT.pid"
|
||||
PYTHON="${LEGACY_PYTHON:-/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python}"
|
||||
PYTHON="${LEGACY_PYTHON:-$AGENT_ROOT/../venv/bin/python}"
|
||||
[[ -x "$PYTHON" ]] || PYTHON="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python"
|
||||
BIND="${LEGACY_API_HOST:-127.0.0.1}"
|
||||
|
||||
case "$ENTRY" in
|
||||
|
||||
@@ -7,7 +7,8 @@ PORT="${1:-8092}" # 终态端口
|
||||
ENV_FILE="${METHODOLOGY_ENV_FILE:-$AGENT_ROOT/env/prod.env}"
|
||||
LOG_FILE="${METHODOLOGY_LOG_FILE:-/tmp/plantai-agent-methodology-$PORT.log}"
|
||||
PID_FILE="$AGENT_ROOT/run/methodology-$PORT.pid"
|
||||
PYTHON="${METHODOLOGY_PYTHON:-/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python}"
|
||||
PYTHON="${METHODOLOGY_PYTHON:-$AGENT_ROOT/../venv/bin/python}"
|
||||
[[ -x "$PYTHON" ]] || PYTHON="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python"
|
||||
BIND="${METHODOLOGY_API_HOST:-127.0.0.1}"
|
||||
|
||||
mkdir -p "$AGENT_ROOT/run"
|
||||
|
||||
@@ -7,7 +7,8 @@ PORT="${1:-8091}" # 终态端口
|
||||
ENV_FILE="${QA_ENV_FILE:-$AGENT_ROOT/env/prod.env}"
|
||||
LOG_FILE="${QA_LOG_FILE:-/tmp/plantai-agent-qa-$PORT.log}"
|
||||
PID_FILE="$AGENT_ROOT/run/qa-$PORT.pid"
|
||||
PYTHON="${QA_PYTHON:-/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python}"
|
||||
PYTHON="${QA_PYTHON:-$AGENT_ROOT/../venv/bin/python}"
|
||||
[[ -x "$PYTHON" ]] || PYTHON="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python"
|
||||
|
||||
mkdir -p "$AGENT_ROOT/run"
|
||||
[[ -x "$PYTHON" ]] || { echo "QA Python 不可执行: $PYTHON" >&2; exit 1; }
|
||||
|
||||
+16
-3
@@ -19,6 +19,7 @@
|
||||
| 打包产物目录 | `tooling/build/<VERSION>/install/`(VERSION 默认读 `tooling/tooling.env`,当前 2.0.0) |
|
||||
| 已就绪辅助脚本 | `deploy/ollama_restart.sh`(本地嵌入模型拉起)、`vstore/vstore_restart.sh`(路径自推导重启)已入包 |
|
||||
| nginx 代理模板 | `deploy/nginx/plantai.conf`(SSE 长连接 + 大文件上传适配,随安装包发布到 `install/nginx/`) |
|
||||
| 176 已部署 | **2026-09-09 按本标准完成 176 部署**(隧道B 接入,`/srv/plantai` 布局:install + qa-db + data + docgen;nginx 80 唯一入口;无 GPU、无 docker、无生信) |
|
||||
| QA 数据库裸进程 | **systemd 裸进程为最终部署标准**(无 docker):qdrant v1.18.3 + neo4j 5.15.0-community,全部 127.0.0.1;**端口 27433/27434 + 19888/19885**;数据在 `<部署根>/qa-db/`;安装脚本 `install/qa-db/install_qdrant.sh`、`install_neo4j.sh`(均免编译:官方静态二进制/tarball,支持本地 bin/ 离线分发);175 上 docker 容器(27333/19788)为其他项目共享服务、不动 |
|
||||
|
||||
## 1. 编译阶段(构建机)
|
||||
@@ -143,18 +144,30 @@ sudo bash qa-db/replace_db.sh neo4j <新data目录>
|
||||
### 5.1 环境准备
|
||||
|
||||
```bash
|
||||
# - 安装 py3.12 venv(或复用构建机 venv 的 rsync 拷贝),安装依赖(sdk/pyproject.toml 与 vstore/pyproject.toml 的 dependencies)
|
||||
# - 编辑 .env:sdk/.env(DOCGEN_LLM_* 与 VSTORE_BASE_URL)、vstore/.env(VSTORE_KEY、VSTORE_ROOT、VSTORE_EMBED_URL、VSTORE_EMBED_MODEL=bge-m3:567m)
|
||||
# - 安装 py3.12 venv 到 <安装根>/venv(start.sh/start_all.sh 均按 $ROOT/venv/bin/python 解析;175 旧路径为回退不再新建)
|
||||
# - 依赖安装:pip install torch==2.13.0 --index-url https://download.pytorch.org/whl/cpu 先行(PyPI 无 +cpu 构建),
|
||||
# 其余依赖用构建机 venv 的 pip freeze 清单安装
|
||||
# - 编辑 .env(176 实战模板):
|
||||
# sdk/.env = DOCGEN_LLM_*、VSTORE_BASE_URL=http://127.0.0.1:8094、BIOFLOW_ENABLED=false、
|
||||
# BFF_NEO4J_URI_NORMALIZED=bolt://127.0.0.1:19888(裸进程机必填!默认值是 docker 口 19788)
|
||||
# vstore/.env= VSTORE_KEY、VSTORE_ROOT=<部署根>/docgen、VSTORE_EMBED_URL=http://127.0.0.1:11434、VSTORE_EMBED_MODEL=bge-m3:567m
|
||||
# 并复制一份到 <安装根>/.env(vstore_restart.sh 从安装根 source)
|
||||
# qa|methodology|legacy-rag/env/prod.env = 路径类键(*_ROOT/PYTHONPATH/reranker/data)改目标机布局,密钥原样
|
||||
# - methodology/legacy-rag 的 data 目录(data/evaluation/*、data/pc、data/split)是运行时依赖,须随部署复制
|
||||
# - KB 密钥(若 SKIP_KB=0):把 kb.key 放到目标机并 chmod 600
|
||||
|
||||
cd /srv/plantai/install
|
||||
bash ollama_restart.sh # 本地嵌入模型(已运行则跳过;缺失模型会提示 ollama pull bge-m3:567m)
|
||||
bash start_all.sh # 四服务 + BFF;start_all.sh 内已先拉起 ollama
|
||||
bash start_all.sh # 五服务(QA/methodology/legacy/vstore/BFF);start_all.sh 内先拉 ollama、BFF 前 source sdk/.env
|
||||
# 生信(可选):
|
||||
docker load -i /tmp/plantai-bioflow-images.tar
|
||||
# 创建 bioflow_service 部署树 + .env(DOCGEN_LLM_*、BIOFLOW_IMAGE_MAP_PATH 指向 bioflow_kernel/assets 内的 stage_image_map.json)+ bash bioflow_service/restart.sh
|
||||
```
|
||||
|
||||
- **Ollama 离线携带(目标机连不上 ollama.com 时唯一路径)**:只拷二进制不够——完整布局为 `/opt/ollama/bin/ollama`(实体)+ `/usr/local/bin/ollama`(symlink 指回它)+ `/opt/ollama/lib/ollama/`(llama-server 与 ggml/cuda runner;缺失时报 `llama-server binary not found`)。模型拷 `~/.ollama/models/`(bge-m3:567m 需 manifests + 对应 blob 两个文件,约 1.2G)。无 GPU 机器嵌入为 CPU 推理(单次约 50s,功能正常)。
|
||||
- **下载源可达性(2026-09-09 实测)**:pypi/github/gh-proxy.com/ghfast.top/download.pytorch.org/apt 可达;ollama.com、registry.ollama.ai、dist.neo4j.org、objects.githubusercontent.com 不可达——neo4j 用 `qa-db/bin/` 离线 tarball(已入包),qdrant 下载走 gh-proxy 回退。
|
||||
- **内网直连传输**:两机同内网时用目标机 26518 端口 + 专用密钥(如 `id_ed25519_p2p`)直连 rsync,不经跳板机;`/srv/plantai` 须先在目标机建好并 chown 部署用户。
|
||||
|
||||
## 5b. nginx 安装与 80 端口代理(目标机,从零开始)
|
||||
|
||||
> 目标机此前没有 nginx。本节让 80 端口成为唯一客户入口;8090 等全部服务只回环可达。
|
||||
|
||||
+10
-1
@@ -123,6 +123,7 @@ cp "$PROJECT_ROOT/vstore/.env.example" "$RELEASE_ROOT/vstore/.env.example" 2>/de
|
||||
|
||||
# env 模板
|
||||
for t in qa methodology legacy-rag; do
|
||||
mkdir -p "$RELEASE_ROOT/$t/env"
|
||||
cp "$PROJECT_ROOT/agent/$t/env/prod.env.example" "$RELEASE_ROOT/$t/env/prod.env.example" 2>/dev/null || true
|
||||
done
|
||||
cp "$PROJECT_ROOT/sdk/.env.example" "$RELEASE_ROOT/sdk/.env.example" 2>/dev/null || true
|
||||
@@ -136,14 +137,22 @@ cat > "$RELEASE_ROOT/start_all.sh" <<'DEPLOY'
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BIND="${1:-127.0.0.1}"
|
||||
# Python 解析:安装包内 venv 优先(install/venv,可链到部署根),缺失退回 PATH python3
|
||||
PYBIN="${PLANTAI_PYTHON:-$ROOT/venv/bin/python}"
|
||||
[[ -x "$PYBIN" ]] || PYBIN="$(command -v python3)"
|
||||
echo "== 启动 PlantAI-rag-new 四服务 =="
|
||||
# 向量化本地模型(bge-m3 嵌入):先拉起 Ollama(已运行则跳过),模型缺失只告警不阻断
|
||||
bash "$ROOT/ollama_restart.sh" 2>/dev/null || echo "[ollama] 拉起失败,向量化降级(不阻断其余服务)"
|
||||
bash "$ROOT/qa/scripts/start.sh" 8091 || true
|
||||
bash "$ROOT/methodology/scripts/start.sh" 8092 || true
|
||||
bash "$ROOT/legacy-rag/scripts/start.sh" 8093 app || true
|
||||
bash "$ROOT/vstore_restart.sh" || echo "[vstore] 拉起失败,向量化不可用(不阻断其余服务)"
|
||||
sleep 3
|
||||
( cd "$ROOT/sdk" && setsid python -m uvicorn app.main:app --host "$BIND" --port 8090 \
|
||||
# BFF env:sdk/.env 含 DOCGEN_LLM_*、VSTORE_BASE_URL、BFF_NEO4J_*(无此 env BFF 上游不可用)
|
||||
set -a
|
||||
[ -f "$ROOT/sdk/.env" ] && . "$ROOT/sdk/.env"
|
||||
set +a
|
||||
( cd "$ROOT/sdk" && setsid "$PYBIN" -m uvicorn app.main:app --host "$BIND" --port 8090 \
|
||||
> /tmp/plantai-sdk.log 2>&1 < /dev/null & )
|
||||
echo "BFF 启动中(8090),5 秒后自检:"
|
||||
sleep 5
|
||||
|
||||
Reference in New Issue
Block a user