#!/bin/bash # deploy/bff_restart.sh —— 远端 BFF 重启(PM 使用,在远端执行) # 用法:ssh 192.168.0.175 -p 26518 'bash ~/5090/teamWorkspace/zh/PlantAI-rag-new/deploy/bff_restart.sh [bind_addr]' # 参数:可选绑定地址(默认 127.0.0.1;内网演示传 0.0.0.0) # 要点:用 setsid 完全脱离 SSH 会话,stdout/stderr 全部落日志。 set -uo pipefail ROOT="/home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new" BIND="${1:-127.0.0.1}" source ~/miniconda3/etc/profile.d/conda.sh conda activate plantai-bff # 杀旧进程([u] 正则技巧防 pkill 自匹配) pkill -f "[u]vicorn app.main:app" 2>/dev/null sleep 2 cd "$ROOT/backend" # 加载运行时凭据(backend/.env,不入 git)并导出给应用进程。 # pydantic-settings 会把 .env 载入 settings 对象,但 services/neo4j.py 的 # _env() 直接读 os.environ,故需显式 set -a 导出。 set -a [ -f .env ] && source .env set +a setsid python -m uvicorn app.main:app --host "$BIND" --port 8090 \ > /tmp/plantai-bff.log 2>&1 < /dev/null & disown sleep 5 if ss -tln | grep -q ":8090 "; then echo "BFF UP ($BIND:8090)" curl -s --max-time 20 http://127.0.0.1:8090/api/health | head -c 200 echo # 生产形态:静态托管 frontend/dist(存在时 BFF 单进程服务整个前端) curl -s --max-time 10 http://127.0.0.1:8090/ | grep -o "[^<]*" || echo "(静态托管未生效,需同步 dist)" else echo "BFF FAIL —— 日志尾部:" tail -15 /tmp/plantai-bff.log exit 1 fi