13 KiB
部署说明 — Binance Altcoin Monitor
代码仓库:https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git
生产环境推荐安装路径:/opt/Binance_Altcoin_Monitor
支持两种一键部署方式:Docker、PM2(二选一即可)。
一、服务器要求
| 项目 | 说明 |
|---|---|
| 系统 | Linux(推荐 Ubuntu 22.04+ / Debian 12+) |
| 时区 | Asia/Shanghai(定时任务 08:00 / 08:05 / 08:10 北京时间) |
| 网络 | 能访问 fapi.binance.com;大模型需能访问 LLM_BASE_URL(默认 http://op.bz121.com) |
| 代理 | 币安不可直连时开启 SOCKS5(见第六节) |
| 内存 | 建议 ≥ 1GB(含 matplotlib 生成日 K 图供大模型) |
| 磁盘 | ≥ 500MB(含日志、SQLite、日 K 缓存) |
| Python | 3.10+;PM2 部署必须使用项目内 .venv 安装依赖 |
二、部署前准备
# 1. 安装 git
sudo apt update && sudo apt install -y git
# 2. 克隆到 /opt(也可交给一键脚本自动完成)
sudo mkdir -p /opt
sudo git clone https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git /opt/Binance_Altcoin_Monitor
sudo chown -R $USER:$USER /opt/Binance_Altcoin_Monitor
# 3. 配置环境变量
cd /opt/Binance_Altcoin_Monitor
cp .env.example .env
nano .env # 至少填写 WECOM_WEBHOOK_URL;大模型解读需填 LLM_API_KEY
.env 常用项:
WECOM_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key
HOST=0.0.0.0
PORT=21450
# 今日每 4 小时自动刷新(另支持 Web 页脚手动刷新)
REFRESH_MINUTES=240
# 代理默认关闭
PROXY_ENABLED=false
PROXY_URL=socks5h://192.168.8.4:1081
PROXY_FOR=binance
# 大模型解读(OpenAI 兼容网关)
LLM_BASE_URL=http://op.bz121.com
LLM_API_KEY=sk-你的密钥
LLM_MODEL=gemma4:e4b
LLM_SYMBOL_INTERVAL_SEC=180
LLM_AUTO_ON_STARTUP=true
完整变量说明见仓库 .env.example 与 README.md。
二点五、Python 依赖与虚拟环境(重要)
本项目 所有 Python 依赖 均来自 backend/requirements.txt(含 matplotlib,用于服务端渲染日 K PNG 并喂给大模型)。
| 部署方式 | 依赖安装位置 | 说明 |
|---|---|---|
| PM2 | 项目目录 .venv |
deploy/pm2-deploy.sh 自动 python3 -m venv .venv 并 pip install -r backend/requirements.txt;PM2 使用 .venv/bin/python 启动 |
| Docker | 镜像内 | Dockerfile 构建时 pip install,无需在宿主机建 venv |
| 本机调试 | 建议同样使用 .venv |
与生产一致,避免「系统 Python 有包、PM2 进程没有」 |
PM2:手动安装 / 更新依赖
cd /opt/Binance_Altcoin_Monitor
# 若尚无虚拟环境
python3 -m venv .venv
# 依赖必须装进 .venv(不要只用系统 pip)
.venv/bin/pip install -U pip
.venv/bin/pip install -r backend/requirements.txt
pm2 restart binance-altcoin-monitor
验证依赖是否装在 venv 内
.venv/bin/python -c "import matplotlib; import fastapi; print('ok')"
若报错 No module named matplotlib,说明未在 .venv 中安装,请执行上节 pip install 后重启 PM2。
Docker:更新依赖
修改 requirements.txt 后需 重新构建镜像(见第十节),容器内才会包含新包。
三、方式 A — Docker 一键部署(推荐)
3.1 安装 Docker
# Ubuntu 示例
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# 重新登录 shell 后生效
3.2 一键部署
cd /opt/Binance_Altcoin_Monitor
sed -i 's/\r$//' deploy/*.sh
chmod +x deploy/docker-deploy.sh
./deploy/docker-deploy.sh
脚本将:克隆/更新代码 → 生成 .env → docker compose build → docker compose up -d。
3.3 常用命令
cd /opt/Binance_Altcoin_Monitor
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f
# 重启(改 .env 后)
docker compose up -d --force-recreate
# 停止
docker compose down
# 手动测试企微推送
curl -X POST http://127.0.0.1:21450/api/push/test
# 查看大模型解读状态(需已配置 LLM_API_KEY)
curl http://127.0.0.1:21450/api/llm/status
3.4 访问 Web
浏览器打开:http://服务器IP:21450
若前面有 Nginx,可反代到 21450 端口。
四、方式 B — PM2 一键部署
4.1 安装系统软件
# Python 3.10+(部署脚本会自动创建 .venv 并把 requirements 装进 venv)
sudo apt install -y python3 python3-venv python3-pip
# Node.js + PM2
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pm2
注意:业务依赖(
fastapi、matplotlib等)不要只执行sudo pip install,应交给脚本或.venv/bin/pip(见 二点五)。
4.2 一键部署
cd /opt/Binance_Altcoin_Monitor
sed -i 's/\r$//' deploy/*.sh # 若从 Windows 克隆,先去掉 CRLF
chmod +x deploy/pm2-deploy.sh
./deploy/pm2-deploy.sh
脚本将:拉取代码 → 创建/更新 .venv → pip install -r backend/requirements.txt → pm2 start(解释器为 .venv/bin/python)。
4.3 常用命令
pm2 status
pm2 logs binance-altcoin-monitor
pm2 restart binance-altcoin-monitor
pm2 stop binance-altcoin-monitor
# 开机自启(按 pm2 startup 提示执行 sudo 命令后)
pm2 save
五、大模型解读(可选)
对 连续三日成交额均为 Top30 的交集币种 进行 AI 简析(涨跌幅不限)。服务端用 matplotlib 生成日 K+成交量 PNG,通过 OpenAI 兼容接口发给网关。
| 变量 | 说明 |
|---|---|
LLM_BASE_URL |
网关根地址,默认 http://op.bz121.com |
LLM_API_KEY |
Authorization: Bearer sk-...(勿提交 git) |
LLM_MODEL |
与网关模型 ID 一致,默认 gemma4:e4b |
LLM_SYMBOL_INTERVAL_SEC |
批量解读时每币间隔,默认 180(3 分钟) |
LLM_AUTO_ON_STARTUP |
服务启动后是否后台自动跑一轮,默认 true |
定时与行为
| 时间(北京时间) | 行为 |
|---|---|
| 08:05 | 自动对三日交集币种排队解读 |
| 启动时 | 若已配置 LLM_API_KEY 且 LLM_AUTO_ON_STARTUP=true,后台自动启动一轮 |
Web「数据统计」页可查看解读结果,或点击 「开始解读」 手动触发。
API 速查
# 任务状态(是否在跑、当前币种、进度)
curl http://127.0.0.1:21450/api/llm/status
# 手动启动批量解读(后台异步,勿重复点击)
curl -X POST http://127.0.0.1:21450/api/llm/interpret/run
# 最近一批解读文本
curl http://127.0.0.1:21450/api/llm/interpretations
# 单币日 K PNG(调试用)
curl -o chart.png http://127.0.0.1:21450/api/chart/BTCUSDT/daily.png
配置后生效
PM2: 修改 .env 后 pm2 restart binance-altcoin-monitor
Docker: docker compose up -d --force-recreate
若网关不支持 vision,服务会降级为纯文本解读(日志中有 warning)。
六、SOCKS5 代理(默认关闭)
当服务器无法直连币安 API 时,可通过内网 SOCKS5 代理访问。
| 变量 | 默认值 | 说明 |
|---|---|---|
PROXY_ENABLED |
false |
true 时启用代理 |
PROXY_URL |
socks5h://192.168.8.4:1081 |
socks5h 表示由代理解析 DNS |
PROXY_FOR |
binance |
binance 仅币安;wecom 仅企微;all 全部 HTTP |
如何开启
- 编辑
/opt/Binance_Altcoin_Monitor/.env:
PROXY_ENABLED=true
PROXY_URL=socks5h://192.168.8.4:1081
PROXY_FOR=binance
- 使配置生效:
Docker:
cd /opt/Binance_Altcoin_Monitor
docker compose up -d --force-recreate
PM2:
pm2 restart binance-altcoin-monitor
如何关闭
PROXY_ENABLED=false
同样执行上面的重启命令。
说明
- 默认不走代理,直连币安与企微。
- 企微 Webhook 在国内一般可直连,建议
PROXY_FOR=binance,避免企微也走代理。 - Docker 容器访问宿主机局域网代理时,
.env中PROXY_URL可改为宿主机 IP,例如socks5h://192.168.8.4:1081(需保证容器网络能访问该地址)。 - 依赖
httpx[socks],Docker 镜像与 PM2 部署脚本已包含。
验证代理是否生效
# 查看日志中是否有连接错误
docker compose logs -f # Docker
pm2 logs binance-altcoin-monitor # PM2
# 触发刷新,观察是否拉取到数据
curl http://127.0.0.1:21450/api/refresh/today -X POST
curl http://127.0.0.1:21450/api/today/top30
七、防火墙与 Nginx(可选)
# 开放 21450(若直接对外)
sudo ufw allow 21450/tcp
Nginx 反代示例:
server {
listen 80;
server_name monitor.example.com;
location / {
proxy_pass http://127.0.0.1:21450;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
八、定时任务说明
| 时间(北京时间) | 行为 |
|---|---|
| 08:00 | 固化昨日、前日周期快照 |
| 08:05 | 大模型解读三日 Top30 交集(需 LLM_API_KEY) |
| 08:10 | 企业微信推送 三日 Top30 交集(卡片列表,非宽表格) |
| 每 4 小时(0/4/8/12/16/20 点) | 刷新今日数据(REFRESH_MINUTES=240) |
Web 今日表 不会 每 60 秒自动轮询;除上述定时外,使用页脚 「立即刷新今日」 手动更新。
进程需常驻(Docker restart: unless-stopped 或 PM2 autorestart)。
九、目录与数据
/opt/Binance_Altcoin_Monitor/
├── .env # 配置(勿提交 git)
├── .venv/ # Python 虚拟环境(PM2 专用,勿删)
├── data/monitor.db # SQLite(周期快照、日 K、资金费率、LLM 解读)
├── logs/ # PM2 日志(Docker 用 docker compose logs)
├── deploy/ # 一键脚本
├── docker-compose.yml
└── ecosystem.config.cjs # PM2 解释器: .venv/bin/python
备份建议:定期备份 data/monitor.db 与 .env。
十、更新版本
拉取代码后,务必按部署方式重装 Python 依赖(requirements.txt 变更时尤其重要,例如新增 matplotlib)。
Docker:
cd /opt/Binance_Altcoin_Monitor
git pull
docker compose build --no-cache
docker compose up -d
PM2(推荐一键脚本,会自动更新 .venv):
cd /opt/Binance_Altcoin_Monitor
git pull
./deploy/pm2-deploy.sh
PM2(仅手动更新依赖):
cd /opt/Binance_Altcoin_Monitor
git pull
.venv/bin/pip install -r backend/requirements.txt
pm2 restart binance-altcoin-monitor
十一、故障排查
| 现象 | 处理 |
|---|---|
bash\r: No such file or directory |
脚本为 Windows 换行,执行:sed -i 's/\r$//' deploy/*.sh && chmod +x deploy/*.sh |
cannot pull with rebase: unstaged changes |
执行 git stash 后重试;或 DEPLOY_SKIP_GIT_PULL=1 ./deploy/pm2-deploy.sh 跳过拉取 |
No module named pip |
执行 sudo apt install -y python3-venv 后重新 ./deploy/pm2-deploy.sh(脚本会用 .venv) |
No module named matplotlib(或其它包) |
依赖未装进 .venv:执行 .venv/bin/pip install -r backend/requirements.txt 后 pm2 restart;勿只装系统 Python |
| Web 无数据 | 检查能否访问币安;国内服务器尝试 PROXY_ENABLED=true |
大量 418 I'm a teapot |
IP 被封禁;不要反复 restart。日 K 已存 SQLite,图表优先读本地;仅过期或首次才请求币安 |
| 企微收不到 | 检查 WECOM_WEBHOOK_URL;curl -X POST .../api/push/test |
| 08:10 未推送 | 确认容器/PM2 在 08:10 前已运行;查日志 |
大模型无解读 / 状态 enabled: false |
检查 .env 中 LLM_API_KEY;curl .../api/llm/status;确认服务器能访问 LLM_BASE_URL |
解读一直 running |
查看 pm2 logs;可能某币请求超时;可重启进程后手动 POST /api/llm/interpret/run |
| 端口占用 | ss -tlnp | grep 21450 或改 .env 中 PORT |
| Docker 代理连不上 | 确认 192.168.8.4:1081 从容器内可达,必要时改宿主机 IP |
十二、快速命令速查
# Docker 一键
./deploy/docker-deploy.sh
# PM2 一键(含 .venv 依赖安装)
./deploy/pm2-deploy.sh
# 仅更新 Python 依赖(PM2)
.venv/bin/pip install -r backend/requirements.txt && pm2 restart binance-altcoin-monitor
# 开启代理 / 修改 .env 后重启
# Docker: docker compose up -d --force-recreate
# PM2: pm2 restart binance-altcoin-monitor