|
|
# 📘 股票智能分析系统 - 部署运行指南
|
|
|
|
|
|
> 本文档涵盖项目的启动方式、部署方式及注意事项
|
|
|
|
|
|
---
|
|
|
|
|
|
## 📋 目录
|
|
|
|
|
|
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 最小配置
|
|
|
|
|
|
复制配置文件并填写必要信息:
|
|
|
|
|
|
```bash
|
|
|
# Windows
|
|
|
copy .env.example .env
|
|
|
|
|
|
# Linux/Mac
|
|
|
cp .env.example .env
|
|
|
```
|
|
|
|
|
|
编辑 `.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 命令行模式
|
|
|
|
|
|
#### 基本命令
|
|
|
|
|
|
```bash
|
|
|
# 安装依赖
|
|
|
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
|
|
|
|
|
|
```bash
|
|
|
# 编译前端(首次需要)
|
|
|
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
|
|
|
|
|
|
#### 定时任务模式
|
|
|
|
|
|
```bash
|
|
|
# 启用定时任务(每日自动执行)
|
|
|
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_KEY` 或 `OPENAI_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 部署
|
|
|
|
|
|
#### 快速启动
|
|
|
|
|
|
```bash
|
|
|
# 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 |
|
|
|
|
|
|
#### 常用命令
|
|
|
|
|
|
```bash
|
|
|
# 查看日志
|
|
|
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 系统
|
|
|
|
|
|
```bash
|
|
|
# 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 服务配置示例**:
|
|
|
|
|
|
```ini
|
|
|
[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
|
|
|
```
|
|
|
|
|
|
启动服务:
|
|
|
```bash
|
|
|
sudo systemctl daemon-reload
|
|
|
sudo systemctl enable stock-analysis
|
|
|
sudo systemctl start stock-analysis
|
|
|
sudo systemctl status stock-analysis
|
|
|
```
|
|
|
|
|
|
#### Windows 系统
|
|
|
|
|
|
```powershell
|
|
|
# 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 服务**(生产环境):
|
|
|
|
|
|
```powershell
|
|
|
# 下载 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 保护
|
|
|
|
|
|
```bash
|
|
|
# ❌ 不要这样做
|
|
|
# 在代码中硬编码 API Key
|
|
|
# 提交 .env 到 Git 仓库
|
|
|
|
|
|
# ✅ 正确做法
|
|
|
# 使用环境变量
|
|
|
# 将 .env 加入 .gitignore
|
|
|
# GitHub Actions 使用 Secrets
|
|
|
```
|
|
|
|
|
|
#### 最小权限原则
|
|
|
|
|
|
| 服务 | 建议权限 |
|
|
|
|------|----------|
|
|
|
| AI API Key | 仅文本生成权限 |
|
|
|
| 邮件授权码 | 仅 SMTP 发送权限 |
|
|
|
| Tushare Token | 仅行情数据权限 |
|
|
|
|
|
|
### 4.2 性能优化
|
|
|
|
|
|
#### 并发控制
|
|
|
|
|
|
```env
|
|
|
# .env 中配置
|
|
|
MAX_WORKERS=3 # 根据机器性能调整,建议 2-5
|
|
|
```
|
|
|
|
|
|
#### API 限流处理
|
|
|
|
|
|
```env
|
|
|
# 个股分析和大盘分析之间的延迟(秒)
|
|
|
ANALYSIS_DELAY=10
|
|
|
|
|
|
# Gemini 请求延迟
|
|
|
GEMINI_REQUEST_DELAY=30
|
|
|
```
|
|
|
|
|
|
#### 内存优化(Docker)
|
|
|
|
|
|
```yaml
|
|
|
# docker-compose.yml
|
|
|
deploy:
|
|
|
resources:
|
|
|
limits:
|
|
|
memory: 512M
|
|
|
reservations:
|
|
|
memory: 256M
|
|
|
```
|
|
|
|
|
|
### 4.3 数据备份
|
|
|
|
|
|
```bash
|
|
|
# 数据库备份(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 # 推送日志
|
|
|
```
|
|
|
|
|
|
#### 健康检查
|
|
|
|
|
|
```bash
|
|
|
# API 健康检查
|
|
|
curl http://localhost:8000/api/health
|
|
|
|
|
|
# Docker 健康检查(自动)
|
|
|
docker ps # 查看 STATUS 列
|
|
|
```
|
|
|
|
|
|
### 4.5 网络与代理
|
|
|
|
|
|
```env
|
|
|
# 国内用户可能需要代理访问 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
|
|
|
# .env 中设置
|
|
|
TZ=Asia/Shanghai
|
|
|
|
|
|
# Docker 中已默认设置上海时区
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 五、常见问题
|
|
|
|
|
|
### Q1: Windows 下中文显示乱码?
|
|
|
|
|
|
```powershell
|
|
|
# 设置 UTF-8 编码
|
|
|
chcp 65001
|
|
|
|
|
|
# 或在运行前设置环境变量
|
|
|
$env:PYTHONIOENCODING="utf-8"
|
|
|
python main.py
|
|
|
```
|
|
|
|
|
|
### Q2: 前端页面 404?
|
|
|
|
|
|
```bash
|
|
|
# 需要编译前端
|
|
|
cd apps/dsa-web
|
|
|
npm install
|
|
|
npm run build
|
|
|
```
|
|
|
|
|
|
### Q3: Docker 启动失败?
|
|
|
|
|
|
```bash
|
|
|
# 检查端口占用
|
|
|
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: 数据获取失败?
|
|
|
|
|
|
```bash
|
|
|
# 检查数据源状态
|
|
|
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())"
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 六、参考链接
|
|
|
|
|
|
- [完整配置指南](docs/full-guide.md)
|
|
|
- [常见问题](docs/FAQ.md)
|
|
|
- [更新日志](docs/CHANGELOG.md)
|
|
|
- [项目主页](https://github.com/ZhuLinsen/daily_stock_analysis)
|
|
|
|
|
|
---
|
|
|
|
|
|
**免责声明**: 本项目仅供学习和研究使用,不构成任何投资建议。股市有风险,投资需谨慎。
|