Json-Python-Server/run.sh
2026-01-29 18:18:32 +08:00

127 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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:]')