docs/docker/zeabur-deployment.md
本指南详细介绍如何在 Zeabur 上部署 A股自选股智能分析系统,包括 WebUI 和 Discord 机器人功能。
确保你的仓库包含以下文件:
.github/workflows/docker-publish.yml(已自动创建)docker/Dockerfile(已存在)main )Zeabur 会自动检测 .github/workflows/docker-publish.yml 文件,并使用 GitHub Actions 构建镜像。
如果没有自动检测到,可以手动配置:
docker/DockerfileFastAPI 会自动托管 static/ 目录下的前端资源。前端打包输出位置由
apps/dsa-web/vite.config.ts 决定,默认输出到项目根目录 static/。
Dockerfile 已采用多阶段构建,前端会在镜像构建时自动打包。
如需覆盖默认静态资源,可在宿主机手动构建并挂载到容器内 /app/static。
系统支持多种启动模式,你可以根据需要配置不同的启动命令:
| 模式 | 启动命令 | 描述 |
|---|---|---|
| 定时任务模式(默认) | python main.py --schedule | 按计划执行股票分析 |
| FastAPI 模式 | python main.py --serve | 启动 FastAPI 并执行分析 |
| 仅 FastAPI 模式 | python main.py --serve-only | 仅启动 FastAPI,不执行分析 |
| 仅大盘复盘 | python main.py --market-review | 仅执行大盘复盘分析 |
python main.py --servepython main.py --serve-only --host 0.0.0.0 --port 8000python main.py --schedule创建 Discord 应用和机器人
配置机器人权限
在 Zeabur 控制台的「环境变量」配置中,添加以下变量:
| 变量名 | 说明 | 示例值 |
|---|---|---|
DISCORD_BOT_TOKEN | Discord 机器人 Token | MTAxMjM0NTY3ODkwMTEyMzQ1Ng.GhIjKl.MnOpQrStUvWxYz1234567890 |
DISCORD_MAIN_CHANNEL_ID | 主频道 ID | 123456789012345678 |
DISCORD_WEBHOOK_URL | Discord Webhook URL(可选) | https://discord.com/api/webhooks/... |
机器人功能默认通过配置启用,无需特殊启动命令。确保你的配置文件中包含机器人相关配置,或通过环境变量设置。
| 变量名 | 说明 | 默认值 |
|---|---|---|
PYTHONUNBUFFERED | 启用 Python 无缓冲输出 | 1 |
LOG_DIR | 日志目录 | /app/logs |
DATABASE_PATH | 数据库路径 | /app/data/stock_analysis.db |
| 变量名 | 说明 | 默认值 |
|---|---|---|
API_HOST | API 服务监听地址 | 0.0.0.0 |
API_PORT | API 服务端口 | 8000 |
旧版
WEBUI_HOST/WEBUI_PORT/WEBUI_ENABLED环境变量仍兼容,会自动转发到 API 服务。
| 变量名 | 说明 |
|---|---|
ANSPIRE_API_KEYS | Anspire Open API 密钥(大模型与搜索共用,推荐) |
AIHUBMIX_KEY | AIHubMix API 密钥(一 Key 多模型,推荐) |
GEMINI_API_KEY | Gemini API 密钥 |
OPENAI_API_KEY | OpenAI 兼容 API 密钥 |
SERPAPI_API_KEYS | SerpAPI 密钥(推荐) |
TAVILY_API_KEYS | Tavily API 密钥(用逗号分隔) |
BOCHA_API_KEYS | Bocha API 密钥(用逗号分隔) |
BRAVE_API_KEYS | Brave Search API 密钥(用逗号分隔) |
MINIMAX_API_KEYS | MiniMax API 密钥(用逗号分隔) |
SEARXNG_BASE_URLS | SearXNG 实例地址(逗号分隔,无配额兜底,需在 settings.yml 启用 format: json);留空时默认自动发现公共实例 |
SEARXNG_PUBLIC_INSTANCES_ENABLED | 是否在 SEARXNG_BASE_URLS 为空时自动从 searx.space 获取公共实例(默认 true) |
在 Zeabur 控制台:
| 目录 | 说明 |
|---|---|
/app/data | 数据库和数据文件 |
/app/logs | 日志文件 |
/app/reports | 分析报告 |
/app/data/app/data/app/data 目录,以保存数据库系统内置了健康检查机制,默认检查:
http://localhost:8000/health 端点http://localhost:8000/api/health 端点健康检查配置如下:
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
CMD curl -f http://localhost:8000/api/health || curl -f http://localhost:8000/health \
|| python -c "import sys; sys.exit(0)"
--serve 或 --serve-only 参数/app/data 目录你可以在 Zeabur 上部署多个实例,用于不同的功能:
python main.py --serve-only)python main.py --schedule)python main.py --discord-bot)确保它们共享同一个 /app/data 存储卷,以共享数据库。
在 Zeabur 控制台的「访问」标签页,你可以:
当你向仓库推送新代码时:
在 Zeabur 控制台,进入服务页面,点击「日志」标签页,可以查看实时日志和历史日志。
Zeabur 提供了基础的监控指标:
在「监控」标签页查看详细指标。
# 进入容器
zeabur exec <服务名> bash
# 查看日志文件
cat /app/logs/stock_analysis_20260125.log
# 进入容器
zeabur exec <服务名> bash
# 检查环境变量
printenv | grep -i discord
printenv | grep -i webui
# 测试网络连接
zeabur exec <服务名> curl -I https://api.discord.com
# 测试 API 连接
zeabur exec <服务名> python -c "import requests; print(requests.get('https://api.discord.com').status_code)"
/app/data 目录,以保存数据库/app/data 目录的内容进行备份如有问题,欢迎联系项目维护者或在 GitHub Issues 中提问。