Json-Python-Server/run.sh

127 lines
3.2 KiB
Bash
Raw Permalink Normal View History

2026-01-29 18:18:32 +08:00
#!/bin/bash
# FastAPI 应用启动脚本 (使用 uv 包管理)
set -e
echo "========================================"
echo "启动 FastAPI 时间序列分析系统 v2.0"
echo "========================================"
echo ""
# 检查 uv
if ! command -v /home/syy/.local/bin/uv &> /dev/null; then
echo "错误: 未找到 uv"
exit 1
fi
echo "✓ uv 已安装"
echo ""
# 检查虚拟环境,如果不存在则创建
if [ ! -d ".venv" ]; then
echo "创建虚拟环境..."
/home/syy/.local/bin/uv venv --python 3.10
fi
# 激活虚拟环境
echo "激活虚拟环境..."
source .venv/bin/activate
# 加载 .env不覆盖已存在的环境变量
if [ -f ".env" ]; then
echo "加载 .env..."
while IFS=$'\t' read -r key quoted_value; do
[ -z "$key" ] && continue
# 仅允许合法的环境变量名
if [[ ! "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
continue
fi
# 已在环境中显式设置的变量优先
if [ -z "${!key+x}" ]; then
eval "export ${key}=${quoted_value}"
fi
done < <(python - <<'PY'
import os
import shlex
try:
from dotenv import dotenv_values
except Exception:
dotenv_values = None
if dotenv_values is None:
raise SystemExit(0)
values = dotenv_values('.env')
for k, v in values.items():
if k is None or v is None:
continue
# 输出KEY<TAB>shell_quoted_value
print(f"{k}\t{shlex.quote(str(v))}")
PY
)
echo "✓ .env 加载完成"
echo ""
fi
# 检查并安装依赖
echo "检查依赖..."
python -c "import fastapi; import uvicorn; import pandas; import numpy" 2>/dev/null || {
echo "安装依赖..."
/home/syy/.local/bin/uv pip install \
'fastapi>=0.104.1' \
'uvicorn[standard]>=0.24.0' \
'python-multipart>=0.0.6' \
'python-dotenv>=1.0.0' \
'pandas>=2.2.2' \
'numpy>=1.26.4' \
'scipy>=1.13.0' \
'scikit-learn>=1.3.0' \
'statsmodels>=0.14.0' \
'matplotlib>=3.7.2' \
'seaborn>=0.12.2' \
'openai>=1.3.0' \
'gradio_client>=0.9.0' \
'requests>=2.31.0' \
'psutil>=5.9.5'
}
echo "✓ 依赖检查完成"
echo ""
# 创建必要的目录
mkdir -p uploads logs temp resource/fonts
# 设置环境变量(如果没有设置)
export ENV=${ENV:-"development"}
export DEBUG=${DEBUG:-"False"}
export HOST=${HOST:-"0.0.0.0"}
export PORT=${PORT:-"60201"}
export LOG_LEVEL=${LOG_LEVEL:-"INFO"}
echo "环境配置:"
echo " ENV=$ENV"
echo " DEBUG=$DEBUG"
echo " HOST=$HOST"
echo " PORT=$PORT"
echo " LOG_LEVEL=$LOG_LEVEL"
echo ""
# 启动应用
echo "启动应用..."
echo ""
echo "=================================="
echo "✓ 访问地址: http://localhost:$PORT"
echo "✓ API 文档: http://localhost:$PORT/docs"
echo "✓ ReDoc: http://localhost:$PORT/redoc"
echo "=================================="
echo ""
echo "按 Ctrl+C 停止应用"
echo ""
# 使用 uvicorn 运行
python -m uvicorn app.main:app \
--host $HOST \
--port $PORT \
--log-level $(echo $LOG_LEVEL | tr '[:upper:]' '[:lower:]')