Просмотр исходного кода

fix(langgraph): 重写 deploy.sh 为就地镜像构建部署

- 旧脚本 rsync 到 /opt/sc-data/cfc/cfc-langgraph 并 docker-compose restart;
  该路径已不存在,且 restart 不会重建镜像(代码是 Dockerfile COPY 进镜像的),
  导致脚本完全失效。
- 改为在脚本目录就地 docker compose build langgraph-svc + up -d,
  并补充 build 后带重试的健康检查。
opencode 1 день назад
Родитель
Сommit
0ef3905b2a
1 измененных файлов с 27 добавлено и 37 удалено
  1. 27 37
      cfc-langgraph/deploy.sh

+ 27 - 37
cfc-langgraph/deploy.sh

@@ -1,54 +1,44 @@
 #!/bin/bash
 # LangGraph 部署脚本
-# 用法: ./deploy.sh [生产|测试]
-# 会将本地 cfc-langgraph/ 代码同步到远程服务器并重启服务
+# 用法: ./deploy.sh
 #
-# 远程服务器: ai.etotem.com.cn (111.228.6.214)
-# 部署路径: /opt/sc-data/cfc/cfc-langgraph/
+# 说明:
+#   cfc-langgraph 以 Docker 镜像方式部署 —— Dockerfile 在构建时把 app/ 等代码 COPY 进镜像,
+#   因此代码变更必须「重新 build 镜像 + 重建容器」才能生效;仅 restart 不会加载新代码。
+#   本脚本在服务器上就地执行(服务地址 https://ai.etotem.com.cn,容器端口 9000)。
+#
+# 历史:旧版本 rsync 到 /opt/sc-data/cfc/cfc-langgraph 后执行 docker-compose restart,
+#   该路径已不存在,且 restart 无法更新镜像,故重写为就地 build + up。
 
 set -e
 
-ENV="${1:-prod}"
-REMOTE_USER="root"
-REMOTE_HOST="111.228.6.214"
-REMOTE_PATH="/opt/sc-data/cfc/cfc-langgraph"
-
 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+cd "$SCRIPT_DIR"
 
-echo "=== LangGraph Deploy ($ENV) ==="
-echo "本地: $SCRIPT_DIR"
-echo "远程: $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
+echo "=== LangGraph Deploy ==="
+echo "目录: $SCRIPT_DIR"
 
-# 同步代码(排除虚拟环境和缓存)
-echo "[1/3] 同步代码..."
-rsync -av --delete \
-  --exclude='.venv' \
-  --exclude='__pycache__' \
-  --exclude='*.pyc' \
-  --exclude='.env' \
-  --exclude='.env.production' \
-  --exclude='data/' \
-  --exclude='node_modules' \
-  --exclude='.git/' \
-  "$SCRIPT_DIR/" \
-  "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/"
+echo "[1/3] 构建镜像 (langgraph-svc)..."
+docker compose build langgraph-svc
 
-# 重启服务
-echo "[2/3] 重启 LangGraph 服务..."
-ssh "${REMOTE_USER}@${REMOTE_HOST}" "
-  cd ${REMOTE_PATH} && \
-  docker-compose restart langgraph-svc && \
-  sleep 3 && \
-  docker-compose ps langgraph-svc
-"
+echo "[2/3] 重建并启动服务..."
+docker compose up -d langgraph-svc
 
-# 健康检查
 echo "[3/3] 健康检查..."
-sleep 5
-if curl -sf "https://ai.etotem.com.cn/health" > /dev/null; then
+ok=0
+for i in $(seq 1 30); do
+  if curl -sf "https://ai.etotem.com.cn/health" > /dev/null 2>&1; then
+    ok=1
+    break
+  fi
+  echo "  等待服务就绪 ($i/30)..."
+  sleep 5
+done
+
+if [ "$ok" = "1" ]; then
   echo "✅ 部署成功!服务地址: https://ai.etotem.com.cn"
   curl -s "https://ai.etotem.com.cn/api/v1/health" | python3 -m json.tool 2>/dev/null || true
 else
-  echo "❌ 健康检查失败,请查看日志: ssh ${REMOTE_USER}@${REMOTE_HOST} 'docker-compose -f ${REMOTE_PATH}/docker-compose.yml logs langgraph-svc --tail=50'"
+  echo "❌ 健康检查失败,请查看日志: docker compose -f ${SCRIPT_DIR}/docker-compose.yml logs langgraph-svc --tail=50"
   exit 1
 fi