From 9bc3c94dd192f07a223492a9f45ac0610d2f5f5e Mon Sep 17 00:00:00 2001 From: yueli Date: Mon, 31 Aug 2026 16:51:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=E4=BF=AE=E5=A4=8D=E7=AC=AC4?= =?UTF-8?q?=E6=AD=A5=20ssh=20=E8=BF=9C=E7=AB=AF=E5=91=BD=E4=BB=A4=E8=A2=AB?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=20bash=20=E5=B1=95=E5=BC=80=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第4步远端命令用双引号包裹,内部 $(curl ...) 与 $API_CODE 会被本地 bash 提前展开、嵌套双引号导致引号错乱,远端命令被污染后卡死。 - 移除 API 验证的 $(curl)/$API_CODE(历史一直未在远端执行过,属可选增强) - nginx 验证改为无嵌套引号的 (grep && echo || echo) 结构 - 保留去 sudo 化与 models 排除,全流程免密 --- deploy_code.sh | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/deploy_code.sh b/deploy_code.sh index 511b533..55ec66f 100644 --- a/deploy_code.sh +++ b/deploy_code.sh @@ -84,6 +84,8 @@ if [ $? -ne 0 ]; then fi # 4. 服务器执行替换与重启 +# ★ 注意:ssh 远端命令用双引号包裹,内部绝不能出现 $(...) 或嵌套双引号, +# 否则会被本地 bash 提前展开/引号错乱(历史 bug:API_CODE 被本地 curl 展开导致远端命令污染) echo "[4/4] 正在生产环境执行热更新 (全程免密)..." ssh $SERVER "cd $REMOTE_DIR && \ echo '>> 移除历史旧目录...' && \ @@ -96,20 +98,10 @@ ssh $SERVER "cd $REMOTE_DIR && \ tar -xzf deploy.tar.gz && \ echo '>> 重启 Docker 容器...' && \ docker compose -f docker-compose.prod.yml up -d --build backend frontend && \ - echo '>> 验证 nginx 代理配置...' && \ + echo '>> 等待服务就绪...' && \ sleep 5 && \ - if docker exec inventory_ui_prod grep -q "inventory_api_prod" /etc/nginx/conf.d/default.conf; then \ - echo '✅ nginx 代理已指向 inventory_api_prod'; \ - else \ - echo '⚠️ 警告: nginx 代理仍是 backend,可能出现 /api/ 404!请检查 nginx.conf'; \ - fi && \ - echo '>> 验证 API 连通性...' && \ - API_CODE=$(curl -k -s -o /dev/null -w "%{http_code}" "https://localhost/api/inbound/base/units") && \ - if [ "$API_CODE" = "404" ]; then \ - echo '⚠️ 警告: API 返回 404,代理可能指向了错误的容器!'; \ - else \ - echo "✅ API 连通性正常 HTTP=$API_CODE"; \ - fi && \ + echo '>> 验证 nginx 代理配置...' && \ + (docker exec inventory_ui_prod grep -q inventory_api_prod /etc/nginx/conf.d/default.conf && echo '✅ nginx 代理已指向 inventory_api_prod' || echo '⚠️ 警告: nginx 代理仍是 backend,可能出现 /api/ 404!请检查 nginx.conf') && \ rm deploy.tar.gz" if [ $? -ne 0 ]; then