#!/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 "============================================"