| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/bin/sh
- # 游铛铛客户端后端 — 生产环境启动脚本
- # 虚拟环境选择顺序(与当前 shell 里 echo $VIRTUAL_ENV 无关,以实际 python 路径为准):
- # 1) 环境变量 VENV_DIR(显式指定,如 /root/sync_goods/venv)
- # 2) 与 backend-client 同级的 sync_goods/venv(常见生产布局:~/backend-client + ~/sync_goods/venv)
- # 3) 本目录 venv 或 .venv
- # 兼容 /bin/sh(dash)
- set -e
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- NC='\033[0m'
- SCRIPT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd)
- cd "$SCRIPT_DIR"
- printf '%b\n' "${GREEN}游铛铛客户端后端(生产)${NC}"
- if [ ! -f "app/main.py" ]; then
- printf '%b\n' "${RED}错误:未找到 app/main.py,脚本应位于 backend-client 目录${NC}"
- exit 1
- fi
- SYNC_GOODS_VENV="$SCRIPT_DIR/../sync_goods/venv"
- if [ -n "${VENV_DIR:-}" ]; then
- if [ ! -f "$VENV_DIR/bin/python" ]; then
- printf '%b\n' "${RED}错误:VENV_DIR=$VENV_DIR 下未找到 bin/python${NC}"
- exit 1
- fi
- VENV_ROOT=$(CDPATH= cd -- "$VENV_DIR" && pwd)
- elif [ -f "$SYNC_GOODS_VENV/bin/python" ]; then
- VENV_ROOT=$(CDPATH= cd -- "$SYNC_GOODS_VENV" && pwd)
- elif [ -f "venv/bin/python" ]; then
- VENV_ROOT="$SCRIPT_DIR/venv"
- elif [ -f ".venv/bin/python" ]; then
- VENV_ROOT="$SCRIPT_DIR/.venv"
- else
- printf '%b\n' "${RED}错误:未找到可用的虚拟环境${NC}"
- printf '%b\n' "${YELLOW}已按顺序查找: \$VENV_DIR、$SYNC_GOODS_VENV、$SCRIPT_DIR/venv、$SCRIPT_DIR/.venv${NC}"
- printf '%b\n' "${YELLOW}请指定:export VENV_DIR=/你的/venv路径 再执行本脚本${NC}"
- exit 1
- fi
- PYTHON_BIN="$VENV_ROOT/bin/python"
- printf '%b\n' "${GREEN}使用虚拟环境: $VENV_ROOT${NC}"
- if ! "$PYTHON_BIN" -c "import uvicorn" > /dev/null 2>&1; then
- if [ ! -f requirements.txt ]; then
- printf '%b\n' "${RED}错误:缺少 requirements.txt,无法安装依赖${NC}"
- exit 1
- fi
- if [ "${START_PROD_NO_AUTO_PIP:-}" = "1" ]; then
- printf '%b\n' "${RED}错误:venv 中未安装 uvicorn,且已设置 START_PROD_NO_AUTO_PIP=1 跳过自动安装${NC}"
- printf '%b\n' "${YELLOW}请执行: $PYTHON_BIN -m pip install -r $SCRIPT_DIR/requirements.txt${NC}"
- exit 1
- fi
- printf '%b\n' "${YELLOW}未检测到 uvicorn,正在执行: $PYTHON_BIN -m pip install -r requirements.txt${NC}"
- "$PYTHON_BIN" -m pip install -r requirements.txt
- fi
- if ! "$PYTHON_BIN" -c "import uvicorn" > /dev/null 2>&1; then
- printf '%b\n' "${RED}错误:安装依赖后仍无法 import uvicorn${NC}"
- exit 1
- fi
- printf '%b\n' "${GREEN}启动客户端生产服务器...${NC}"
- printf '%b\n' "${YELLOW}API 文档:http://125.122.32.114:9000/docs${NC}"
- exec "$PYTHON_BIN" -m uvicorn app.main:app --host 0.0.0.0 --port 9000 --workers 4
|