You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
11 KiB
11 KiB
📘 股票智能分析系统 - 部署运行指南
本文档涵盖项目的启动方式、部署方式及注意事项
📋 目录
一、快速启动
1.1 环境要求
| 组件 | 最低要求 | 推荐版本 |
|---|---|---|
| Python | 3.10+ | 3.11.x |
| Node.js | 18+ | 20.x |
| Docker | 20.10+ | 最新版 |
| 内存 | 512MB | 1GB+ |
| 磁盘 | 1GB | 5GB+ |
1.2 最小配置
复制配置文件并填写必要信息:
# Windows
copy .env.example .env
# Linux/Mac
cp .env.example .env
编辑 .env 文件,至少配置以下项:
# 1. 自选股列表(必填)
STOCK_LIST=600519,300750,002594
# 2. AI 模型(二选一)
# 方案 A: Gemini(免费)
GEMINI_API_KEY=your_gemini_key
# 方案 B: OpenAI 兼容 API(如 DeepSeek)
OPENAI_API_KEY=your_key
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat
# 3. 通知渠道(至少一个)
WECHAT_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx
# 或
EMAIL_SENDER=your_email@qq.com
EMAIL_PASSWORD=your_auth_code
二、启动方式
2.1 命令行模式
基本命令
# 安装依赖
pip install -r requirements.txt
# 仅获取数据(测试模式,不消耗 AI 额度)
python main.py --dry-run
# 完整运行(执行 AI 分析)
python main.py
# 调试模式(输出详细日志)
python main.py --debug
# 指定分析特定股票
python main.py --stocks 600519,000001
# 不发送推送通知
python main.py --no-notify
# 单股推送模式(每分析完一只立即推送)
python main.py --single-notify
# 仅运行大盘复盘
python main.py --market-review
启动 WebUI
# 编译前端(首次需要)
cd apps/dsa-web
npm install
npm run build
cd ../..
# 启动 WebUI + 定时分析
python main.py --webui
# 仅启动 WebUI(不执行分析)
python main.py --webui-only
# 或使用等效命令
python main.py --serve
python main.py --serve-only
定时任务模式
# 启用定时任务(每日自动执行)
python main.py --schedule
# 自定义执行时间(默认 18:00)
SCHEDULE_TIME=09:30 python main.py --schedule
2.2 参数说明
| 参数 | 说明 |
|---|---|
--dry-run |
仅获取数据,不进行 AI 分析 |
--debug |
启用调试模式,输出详细日志 |
--stocks |
指定股票代码,逗号分隔 |
--no-notify |
不发送推送通知 |
--single-notify |
单股推送模式 |
--schedule |
启用定时任务 |
--market-review |
仅运行大盘复盘 |
--webui |
启动 WebUI + 定时分析 |
--webui-only |
仅启动 WebUI |
--serve |
启动 API 服务 |
--serve-only |
仅启动 API 服务 |
--host |
绑定地址(默认 127.0.0.1) |
--port |
端口(默认 8000) |
三、部署方式
3.1 GitHub Actions 部署(推荐)
优点:零成本、免服务器、自动定时运行
部署步骤
-
Fork 仓库
- 点击右上角
Fork按钮
- 点击右上角
-
配置 Secrets
Settings → Secrets and variables → Actions → New repository secret -
添加必要 Secrets
Secret 名称 说明 必填 STOCK_LIST自选股代码 ✅ GEMINI_API_KEY或OPENAI_API_KEYAI 模型 API Key ✅ WECHAT_WEBHOOK_URL/EMAIL_SENDER通知渠道 ✅ -
启用 Actions
Actions 标签 → I understand my workflows, go ahead and enable them -
手动测试
Actions → 每日股票分析 → Run workflow → Run workflow
默认定时:工作日 18:00(北京时间)自动执行
3.2 Docker 部署
快速启动
# 1. 克隆仓库
git clone https://github.com/ZhuLinsen/daily_stock_analysis.git
cd daily_stock_analysis
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 填入配置
# 3. 启动容器
# Web 服务模式(推荐,提供 API 与 WebUI)
docker-compose -f ./docker/docker-compose.yml up -d server
# 定时任务模式
docker-compose -f ./docker/docker-compose.yml up -d analyzer
# 同时启动两种模式
docker-compose -f ./docker/docker-compose.yml up -d
访问服务
| 服务 | 地址 |
|---|---|
| WebUI | http://localhost:8000 |
| API | http://localhost:8000/api |
常用命令
# 查看日志
docker-compose -f ./docker/docker-compose.yml logs -f server
docker-compose -f ./docker/docker-compose.yml logs -f analyzer
# 停止服务
docker-compose -f ./docker/docker-compose.yml down
# 重启服务
docker-compose -f ./docker/docker-compose.yml restart server
# 更新镜像(拉取代码后)
docker-compose -f ./docker/docker-compose.yml up -d --build
# 进入容器
docker exec -it stock-server /bin/bash
Docker 运行模式
| 模式 | 命令 | 说明 |
|---|---|---|
| Web 服务 | up -d server |
提供 WebUI 和 API |
| 定时分析 | up -d analyzer |
每日自动执行分析 |
| 双模式 | up -d |
同时启动两种模式 |
3.3 本地服务器部署
Linux/Mac 系统
# 1. 克隆项目
git clone https://github.com/ZhuLinsen/daily_stock_analysis.git
cd daily_stock_analysis
# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 编译前端
cd apps/dsa-web
npm install
npm run build
cd ../..
# 5. 配置环境
cp .env.example .env
vim .env
# 6. 启动服务
# 方式 A: 直接运行
python main.py --webui
# 方式 B: 使用 systemd(推荐生产环境)
sudo nano /etc/systemd/system/stock-analysis.service
systemd 服务配置示例:
[Unit]
Description=Stock Analysis Service
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/daily_stock_analysis
Environment=PYTHONUNBUFFERED=1
ExecStart=/home/ubuntu/daily_stock_analysis/venv/bin/python main.py --webui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl daemon-reload
sudo systemctl enable stock-analysis
sudo systemctl start stock-analysis
sudo systemctl status stock-analysis
Windows 系统
# 1. 克隆项目
git clone https://github.com/ZhuLinsen/daily_stock_analysis.git
cd daily_stock_analysis
# 2. 安装依赖
pip install -r requirements.txt
# 3. 编译前端
cd apps\dsa-web
npm install
npm run build
cd ..\..
# 4. 配置环境
copy .env.example .env
# 编辑 .env
# 5. 启动
python main.py --webui
使用 NSSM 注册 Windows 服务(生产环境):
# 下载 NSSM: https://nssm.cc/download
nssm install stock-analysis
# 设置 Path: python
# 设置 Arguments: main.py --webui
# 设置 Working directory: D:\daily_stock_analysis
nssm start stock-analysis
3.4 部署方式对比
| 部署方式 | 复杂度 | 成本 | 适用场景 | 稳定性 |
|---|---|---|---|---|
| GitHub Actions | ⭐ 低 | 免费 | 个人用户、轻度使用 | ⭐⭐⭐ |
| Docker | ⭐⭐ 中 | 低 | 有服务器的用户 | ⭐⭐⭐⭐ |
| 本地服务器 | ⭐⭐⭐ 高 | 中 | 企业用户、高频使用 | ⭐⭐⭐⭐⭐ |
| 云服务器 | ⭐⭐ 中 | 中 | 需要 24h 在线服务 | ⭐⭐⭐⭐⭐ |
四、注意事项
4.1 安全配置
API Key 保护
# ❌ 不要这样做
# 在代码中硬编码 API Key
# 提交 .env 到 Git 仓库
# ✅ 正确做法
# 使用环境变量
# 将 .env 加入 .gitignore
# GitHub Actions 使用 Secrets
最小权限原则
| 服务 | 建议权限 |
|---|---|
| AI API Key | 仅文本生成权限 |
| 邮件授权码 | 仅 SMTP 发送权限 |
| Tushare Token | 仅行情数据权限 |
4.2 性能优化
并发控制
# .env 中配置
MAX_WORKERS=3 # 根据机器性能调整,建议 2-5
API 限流处理
# 个股分析和大盘分析之间的延迟(秒)
ANALYSIS_DELAY=10
# Gemini 请求延迟
GEMINI_REQUEST_DELAY=30
内存优化(Docker)
# docker-compose.yml
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
4.3 数据备份
# 数据库备份(SQLite)
cp data/stock_analysis.db backup/stock_analysis_$(date +%Y%m%d).db
# 日志归档
tar -czf logs_backup_$(date +%Y%m%d).tar.gz logs/
# Docker 数据卷备份
docker run --rm -v daily_stock_analysis_data:/data -v $(pwd):/backup alpine tar czf /backup/data_backup.tar.gz -C /data .
4.4 监控与日志
日志位置
| 部署方式 | 日志路径 |
|---|---|
| 本地运行 | ./logs/ |
| Docker | /app/logs/ 或挂载的宿主机目录 |
| GitHub Actions | Actions 运行日志 |
关键日志文件
logs/
├── stock_analysis_YYYYMMDD.log # 常规日志
├── stock_analysis_debug_YYYYMMDD.log # 调试日志
└── notifications_YYYYMMDD.log # 推送日志
健康检查
# API 健康检查
curl http://localhost:8000/api/health
# Docker 健康检查(自动)
docker ps # 查看 STATUS 列
4.5 网络与代理
# 国内用户可能需要代理访问 Gemini/OpenAI
USE_PROXY=true
PROXY_HOST=127.0.0.1
PROXY_PORT=10809
# Docker 代理配置
# docker-compose.yml 中 environment 部分
- http_proxy=http://host.docker.internal:10809
- https_proxy=http://host.docker.internal:10809
4.6 时区设置
# .env 中设置
TZ=Asia/Shanghai
# Docker 中已默认设置上海时区
五、常见问题
Q1: Windows 下中文显示乱码?
# 设置 UTF-8 编码
chcp 65001
# 或在运行前设置环境变量
$env:PYTHONIOENCODING="utf-8"
python main.py
Q2: 前端页面 404?
# 需要编译前端
cd apps/dsa-web
npm install
npm run build
Q3: Docker 启动失败?
# 检查端口占用
netstat -tlnp | grep 8000
# 检查环境变量
cat .env | grep -E "^(STOCK_LIST|OPENAI|GEMINI)"
# 查看详细日志
docker-compose logs
Q4: API 额度不足?
- Gemini: 免费版有额度限制,建议申请多个 Key 轮换使用
- DeepSeek: 充值或降低分析频率
- 本地模型: 使用 Ollama 部署本地大模型
Q5: 推送收不到?
- 检查 Webhook URL 是否正确
- 检查网络连通性:
curl -v WEBHOOK_URL - 查看通知日志:
logs/notifications_*.log - 确认消息长度未超限(企业微信 4096 字节)
Q6: 数据获取失败?
# 检查数据源状态
python -c "from data_provider.base import DataFetcherManager; m = DataFetcherManager(); print(m.list_fetchers())"
# 单个数据源测试
python -c "from data_provider.tushare_fetcher import TushareFetcher; f = TushareFetcher(); print(f.test_connection())"
六、参考链接
免责声明: 本项目仅供学习和研究使用,不构成任何投资建议。股市有风险,投资需谨慎。