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.

10 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.

🚀 部署指南

本文档介绍如何将 A股自选股智能分析系统部署到服务器。

📋 部署方案对比

方案 优点 缺点 推荐场景
Docker Compose 一键部署、环境隔离、易迁移、易升级 需要安装 Docker 推荐:大多数场景
直接部署 简单直接、无额外依赖 环境依赖、迁移麻烦 临时测试
Systemd 服务 系统级管理、开机自启 配置繁琐 长期稳定运行
Supervisor 进程管理、自动重启 需要额外安装 多进程管理

结论:推荐使用 Docker Compose迁移最快最方便


🐳 方案一Docker Compose 部署(推荐)

1. 安装 Docker

# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# CentOS
sudo yum install -y docker docker-compose
sudo systemctl start docker
sudo systemctl enable docker

2. 准备配置文件

# 克隆代码(或上传代码到服务器)
git clone <your-repo-url> /opt/stock-analyzer
cd /opt/stock-analyzer

# 复制并编辑配置文件
cp .env.example .env
vim .env  # 填入真实的 API Key 等配置

3. 一键启动

# 构建并启动
docker-compose -f ./docker/docker-compose.yml up -d

# 查看日志
docker-compose -f ./docker/docker-compose.yml logs -f

# 查看运行状态
docker-compose -f ./docker/docker-compose.yml ps

4. 常用管理命令

# 停止服务
docker-compose -f ./docker/docker-compose.yml down

# 重启服务
docker-compose -f ./docker/docker-compose.yml restart

# 更新代码后重新部署
git pull
docker-compose -f ./docker/docker-compose.yml build --no-cache
docker-compose -f ./docker/docker-compose.yml up -d

# 进入容器调试
docker-compose -f ./docker/docker-compose.yml exec stock-analyzer bash

# 手动执行一次分析
docker-compose -f ./docker/docker-compose.yml exec stock-analyzer python main.py --no-notify

5. 数据持久化

数据自动保存在宿主机目录:

  • ./data/ - 数据库文件
  • ./logs/ - 日志文件
  • ./reports/ - 分析报告

🖥️ 方案二:直接部署

1. 安装 Python 环境

# 安装 Python 3.10+
sudo apt update
sudo apt install -y python3.10 python3.10-venv python3-pip

# 创建虚拟环境
python3.10 -m venv /opt/stock-analyzer/venv
source /opt/stock-analyzer/venv/bin/activate

2. 安装依赖

cd /opt/stock-analyzer
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 配置环境变量

cp .env.example .env
vim .env  # 填入配置

4. 运行

# 单次运行
python main.py

# 定时任务模式(前台运行)
python main.py --schedule

# 后台运行(使用 nohup
nohup python main.py --schedule > /dev/null 2>&1 &

🔧 方案三Systemd 服务

创建 systemd 服务文件实现开机自启和自动重启:

1. 创建服务文件

sudo vim /etc/systemd/system/stock-analyzer.service

内容:

[Unit]
Description=A股自选股智能分析系统
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/stock-analyzer
Environment="PATH=/opt/stock-analyzer/venv/bin"
ExecStart=/opt/stock-analyzer/venv/bin/python main.py --schedule
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

2. 启动服务

# 重载配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start stock-analyzer

# 开机自启
sudo systemctl enable stock-analyzer

# 查看状态
sudo systemctl status stock-analyzer

# 查看日志
journalctl -u stock-analyzer -f

⚙️ 配置说明

必须配置项

配置项 说明 获取方式
GEMINI_API_KEY AI 分析必需 Google AI Studio
STOCK_LIST 自选股列表 逗号分隔的股票代码
WECHAT_WEBHOOK_URL 微信推送 企业微信群机器人

可选配置项

配置项 默认值 说明
SCHEDULE_ENABLED false 是否启用定时任务
SCHEDULE_TIME 18:00 每日执行时间
MARKET_REVIEW_ENABLED true 是否启用大盘复盘
TAVILY_API_KEYS - 新闻搜索(可选)

🌐 代理配置

如果服务器在国内,访问 Gemini API 需要代理:

Docker 方式

编辑 docker-compose.yml

environment:
  - http_proxy=http://your-proxy:port
  - https_proxy=http://your-proxy:port

直接部署方式

编辑 main.py 顶部:

os.environ["http_proxy"] = "http://your-proxy:port"
os.environ["https_proxy"] = "http://your-proxy:port"

📊 监控与维护

日志查看

# Docker 方式
docker-compose -f ./docker/docker-compose.yml logs -f --tail=100

# 直接部署
tail -f /opt/stock-analyzer/logs/stock_analysis_*.log

健康检查

# 检查进程
ps aux | grep main.py

# 检查最近的报告
ls -la /opt/stock-analyzer/reports/

定期维护

# 清理旧日志保留7天
find /opt/stock-analyzer/logs -mtime +7 -delete

# 清理旧报告保留30天
find /opt/stock-analyzer/reports -mtime +30 -delete

常见问题

1. Docker 构建失败

# 清理缓存重新构建
docker-compose -f ./docker/docker-compose.yml build --no-cache

