127 lines
3.2 KiB
Bash
127 lines
3.2 KiB
Bash
#!/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:]')
|