65 lines
1.8 KiB
Bash
65 lines
1.8 KiB
Bash
#!/bin/bash
|
|
# 生产环境启动脚本 - app.py (Flask + SocketIO)
|
|
# 使用 Gunicorn + geventwebsocket 支持高并发
|
|
|
|
set -e
|
|
|
|
# 颜色输出
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}============================================${NC}"
|
|
echo -e "${GREEN}🚀 启动 VF React 生产服务器${NC}"
|
|
echo -e "${GREEN}============================================${NC}"
|
|
|
|
# 切换到脚本所在目录
|
|
cd "$(dirname "$0")"
|
|
|
|
# 检查 Python 环境
|
|
if ! command -v python3 &> /dev/null; then
|
|
echo -e "${RED}❌ Python3 未安装${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 检查 gunicorn
|
|
if ! command -v gunicorn &> /dev/null; then
|
|
echo -e "${YELLOW}⚠️ Gunicorn 未安装,正在安装...${NC}"
|
|
pip install gunicorn
|
|
fi
|
|
|
|
# 检查必要的依赖
|
|
echo -e "${GREEN}📦 检查依赖...${NC}"
|
|
python3 -c "import gevent; import geventwebsocket" 2>/dev/null || {
|
|
echo -e "${RED}❌ 缺少 gevent 或 geventwebsocket${NC}"
|
|
echo "运行: pip install gevent gevent-websocket"
|
|
exit 1
|
|
}
|
|
|
|
# 检查 Redis
|
|
echo -e "${GREEN}🔍 检查 Redis 连接...${NC}"
|
|
python3 -c "import redis; r=redis.Redis(); r.ping()" 2>/dev/null || {
|
|
echo -e "${YELLOW}⚠️ Redis 连接失败,请确保 Redis 正在运行${NC}"
|
|
}
|
|
|
|
# 停止旧进程(如果存在)
|
|
if [ -f /tmp/gunicorn_app.pid ]; then
|
|
OLD_PID=$(cat /tmp/gunicorn_app.pid)
|
|
if kill -0 $OLD_PID 2>/dev/null; then
|
|
echo -e "${YELLOW}🛑 停止旧进程 (PID: $OLD_PID)...${NC}"
|
|
kill -TERM $OLD_PID
|
|
sleep 2
|
|
fi
|
|
fi
|
|
|
|
# 启动服务器
|
|
echo -e "${GREEN}🚀 启动 Gunicorn + Flask-SocketIO...${NC}"
|
|
echo -e "${GREEN} 配置: gunicorn_app_config.py${NC}"
|
|
echo -e "${GREEN} 端口: 5001${NC}"
|
|
echo -e "${GREEN} Worker: GeventWebSocketWorker${NC}"
|
|
|
|
# 使用 gunicorn 启动(支持 WebSocket 的高并发模式)
|
|
exec gunicorn -c gunicorn_app_config.py app:app
|
|
|