#!/bin/bash # Docker环境服务管理脚本 SERVICE_NAME="lottery-system-docker" case "$1" in start) echo "🚀 启动彩票数据分析系统 (Docker环境)..." # 启动后端服务 cd backend source venv/bin/activate nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 > backend.log 2>&1 & echo $! > backend.pid cd .. # 启动定时任务 nohup python3 scheduler.py > scheduler.log 2>&1 & echo $! > scheduler.pid # 重启nginx容器 echo "🔄 重启nginx容器..." docker restart dnmp-nginx echo "✅ 服务启动完成" ;; stop) echo "🛑 停止彩票数据分析系统..." # 停止后端 if [ -f "backend/backend.pid" ]; then kill $(cat backend/backend.pid) 2>/dev/null rm backend/backend.pid fi # 停止定时任务 if [ -f "scheduler.pid" ]; then kill $(cat scheduler.pid) 2>/dev/null rm scheduler.pid fi # 强制停止所有相关进程 pkill -f uvicorn pkill -f scheduler.py echo "✅ 服务停止完成" ;; restart) echo "🔄 重启彩票数据分析系统..." $0 stop sleep 2 $0 start ;; status) echo "📊 服务状态检查 (Docker环境)..." # 检查后端 if curl -f http://localhost:8000/health > /dev/null 2>&1; then echo "✅ 后端服务: 运行中 (localhost:8000)" else echo "❌ 后端服务: 未运行" fi # 检查nginx容器 if docker ps | grep -q dnmp-nginx; then echo "✅ nginx容器: 运行中" else echo "❌ nginx容器: 未运行" fi # 检查前端访问 if curl -f https://cp.mzh.one/ > /dev/null 2>&1; then echo "✅ 前端页面: 可访问" else echo "❌ 前端页面: 不可访问" fi # 检查API访问 if curl -f https://cp.mzh.one/api/v1/lottery/ssq/latest > /dev/null 2>&1; then echo "✅ API接口: 可访问" else echo "❌ API接口: 不可访问" fi # 检查定时任务 if pgrep -f scheduler.py > /dev/null; then echo "✅ 定时任务: 运行中" else echo "❌ 定时任务: 未运行" fi # 显示进程信息 echo "" echo "📋 进程信息:" ps aux | grep -E "(uvicorn|scheduler)" | grep -v grep # 显示容器信息 echo "" echo "📋 容器信息:" docker ps | grep dnmp ;; logs) echo "📋 查看日志..." case "$2" in backend) tail -f backend/backend.log ;; scheduler) tail -f scheduler.log ;; nginx) docker exec dnmp-nginx tail -f /var/log/nginx/error.log ;; nginx-access) docker exec dnmp-nginx tail -f /var/log/nginx/access.log ;; *) echo "用法: $0 logs {backend|scheduler|nginx|nginx-access}" ;; esac ;; deploy) echo "🚀 部署系统 (Docker环境)..." # 构建前端 cd frontend npm run build cd .. # 检查前端构建文件是否存在 if [ ! -d "frontend/dist" ]; then echo "❌ 前端构建失败" exit 1 fi # 复制前端文件到nginx容器 echo "📁 部署前端文件到nginx容器..." docker cp frontend/dist/. dnmp-nginx:/opt/mottery/frontend/dist/ # 重启服务 $0 restart echo "✅ 部署完成" ;; fix-nginx) echo "🔧 修复nginx配置..." # 运行修复脚本 if [ -f "fix_docker_nginx.sh" ]; then chmod +x fix_docker_nginx.sh ./fix_docker_nginx.sh else echo "❌ 找不到修复脚本 fix_docker_nginx.sh" exit 1 fi ;; test-backend) echo "🧪 测试后端连接..." # 测试不同的后端地址 echo "测试 localhost:8000..." if curl -f http://localhost:8000/health > /dev/null 2>&1; then echo "✅ localhost:8000 连接正常" else echo "❌ localhost:8000 连接失败" fi echo "测试 host.docker.internal:8000..." if curl -f http://host.docker.internal:8000/health > /dev/null 2>&1; then echo "✅ host.docker.internal:8000 连接正常" else echo "❌ host.docker.internal:8000 连接失败" fi echo "测试 172.17.0.1:8000..." if curl -f http://172.17.0.1:8000/health > /dev/null 2>&1; then echo "✅ 172.17.0.1:8000 连接正常" else echo "❌ 172.17.0.1:8000 连接失败" fi echo "测试 172.18.0.1:8000..." if curl -f http://172.18.0.1:8000/health > /dev/null 2>&1; then echo "✅ 172.18.0.1:8000 连接正常" else echo "❌ 172.18.0.1:8000 连接失败" fi ;; *) echo "用法: $0 {start|stop|restart|status|logs|deploy|fix-nginx|test-backend}" echo "" echo "命令说明:" echo " start - 启动所有服务" echo " stop - 停止所有服务" echo " restart - 重启所有服务" echo " status - 查看服务状态" echo " logs - 查看日志 (用法: $0 logs {backend|scheduler|nginx|nginx-access})" echo " deploy - 部署系统" echo " fix-nginx - 修复nginx配置" echo " test-backend - 测试后端连接" exit 1 ;; esac