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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

📘 股票智能分析系统 - 部署运行指南

本文档涵盖项目的启动方式、部署方式及注意事项


📋 目录

  1. 快速启动
  2. 启动方式
  3. 部署方式
  4. 注意事项
  5. 常见问题

一、快速启动

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

访问地址:http://127.0.0.1:8000

定时任务模式

# 启用定时任务(每日自动执行)
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 部署(推荐)

优点:零成本、免服务器、自动定时运行

部署步骤

  1. Fork 仓库

    • 点击右上角 Fork 按钮
  2. 配置 Secrets

    Settings → Secrets and variables → Actions → New repository secret
    
  3. 添加必要 Secrets

    Secret 名称 说明 必填
    STOCK_LIST 自选股代码
    GEMINI_API_KEYOPENAI_API_KEY AI 模型 API Key
    WECHAT_WEBHOOK_URL / EMAIL_SENDER 通知渠道
  4. 启用 Actions

    Actions 标签 → I understand my workflows, go ahead and enable them
    
  5. 手动测试

    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: 推送收不到?

  1. 检查 Webhook URL 是否正确
  2. 检查网络连通性:curl -v WEBHOOK_URL
  3. 查看通知日志:logs/notifications_*.log
  4. 确认消息长度未超限(企业微信 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())"

六、参考链接


免责声明: 本项目仅供学习和研究使用,不构成任何投资建议。股市有风险,投资需谨慎。