Files
PlantAI-rag-new/deploy/qa-db/install_qdrant.sh
adminandClaude Fable 5 e151f675f1 feat(qa-db): QA数据库裸进程标准(deploy/qa-db五脚本+守卫去版本锁定+打包/文档/Excel同步)
- deploy/qa-db/: qdrant/neo4j systemd 裸进程安装脚本+unit模板+整库替换(replace_db.sh)
  * 数据双制品模型: <部署根>/qa-db 与 install 分开传输, 支持频繁整库替换
  * 免编译(官方静态二进制/tarball)+本地 bin/ 离线分发+国内镜像回退
  * 端口 27433/27434+19888/19885(127.0.0.1), 175 docker 容器(27333/19788)为其他项目共享不动
- backend_guard.py: 移除精确计数相等校验(数据库会整库替换/持续更新, 不得锁死版本)
  保留身份校验(release/collection/kb_version/标签/关系类型), 计数仅随 health 返回
- qa/scripts/start.sh: reranker 模型路径回退(install/models/bge-reranker-base)
- build_all.sh: qa-db 脚本+reranker 模型入包; .gitignore: qa-db/bin 离线载体
- DEPLOY_FLOW.md: §0/§5.0/§5.0b/§6.0b/§7 QA 数据库裸进程标准

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-08 17:59:53 +08:00

93 lines
4.2 KiB
Bash
Executable File
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.
#!/usr/bin/env bash
# deploy/qa-db/install_qdrant.sh —— PlantAI QA 数据库裸进程标准:Qdrant
# 用法(需 root):
# sudo -S bash install_qdrant.sh [QA_DB_ROOT] [HTTP_PORT] [GRPC_PORT]
# QA_DB_ROOT 默认 <安装根>/qa-db(release 树中即 install 的上一级;仓库树中即仓库根)
# HTTP_PORT 默认 27433;GRPC_PORT 默认 27434
# (与 docker 共享实例 27333/27334 互不冲突,175 上容器为其他项目服务、不动)
# 产物:/usr/local/bin/qdrant、/etc/qdrant/config.yaml、systemd 单元 qdrant-plantai.service
# 数据目录:$QA_DB_ROOT/qdrant/storage(整库替换见 replace_db.sh)
# 版本默认 v1.18.3(与 2026-08 容器实例 qdrant/qdrant:latest 对齐)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INSTALL_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
QA_DB_ROOT="${1:-${QA_DB_ROOT:-$INSTALL_ROOT/qa-db}}"
HTTP_PORT="${2:-27433}"
GRPC_PORT="${3:-27434}"
QDRANT_VERSION="${QDRANT_VERSION:-v1.18.3}"
RUN_USER="${RUN_USER:-${SUDO_USER:-xzq}}"
BIN=/usr/local/bin/qdrant
CONF=/etc/qdrant/config.yaml
UNIT=/etc/systemd/system/qdrant-plantai.service
STORAGE="$QA_DB_ROOT/qdrant/storage"
TPL="$SCRIPT_DIR/qdrant.service"
[[ $EUID -eq 0 ]] || { echo "需要 root:sudo -S bash $0 $*" >&2; exit 1; }
command -v curl >/dev/null || { echo "缺少 curl(apt install -y curl)" >&2; exit 1; }
id -u "$RUN_USER" >/dev/null 2>&1 || { echo "运行用户不存在:$RUN_USER" >&2; exit 1; }
# 1) 二进制(版本已符合则跳过;官方静态二进制,免编译)
if [[ -x "$BIN" ]] && "$BIN" --version 2>/dev/null | grep -q "$QDRANT_VERSION"; then
echo "[qdrant] 二进制已就绪:$("$BIN" --version 2>&1 | head -1)"
else
# 优先使用随包携带的本地二进制(离线/受限网络部署时从构建机 scp 到此目录)
LOCAL_BIN="$SCRIPT_DIR/bin/qdrant"
if [[ -x "$LOCAL_BIN" ]] && "$LOCAL_BIN" --version 2>/dev/null | grep -q "$QDRANT_VERSION"; then
echo "[qdrant] 使用本地二进制:$LOCAL_BIN"
install -m 0755 "$LOCAL_BIN" "$BIN"
else
echo "[qdrant] 下载 qdrant $QDRANT_VERSION ..."
URLS=(
"https://github.com/qdrant/qdrant/releases/download/$QDRANT_VERSION/qdrant-x86_64-unknown-linux-gnu.tar.gz"
"https://gh-proxy.com/https://github.com/qdrant/qdrant/releases/download/$QDRANT_VERSION/qdrant-x86_64-unknown-linux-gnu.tar.gz"
"https://ghfast.top/https://github.com/qdrant/qdrant/releases/download/$QDRANT_VERSION/qdrant-x86_64-unknown-linux-gnu.tar.gz"
)
ok=0
for u in "${URLS[@]}"; do
if curl -fL --connect-timeout 10 --max-time 300 -o /tmp/qdrant.tar.gz "$u" 2>/dev/null; then
ok=1; echo "[qdrant] 下载成功:$u"; break
fi
echo "[qdrant] 下载失败,换下一源:$u"
done
[[ $ok -eq 1 ]] || { echo "所有下载源失败,请手动放置二进制到 $BIN 或 $LOCAL_BIN" >&2; exit 1; }
tar -xzf /tmp/qdrant.tar.gz -C /tmp
install -m 0755 /tmp/qdrant "$BIN"
rm -f /tmp/qdrant.tar.gz /tmp/qdrant
"$BIN" --version | head -1
fi
fi
# 2) 数据目录 + 配置(config 由本脚本参数生成,不手改)
mkdir -p "$STORAGE" /etc/qdrant
cat > "$CONF" <<EOF
# PlantAI-rag-new Qdrant 裸进程配置(由 deploy/qa-db/install_qdrant.sh 生成,勿手改)
storage:
storage_path: $STORAGE
snapshots_path: $STORAGE/snapshots
service:
host: 127.0.0.1
http_port: $HTTP_PORT
grpc_port: $GRPC_PORT
enable_tls: false
telemetry_disabled: true
EOF
# 数据目录属主对齐运行用户(快照恢复时文件由 qdrant 进程自己创建)
chown -R "$RUN_USER:$RUN_USER" "$QA_DB_ROOT/qdrant"
# 3) systemd 单元(模板替换占位符)
sed -e "s|@HTTP_PORT@|$HTTP_PORT|g" -e "s|@BIN@|$BIN|g" -e "s|@CONF@|$CONF|g" -e "s|@RUN_USER@|$RUN_USER|g" -e "s|@QA_DB_ROOT@|$QA_DB_ROOT|g" "$TPL" > "$UNIT"
# 4) 幂等启动 + 探活
systemctl daemon-reload
systemctl enable --now qdrant-plantai.service >/dev/null 2>&1 || true
for _ in $(seq 1 30); do
if curl -sf --max-time 2 "http://127.0.0.1:$HTTP_PORT/collections" >/dev/null 2>&1; then
echo "[qdrant] UP http://127.0.0.1:$HTTP_PORT (storage: $STORAGE)"
exit 0
fi
sleep 2
done
echo "[qdrant] 启动失败:journalctl -u qdrant-plantai -n 50" >&2
exit 1