# 部署说明 — Binance Altcoin Monitor 代码仓库:[https://git.bz121.com/dekun/Binance_Altcoin_Monitor.git](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:10 北京时间) | | 网络 | 能访问 `fapi.binance.com`;若不能,需开启 SOCKS5 代理(见第四节) | | 内存 | 建议 ≥ 512MB | | 磁盘 | ≥ 500MB(含日志与 SQLite) | --- ## 二、部署前准备 ```bash # 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 ``` `.env` 常用项: ```env WECOM_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key HOST=0.0.0.0 PORT=21450 # 代理默认关闭 PROXY_ENABLED=false PROXY_URL=socks5h://192.168.8.4:1081 PROXY_FOR=binance ``` --- ## 三、方式 A — Docker 一键部署(推荐) ### 3.1 安装 Docker ```bash # Ubuntu 示例 curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER # 重新登录 shell 后生效 ``` ### 3.2 一键部署 ```bash 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 常用命令 ```bash 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 ``` ### 3.4 访问 Web 浏览器打开:`http://服务器IP:21450` 若前面有 Nginx,可反代到 21450 端口。 --- ## 四、方式 B — PM2 一键部署 ### 4.1 安装依赖 ```bash # Python 3.10+(部署脚本会自动创建 .venv;若无 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 ``` ### 4.2 一键部署 ```bash cd /opt/Binance_Altcoin_Monitor sed -i 's/\r$//' deploy/*.sh # 若从 Windows 克隆,先去掉 CRLF chmod +x deploy/pm2-deploy.sh ./deploy/pm2-deploy.sh ``` ### 4.3 常用命令 ```bash pm2 status pm2 logs binance-altcoin-monitor pm2 restart binance-altcoin-monitor pm2 stop binance-altcoin-monitor # 开机自启(按 pm2 startup 提示执行 sudo 命令后) pm2 save ``` --- ## 五、SOCKS5 代理(默认关闭) 当服务器**无法直连**币安 API 时,可通过内网 SOCKS5 代理访问。 | 变量 | 默认值 | 说明 | |------|--------|------| | `PROXY_ENABLED` | `false` | `true` 时启用代理 | | `PROXY_URL` | `socks5h://192.168.8.4:1081` | `socks5h` 表示由代理解析 DNS | | `PROXY_FOR` | `binance` | `binance` 仅币安;`wecom` 仅企微;`all` 全部 HTTP | ### 如何开启 1. 编辑 `/opt/Binance_Altcoin_Monitor/.env`: ```env PROXY_ENABLED=true PROXY_URL=socks5h://192.168.8.4:1081 PROXY_FOR=binance ``` 2. 使配置生效: **Docker:** ```bash cd /opt/Binance_Altcoin_Monitor docker compose up -d --force-recreate ``` **PM2:** ```bash pm2 restart binance-altcoin-monitor ``` ### 如何关闭 ```env PROXY_ENABLED=false ``` 同样执行上面的重启命令。 ### 说明 - **默认不走代理**,直连币安与企微。 - 企微 Webhook 在国内一般可直连,建议 `PROXY_FOR=binance`,避免企微也走代理。 - Docker 容器访问宿主机局域网代理时,`.env` 中 `PROXY_URL` 可改为宿主机 IP,例如 `socks5h://192.168.8.4:1081`(需保证容器网络能访问该地址)。 - 依赖 `httpx[socks]`,Docker 镜像与 PM2 部署脚本已包含。 ### 验证代理是否生效 ```bash # 查看日志中是否有连接错误 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(可选) ```bash # 开放 21450(若直接对外) sudo ufw allow 21450/tcp ``` Nginx 反代示例: ```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:10 | 企业微信推送昨日 Top30 | | 每 5 分钟 | 刷新今日数据(`REFRESH_MINUTES` 可改) | **进程需常驻**(Docker `restart: unless-stopped` 或 PM2 `autorestart`)。 --- ## 八、目录与数据 ``` /opt/Binance_Altcoin_Monitor/ ├── .env # 配置(勿提交 git) ├── data/monitor.db # SQLite 数据 ├── logs/ # PM2 日志(Docker 用 docker compose logs) ├── deploy/ # 一键脚本 ├── docker-compose.yml └── ecosystem.config.cjs ``` 备份建议:定期备份 `data/monitor.db` 与 `.env`。 --- ## 九、更新版本 **Docker:** ```bash cd /opt/Binance_Altcoin_Monitor git pull docker compose build --no-cache docker compose up -d ``` **PM2:** ```bash cd /opt/Binance_Altcoin_Monitor git pull ./deploy/pm2-deploy.sh # 或手动: .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) | | Web 无数据 | 检查能否访问币安;国内服务器尝试 `PROXY_ENABLED=true` | | 大量 `418 I'm a teapot` | 币安 IP 限流封禁;保持 `MAX_CONCURRENCY=3`,等待 2 分钟后 `pm2 restart`;或开代理 | | 企微收不到 | 检查 `WECOM_WEBHOOK_URL`;`curl -X POST .../api/push/test` | | 08:10 未推送 | 确认容器/PM2 在 08:10 前已运行;查日志 | | 端口占用 | `ss -tlnp \| grep 21450` 或改 `.env` 中 `PORT` | | Docker 代理连不上 | 确认 `192.168.8.4:1081` 从容器内可达,必要时改宿主机 IP | --- ## 十一、快速命令速查 ```bash # Docker 一键 ./deploy/docker-deploy.sh # PM2 一键 ./deploy/pm2-deploy.sh # 开启代理后重启 # Docker: docker compose up -d --force-recreate # PM2: pm2 restart binance-altcoin-monitor ```