641e33b834
- 语义检索(FAISS + embedding)+ 精确查找(法规名+条号) - RAG 问答(SSE 流式,支持 thinking 折叠显示) - 法规浏览(原文阅读) - 历史记录(检索+对话持久化到 SQLite) - 设置页(系统提示词/模板/LLM 参数可配置) - 检索质量评估脚本 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
108 lines
3.8 KiB
Bash
Executable File
108 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# QYLAW 部署脚本 — 传输数据 + 构建镜像 + 启动容器
|
|
# 用法: bash scripts/deploy.sh
|
|
set -e
|
|
|
|
# ===== 配置 =====
|
|
REMOTE_HOST="nvidia@192.168.110.114"
|
|
REMOTE_LAW_PACK="/data/law-pack-2026-07-01-markdown"
|
|
REMOTE_LAW_KB_DATA="/data/law-kb-data"
|
|
LOCAL_LAW_PACK="/Users/freedak/Documents/AIDashboard/qy123/law-pack-2026-07-01-markdown"
|
|
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
echo "============================================"
|
|
echo " QYLAW 法律法规知识库部署"
|
|
echo " 时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo "============================================"
|
|
|
|
# ===== Step 1: 传输法规数据(若 114 上不存在)=====
|
|
echo ""
|
|
echo "[Step 1] 检查并传输法规数据..."
|
|
ssh "$REMOTE_HOST" "test -d $REMOTE_LAW_PACK && echo EXISTS || echo MISSING"
|
|
LAW_PACK_STATUS=$(ssh "$REMOTE_HOST" "test -d $REMOTE_LAW_PACK && echo EXISTS || echo MISSING")
|
|
|
|
if [ "$LAW_PACK_STATUS" = "MISSING" ]; then
|
|
echo " 法规数据不存在,开始 rsync 传输(310MB)..."
|
|
if [ ! -d "$LOCAL_LAW_PACK" ]; then
|
|
echo " [错误] 本地法规数据不存在: $LOCAL_LAW_PACK"
|
|
exit 1
|
|
fi
|
|
rsync -avz --progress "$LOCAL_LAW_PACK/" "$REMOTE_HOST:$REMOTE_LAW_PACK/"
|
|
echo " [OK] 法规数据传输完成"
|
|
else
|
|
echo " [OK] 法规数据已存在,跳过传输"
|
|
fi
|
|
|
|
# ===== Step 2: 创建索引数据目录 =====
|
|
echo ""
|
|
echo "[Step 2] 创建索引数据目录..."
|
|
ssh "$REMOTE_HOST" "mkdir -p $REMOTE_LAW_KB_DATA/faiss $REMOTE_LAW_KB_DATA/logs"
|
|
echo " [OK] 目录就绪"
|
|
|
|
# ===== Step 3: 传输项目代码并构建镜像 =====
|
|
echo ""
|
|
echo "[Step 3] 传输代码并构建 Docker 镜像..."
|
|
ssh "$REMOTE_HOST" "mkdir -p /data/project/law-kb"
|
|
rsync -avz --exclude '__pycache__' --exclude '.git' --exclude 'law-kb-data' \
|
|
"$PROJECT_DIR/" "$REMOTE_HOST:/data/project/law-kb/"
|
|
|
|
echo " 构建 Docker 镜像..."
|
|
ssh "$REMOTE_HOST" "cd /data/project/law-kb && docker build -t law-kb:latest ."
|
|
echo " [OK] 镜像构建完成"
|
|
|
|
# ===== Step 4: 停止旧容器(若存在)=====
|
|
echo ""
|
|
echo "[Step 4] 停止旧容器..."
|
|
ssh "$REMOTE_HOST" "docker rm -f law-kb 2>/dev/null || true"
|
|
echo " [OK] 旧容器已清理"
|
|
|
|
# ===== Step 5: 启动新容器 =====
|
|
echo ""
|
|
echo "[Step 5] 启动 law-kb 容器..."
|
|
ssh "$REMOTE_HOST" "
|
|
docker run -d --name law-kb --network host --restart unless-stopped \
|
|
-v $REMOTE_LAW_PACK:$REMOTE_LAW_PACK:ro \
|
|
-v $REMOTE_LAW_KB_DATA:$REMOTE_LAW_KB_DATA \
|
|
-e LAW_PACK_DIR=$REMOTE_LAW_PACK \
|
|
-e LAW_KB_DATA_DIR=$REMOTE_LAW_KB_DATA \
|
|
-e EMBEDDING_URL=http://localhost:8003/v1 \
|
|
-e LLM_URL=http://localhost:7000/v1 \
|
|
law-kb:latest
|
|
"
|
|
echo " [OK] 容器已启动"
|
|
|
|
# ===== Step 6: 健康检查 =====
|
|
echo ""
|
|
echo "[Step 6] 健康检查..."
|
|
sleep 3
|
|
echo " 等待服务启动..."
|
|
for i in $(seq 1 10); do
|
|
HEALTH=$(ssh "$REMOTE_HOST" "curl -s -o /dev/null -w '%{http_code}' http://localhost:8090/health 2>/dev/null || echo 000")
|
|
if [ "$HEALTH" = "200" ]; then
|
|
echo " [OK] 服务健康(尝试 $i)"
|
|
break
|
|
fi
|
|
echo " 等待中...($i/10, HTTP $HEALTH)"
|
|
sleep 2
|
|
done
|
|
|
|
# 统计
|
|
echo ""
|
|
echo " 索引状态:"
|
|
ssh "$REMOTE_HOST" "curl -s http://localhost:8090/api/stats 2>/dev/null | python3 -m json.tool 2>/dev/null || echo ' 统计接口未就绪(可能需要先构建索引)'"
|
|
|
|
echo ""
|
|
echo "============================================"
|
|
echo " 部署完成!"
|
|
echo " 访问: http://192.168.110.114:8090"
|
|
echo ""
|
|
echo " 下一步:"
|
|
echo " 1. 若索引未构建,执行:"
|
|
echo " ssh $REMOTE_HOST"
|
|
echo " docker run --rm --network host \\"
|
|
echo " -v $REMOTE_LAW_PACK:$REMOTE_LAW_PACK:ro \\"
|
|
echo " -v $REMOTE_LAW_KB_DATA:$REMOTE_LAW_KB_DATA \\"
|
|
echo " law-kb:latest python scripts/build_index.py --mode full"
|
|
echo " 2. 构建完成后重启容器: docker restart law-kb"
|
|
echo "============================================"
|