2. API 访问超时

检查代理配置,确保服务器能访问 Gemini API。

3. 数据库锁定

# 停止服务后删除 lock 文件
rm /opt/stock-analyzer/data/*.lock

4. 内存不足

调整 docker-compose.yml 中的内存限制:

deploy:
  resources:
    limits:
      memory: 1G

🔄 快速迁移

从一台服务器迁移到另一台:

# 源服务器:打包
cd /opt/stock-analyzer
tar -czvf stock-analyzer-backup.tar.gz .env data/ logs/ reports/

# 目标服务器:部署
mkdir -p /opt/stock-analyzer
cd /opt/stock-analyzer
git clone <your-repo-url> .
tar -xzvf stock-analyzer-backup.tar.gz
docker-compose -f ./docker/docker-compose.yml up -d

☁️ 方案四GitHub Actions 部署(免服务器)

最简单的方案! 无需服务器,利用 GitHub 免费计算资源。

优势

  • 完全免费(每月 2000 分钟)
  • 无需服务器
  • 自动定时执行
  • 零维护成本

限制

  • ⚠️ 无状态(每次运行是新环境)
  • ⚠️ 定时可能有几分钟延迟
  • ⚠️ 无法提供 HTTP API

部署步骤

1. 创建 GitHub 仓库

# 初始化 git如果还没有
cd /path/to/daily_stock_analysis
git init
git add .
git commit -m "Initial commit"

# 创建 GitHub 仓库并推送
# 在 GitHub 网页上创建新仓库后:
git remote add origin https://github.com/你的用户名/daily_stock_analysis.git
git branch -M main
git push -u origin main

2. 配置 Secrets重要

打开仓库页面 → SettingsSecrets and variablesActionsNew repository secret

添加以下 Secrets

Secret 名称 说明 必填
GEMINI_API_KEY Gemini AI API Key
WECHAT_WEBHOOK_URL 企业微信机器人 Webhook 可选*
FEISHU_WEBHOOK_URL 飞书机器人 Webhook 可选*
TELEGRAM_BOT_TOKEN Telegram Bot Token 可选*
TELEGRAM_CHAT_ID Telegram Chat ID 可选*
TELEGRAM_MESSAGE_THREAD_ID Telegram Topic ID 可选*
EMAIL_SENDER 发件人邮箱 可选*
EMAIL_PASSWORD 邮箱授权码 可选*
SERVERCHAN3_SENDKEY Server酱³ Sendkey 可选*
CUSTOM_WEBHOOK_URLS 自定义 Webhook多个逗号分隔 可选*
STOCK_LIST 自选股列表,如 600519,300750
TAVILY_API_KEYS Tavily 搜索 API Key 推荐
SERPAPI_API_KEYS SerpAPI Key 可选
TUSHARE_TOKEN Tushare Token 可选
GEMINI_MODEL 模型名称(默认 gemini-2.0-flash 可选

*注:通知渠道至少配置一个,支持多渠道同时推送

3. 验证 Workflow 文件

确保 .github/workflows/daily_analysis.yml 文件存在且已提交:

git add .github/workflows/daily_analysis.yml
git commit -m "Add GitHub Actions workflow"
git push

4. 手动测试运行

  1. 打开仓库页面 → Actions 标签
  2. 选择 "每日股票分析" workflow
  3. 点击 "Run workflow" 按钮
  4. 选择运行模式:
    • full - 完整分析(股票+大盘)
    • market-only - 仅大盘复盘
    • stocks-only - 仅股票分析
  5. 点击绿色 "Run workflow" 按钮

5. 查看执行日志

  • Actions 页面可以看到运行历史
  • 点击具体的运行记录查看详细日志
  • 分析报告会作为 Artifact 保存 30 天

定时说明

默认配置:周一到周五,北京时间 18:00 自动执行

修改时间:编辑 .github/workflows/daily_analysis.yml 中的 cron 表达式:

schedule:
  - cron: '0 10 * * 1-5'  # UTC 时间,+8 = 北京时间

常用 cron 示例:

表达式 说明
'0 10 * * 1-5' 周一到周五 18:00北京时间
'30 7 * * 1-5' 周一到周五 15:30北京时间
'0 10 * * *' 每天 18:00北京时间
'0 2 * * 1-5' 周一到周五 10:00北京时间

修改自选股

方法一:修改仓库 Secret STOCK_LIST

方法二:直接修改代码后推送:

# 修改 .env.example 或在代码中设置默认值
git commit -am "Update stock list"
git push

常见问题

Q: 为什么定时任务没有执行? A: GitHub Actions 定时任务可能有 5-15 分钟延迟,且仅在仓库有活动时才触发。长时间无 commit 可能导致 workflow 被禁用。

Q: 如何查看历史报告? A: Actions → 选择运行记录 → Artifacts → 下载 analysis-reports-xxx

Q: 免费额度够用吗? A: 每次运行约 2-5 分钟,一个月 22 个工作日 = 44-110 分钟,远低于 2000 分钟限制。


祝部署顺利!🎉