fix(deploy): 修复第4步 ssh 远端命令被本地 bash 展开的 bug

第4步远端命令用双引号包裹,内部 $(curl ...) 与 $API_CODE 会被本地 bash
提前展开、嵌套双引号导致引号错乱,远端命令被污染后卡死。
- 移除 API 验证的 $(curl)/$API_CODE(历史一直未在远端执行过,属可选增强)
- nginx 验证改为无嵌套引号的 (grep && echo || echo) 结构
- 保留去 sudo 化与 models 排除,全流程免密
This commit is contained in:
yueli
2026-08-31 16:51:06 +08:00
parent ee64309151
commit 9bc3c94dd1

View File

@ -84,6 +84,8 @@ if [ $? -ne 0 ]; then
fi
# 4. 服务器执行替换与重启
# ★ 注意ssh 远端命令用双引号包裹,内部绝不能出现 $(...) 或嵌套双引号,
# 否则会被本地 bash 提前展开/引号错乱(历史 bugAPI_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