Files
jerryandClaude Fable 5 0875bb036c P0/M1: 四部分重构——frontend→ui、backend→sdk 改名 + 引用修复 + 骨架
- git mv 保留历史:ui/(Vue3+Vite)、sdk/(BFF 中间层)
- 路径语义修正:db_path/figures_cache 改相对 sdk/(BFF cwd),
  历史库 sdk/backend/data 迁移至 sdk/data/(会话/图片缓存无损)
- 引用修复 ~15 处:config.py、deploy/*.sh、vitest/playwright 配置、
  单测导入路径、docs、README、gitignore、.env.example
- 骨架:agent/{qa,methodology,legacy-rag,vendor}、knowledge/manifest.yaml、
  tooling/{compile,kb,crypto,assemble,audit,tools,scripts} + README
- 门禁验证:sdk pytest 125 通过、ui vitest 158 通过、
  生产 BFF 脚本重启四上游全绿 + 静态托管 + 会话库无损

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

93 lines
3.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# deploy/neo4j_recreate.sh —— Neo4j 容器重建扩容(方案 4,2026-08-26)
# 在远端执行:ssh -p 26518 8.163.92.8 'bash ~/5090/teamWorkspace/zh/PlantAI-rag-new/deploy/neo4j_recreate.sh'
#
# 背景:neo4j-plant-srt-direct-v1-full 是手工 docker run 创建的(无 compose 管理、
# 创建命令已丢失),heap 4G/12G、pagecache 24G。16.4M 关系的多跳遍历实测
# 108-147s,是问答延迟的最大瓶颈。docker update 改不了 Env,必须 stop+同名重建。
#
# 改动清单(与旧容器的差异):
# heap initial 4G -> 8G
# heap max 12G -> 24G
# pagecache 24G -> 24G(保持:数据目录仅 14G 已全缓存)
# transaction.total.max 未设(默认 70% heap) -> 显式 16G
# 不动:端口映射(18788/18575)、restart 策略、4 个 bind mount 数据目录。
#
# 停机窗口:QA 服务中断约 3-5 分钟(停 QA → 重建 → 数据校验 → 起 QA)。
set -uo pipefail
CONTAINER="neo4j-plant-srt-direct-v1-full"
IMAGE="neo4j:5.15.0-community"
DATA_ROOT="/home/xzq/home/wutx/gene-family-mas-v2/data/neo4j_plant_srt_direct_v1_docker"
RAG_DIR="/home/xzq/5090/PlanAI-cooperate/RAG/rag-develop"
ENV_FILE="/home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new/sdk/.env"
# 1. 从 sdk/.env 读真实密码(容器 Env 里的初始值是 password,运行时已改,必须用真实的)
NEO4J_PASSWORD=$(grep -oE "^BFF_NEO4J_PASSWORD_DIRECT=.*" "$ENV_FILE" | cut -d= -f2)
if [ -z "$NEO4J_PASSWORD" ]; then
echo "ERROR: 未在 $ENV_FILE 找到 BFF_NEO4J_PASSWORD_DIRECT"
exit 1
fi
echo "=== 前置检查 ==="
docker inspect "$CONTAINER" >/dev/null 2>&1 || { echo "ERROR: 容器 $CONTAINER 不存在"; exit 1; }
[ -d "$DATA_ROOT/data" ] || { echo "ERROR: 数据目录 $DATA_ROOT/data 不存在,拒绝继续"; exit 1; }
echo "数据目录大小: $(du -sh "$DATA_ROOT/data" 2>/dev/null | cut -f1)"
echo "密码来源: $ENV_FILE(已读取,不显示)"
echo
echo "=== 1. 停止 QA 服务(官方脚本)==="
(cd "$RAG_DIR" && bash start_plantAI_RAG.sh stop) || { echo "ERROR: 停 QA 失败,中止"; exit 1; }
echo
echo "=== 2. 停止并删除旧容器(数据在 bind mount,安全)==="
docker stop "$CONTAINER" || true
docker rm "$CONTAINER" || true
echo
echo "=== 3. 同名重建(内存扩容)==="
docker run -d --name "$CONTAINER" \
--restart unless-stopped \
-p 127.0.0.1:18788:7687 \
-p 127.0.0.1:18575:7474 \
-e "NEO4J_AUTH=neo4j/${NEO4J_PASSWORD}" \
-e NEO4J_server_memory_heap_initial__size=8G \
-e NEO4J_server_memory_heap_max__size=24G \
-e NEO4J_server_memory_pagecache_size=24G \
-e NEO4J_dbms_memory_transaction_total_max=16G \
-v "${DATA_ROOT}/data:/data" \
-v "${DATA_ROOT}/logs:/logs" \
-v "${DATA_ROOT}/plugins:/plugins" \
-v "${DATA_ROOT}/import:/var/lib/neo4j/import" \
"$IMAGE"
echo
echo "=== 4. 等待 Bolt 就绪(最多 180s,首次启动含恢复)==="
for i in $(seq 1 90); do
sleep 2
if docker exec "$CONTAINER" bash -c 'echo > /dev/tcp/127.0.0.1/7687' 2>/dev/null; then
echo "Bolt 就绪(${i}x2s)"
break
fi
if [ "$i" -eq 90 ]; then
echo "ERROR: Bolt 180s 未就绪,看容器日志:"
docker logs --tail 30 "$CONTAINER"
exit 1
fi
done
echo
echo "=== 5. 数据完整性校验 ==="
sleep 5 # 等数据库完全上线
docker exec "$CONTAINER" cypher-shell -u neo4j -p "$NEO4J_PASSWORD" \
"MATCH (e:SRT2CanonicalEntity) RETURN count(e) AS entities; MATCH (a:SRT2CanonicalAssertion) RETURN count(a) AS assertions;" \
2>&1 | head -10 || { echo "ERROR: 校验查询失败"; exit 1; }
echo
echo "=== 6. 起回 QA(官方脚本)==="
(cd "$RAG_DIR" && bash start_plantAI_RAG.sh start)
echo
echo "=== 完成。内存配置(容器内 conf)==="
docker exec "$CONTAINER" bash -c 'grep -E "heap|pagecache|transaction.total" /var/lib/neo4j/conf/neo4j.conf | grep -v "^#"' 2>/dev/null