# 双色球系统部署文档 ## 部署信息 | 项目 | 值 | |------|-----| | 项目名称 | 双色球自动化系统 | | 部署时间 | 2026-07-04 | | 开发人员 | 徐聪 (costcodev) | | 部署人员 | 严维序 (opengineer) | | 服务地址 | http://192.168.1.99:8085 | | 代码仓库 | http://192.168.1.99:12299/vincent/Lottery.git | | 宿主服务器 | Ubuntu-OpenClaw (192.168.1.99) | --- ## 一、项目结构 ``` /home/vincent/Studio/lottoData/ ├── venv/ # Python 虚拟环境 ├── app.py # Flask 统一 Web 服务 (监听 0.0.0.0:8085) ├── index.html # 前端 UI (响应式,4 Tab 页面) ├── lottery.py # 双色球号码生成器核心逻辑 ├── fetch_data.py # 历史数据抓取脚本 ├── web_console.html # 数据抓取控制台前端页面 ├── web_executor.py # [已废弃] 旧版独立抓取服务,功能已整合到 app.py ├── requirements.txt # Python 依赖清单 ├── 双色球历史数据.xlsx # 历史数据文件 (不纳入 git) ├── lottery/ # 号码生成结果输出目录 (不纳入 git) ├── .generation_records.json # 生成记录索引 (不纳入 git) ├── .fetch_status.json # 抓取状态文件 (不纳入 git) ├── docs/ # 文档目录 │ ├── PRD-双色球 WebUI-v1.0.md │ └── 开发文档-双色球WebUI-v1.0.md └── deploy/ # 部署文件 ├── DEPLOY.md # 本文档 ├── lotto-app.service # systemd 服务文件 (统一入口) ├── fetch_daily.sh # 每日定时抓取脚本 ├── backup.sh # 备份脚本 (30天保留) ├── cron.log # Cron 执行日志 └── fetch_YYYYMMDD.log # 每日抓取详细日志 ``` **说明**: `app.py` 是统一入口,整合了号码生成、历史数据、生成记录、统计数据抓取等全部功能。`web_executor.py` 已废弃,不需独立部署。 --- ## 二、依赖清单 | 包 | 用途 | |----|------| | Flask | Web 服务框架 | | pandas | 数据处理 | | openpyxl | Excel 读写 | | numpy | 数值计算 | | requests | HTTP 请求 (数据抓取) | | beautifulsoup4 | HTML 解析 (数据抓取) | 安装命令: ```bash python3 -m venv venv ./venv/bin/pip install -r requirements.txt ``` --- ## 三、systemd 服务配置 ### 服务文件 `/etc/systemd/system/lotto-app.service` ```ini [Unit] Description=双色球号码生成 Web 服务 (app.py :8085) After=network.target [Service] Type=simple User=vincent WorkingDirectory=/home/vincent/Studio/lottoData ExecStart=/home/vincent/Studio/lottoData/venv/bin/python3 /home/vincent/Studio/lottoData/app.py ExecStartPre=/home/vincent/Studio/lottoData/venv/bin/python3 -c "import flask; import pandas; import openpyxl; import numpy" Restart=on-failure RestartSec=5 KillMode=control-group Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target ``` ### 管理命令 ```bash # 安装/启用 sudo cp deploy/lotto-app.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable lotto-app sudo systemctl start lotto-app # 日常管理 sudo systemctl status lotto-app # 查看状态 sudo systemctl restart lotto-app # 重启 sudo systemctl stop lotto-app # 停止 sudo journalctl -u lotto-app -f # 查看实时日志 ``` ### 生产部署建议 建议使用 gunicorn 替代 Flask 内置服务器: ```bash ./venv/bin/pip install gunicorn # 修改 ExecStart 为: # /home/vincent/Studio/lottoData/venv/bin/gunicorn -w 4 -b 0.0.0.0:8085 app:app ``` --- ## 四、Cron 定时任务 ### Cron 配置 ``` 30 2 * * * /home/vincent/Studio/lottoData/deploy/fetch_daily.sh >> /home/vincent/Studio/lottoData/deploy/cron.log 2>&1 0 3 * * * /home/vincent/Studio/lottoData/deploy/backup.sh >> /home/vincent/Studio/lottoData/deploy/cron.log 2>&1 ``` - 每天 02:30 自动抓取双色球历史数据 - 每天 03:00 自动备份数据(保留 30 天) ### 手动执行 ```bash /home/vincent/Studio/lottoData/deploy/fetch_daily.sh # 或通过 Web 控制台触发: http://192.168.1.99:8085/fetch ``` --- ## 五、Web 接口清单 | 路径 | 方法 | 说明 | |------|------|------| | `/` | GET | 双色球 Web UI 首页(号码生成) | | `/fetch` | GET | 数据抓取控制台 | | `/api/generate` | POST | 生成号码(参数: num_tickets, strategy) | | `/api/history` | GET | 获取历史开奖数据(参数: page, page_size, search) | | `/api/records` | GET | 获取生成记录列表(参数: page, page_size) | | `/api/records/:id` | DELETE | 删除生成记录 | | `/api/statistics` | GET | 获取统计分析数据 | | `/api/download/:filepath` | GET | 下载文件 | | `/api/status` | GET | 系统状态 | | `/api/config` | GET | 前端配置 | | `/api/fetch/status` | GET | 抓取执行状态 | | `/api/fetch/execute` | POST | 触发数据抓取 | ### 示例 ```bash # 查看状态 curl http://192.168.1.99:8085/api/status # 生成号码 curl -X POST http://192.168.1.99:8085/api/generate \ -H "Content-Type: application/json" \ -d '{"num_tickets": 10, "strategy": "advanced"}' # 触发抓取 curl -X POST http://192.168.1.99:8085/api/fetch/execute ``` --- ## 六、迁移说明(从旧版升级) 如果之前部署了旧版 `lotto-web.service`(端口 5000): ```bash # 1. 停止旧服务 sudo systemctl stop lotto-web sudo systemctl disable lotto-web sudo rm /etc/systemd/system/lotto-web.service sudo systemctl daemon-reload # 2. 部署新服务 sudo cp deploy/lotto-app.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now lotto-app # 3. 更新 cron(指向新的 fetch_daily.sh) crontab -l | sed 's|web_executor|app|g' | crontab - # 或手动编辑: crontab -e # 4. 验证 curl http://127.0.0.1:8085/api/status ``` --- ## 七、验证清单 - [ ] 依赖安装完整 (Flask, pandas, openpyxl, numpy, requests, beautifulsoup4) - [ ] systemd 服务运行正常 (active, enabled) - [ ] Web 服务可访问 (http://192.168.1.99:8085, HTTP 200) - [ ] API 接口正常 (/api/status, /api/generate, /api/history 等) - [ ] 前端页面正常 (4 Tab: 号码生成、历史数据、生成记录、统计分析) - [ ] 移动端响应式布局正常 - [ ] Cron 定时任务已配置 (每日 2:30 抓取, 3:00 备份) - [ ] 旧版 lotto-web.service 已停止并移除 - [ ] 开机自启已配置 (systemd enable) --- ## 八、监控要点 1. **服务存活**:`systemctl status lotto-app` 确认 active 2. **Web 可达**:`curl http://127.0.0.1:8085/api/status` 3. **数据更新**:检查 `双色球历史数据.xlsx` 修改时间 4. **Cron 日志**:检查 `deploy/cron.log` 5. **磁盘空间**:Excel 文件约 13KB,定期检查 `lottery/` 目录增长 --- > 部署人:严维序 (opengineer) | 2026-07-04