Files
crypto_monitor/crypto_monitor_gate/部署文档.md
T
2026-05-21 11:45:49 +08:00

8.5 KiB
Raw Blame History

crypto_monitor_gate 部署指南:SSH SOCKS + Gate.io + PM2Ubuntu

本文面向:在本机运行本项目,但 直连 Gate.io API 不稳定或被重置 的场景。思路是:

  • 本机用 ssh -D 做动态转发,把 SOCKS5 出口放到能正常访问 Gate 的机器(常见为一台境外 VPS)
  • 项目在 .env 中设置 GATE_SOCKS_PROXY=socks5h://127.0.0.1:1080(或你实际端口),ccxt 经 SOCKS 访问交易所
  • SSH 隧道:用 ssh -D 在本机常驻即可(screen / tmux / systemd 等),不必交给 PM2
  • 使用 PM2 仅托管 Flask 应用;仓库根目录 ecosystem.config.cjs 只定义 crypto-monitor-gate

安全提醒:不要把 .env、私钥 .pem、Gate API Key 提交到 Git;下文只用占位符。


0. 你需要准备的东西

  • 一台 Ubuntu(或同类 Linux)运行项目的机器(下文称「本机」)
  • 一台可 SSH 登录、且 能正常访问 Gate.io API 的 VPS(示例:HostName 填你的服务器 IP,用户如 root
  • SSH私钥登录(推荐,便于隧道脚本无人值守)
  • 本机已安装:python3python3-venvpipcurlsshgit(可选)、node + npm(安装 PM2

1. 获取代码与目录

将包含 app.py 的项目放到固定目录,例如:

mkdir -p /opt/crypto_monitor
cd /opt/crypto_monitor
git clone https://git.bz121.com/dekun/crypto_monitor.git
cd crypto_monitor/crypto_monitor_gate

下文用 /opt/crypto_monitor/crypto_monitor_gate 仅为示例,请换成你的实际绝对路径。

拉取代码后,若目录下尚无 .env

cp -n .env.example .env

2. 配置 SSH 私钥与 ~/.ssh/config

mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 私钥示例:~/.ssh/vps1.pem
chmod 600 ~/.ssh/vps1.pem

编辑 ~/.ssh/config(示例别名 gate-vps,与你手工启动 ssh -D ... gate-vps 一致即可):

Host gate-vps
  HostName 你的_VPS_IP
  User root
  IdentityFile ~/.ssh/vps1.pem
  IdentitiesOnly yes
  ServerAliveInterval 30
  ServerAliveCountMax 3
  ExitOnForwardFailure yes
  BatchMode yes

测试:

ssh gate-vps true

若尚未完全改为密钥登录,可暂时注释 BatchMode yes,调试完成后再打开。


3. 手工验证:SSH SOCKS + Gate API

3.1 本地 SOCKS(示例端口 1080

ssh -N -D 127.0.0.1:1080 gate-vps

保持运行,另开终端继续。

3.2 验证经 SOCKS 可访问 Gate

curl -4 -sS --max-time 15 --proxy socks5h://127.0.0.1:1080 https://api.gateio.ws/api/v4/spot/time

应返回 JSON(含服务器时间字段)。若此处失败,不要先启动应用:先修隧道或 VPS 出站。


4. Python 虚拟环境

cd /opt/crypto_monitor/crypto_monitor_gate

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
pip install flask requests ccxt werkzeug PySocks Pillow

走 SOCKS 时 必须 安装 PySocks,否则易出现代理相关报错。

可选:

export PYTHONDONTWRITEBYTECODE=1

5. 配置环境变量(.env.example.env

文件 是否进 Git 说明
.env.example 变量模板与注释,可随 git pull 更新
.env 本机真实配置;app.py 只读此文件

5.1 首次配置

cd /opt/crypto_monitor/crypto_monitor_gate

cp -n .env.example .env
nano .env

5.2 备份与 git pull

  • .env 不在 Git 中git pull 不会覆盖本地 .env
  • 远端若更新 .env.examplepull 后请手动把新增变量补进你的 .env
  • 升级前备份cp .env .env.backup.$(date +%Y%m%d);恢复:cp .env.backup.YYYYMMDD .env
  • 换机scp 复制 .env,或新机 cp .env.example .env 后重填。

5.3 自动备份(数据库 + 复盘图片)

与 Binance 实例相同:每天 北京时间 0:00/root/backups,保留 30 天

cd /opt/crypto_monitor/crypto_monitor_gate
chmod +x scripts/backup_data.sh scripts/install_backup_cron.sh
bash scripts/install_backup_cron.sh
bash scripts/backup_data.sh   # 试跑

备份目录:/root/backups/crypto_monitor_gate/YYYY-MM-DD/。详见 Binance 项目 部署文档.md 第 5.3 节(恢复步骤、可选 .env 变量相同)。

若还部署了 crypto_monitor_gate_bot,请在该目录同样执行 bash scripts/install_backup_cron.sh

5.4 必填项检查(Gate + 代理)

与交易所相关的变量必须是 Gate 前缀(不要再写 OKX 变量,否则代理不会生效、密钥也不会被识别)。至少确认:

APP_HOST=127.0.0.1
APP_PORT=5000

# 实盘(按需)
LIVE_TRADING_ENABLED=false
GATE_API_KEY=你的_Key
GATE_API_SECRET=你的_Secret

# 经本机 SSH 动态转发访问 Gate(端口与隧道一致)
GATE_SOCKS_PROXY=socks5h://127.0.0.1:1080

# 若不用 SOCKS,可改用 HTTP 代理(一般二选一)
# GATE_HTTP_PROXY=http://127.0.0.1:7890
# GATE_HTTPS_PROXY=http://127.0.0.1:7890

说明:推荐 socks5h://,由 SOCKS 端解析域名,与 curl --proxy socks5h://... 行为一致。


6. 手工启动 Flask(验证)

  1. SOCKS 已监听 127.0.0.1:1080
  2. source .venv/bin/activate
  3. .env 已含 GATE_SOCKS_PROXY
cd /opt/crypto_monitor/crypto_monitor_gate
source .venv/bin/activate
python app.py

浏览器访问:http://127.0.0.1:5000(或你在 .env 中的端口)。


7. 安装 PM2

sudo npm i -g pm2
pm2 -v

8. PM2:使用仓库内 ecosystem.config.cjs(推荐)

在项目根目录:

cd /opt/crypto_monitor/crypto_monitor_gate
pm2 start ecosystem.config.cjs
pm2 status
pm2 logs --lines 200

默认只启动 crypto-monitor-gate.venv/bin/python app.py)。

本机已可直连 Gate、不需要隧道时

.env 里应 去掉或留空 GATE_SOCKS_PROXY(除非仍要走别的代理),再 pm2 start ecosystem.config.cjs

开机自启

pm2 save
pm2 startup
# 按屏幕提示执行一条 sudo 命令

9. 等价手工命令(不使用 ecosystem 文件时)

9.1 SSH SOCKS(自行后台常驻,不推荐用 PM2)

示例(前台;实际可用 screen/tmux/-f 后台化或 systemd):

ssh -N -D 127.0.0.1:1080 gate-vps \
  -o ServerAliveInterval=30 -o ServerAliveCountMax=3 \
  -o ExitOnForwardFailure=yes

9.2 Flask

cd /opt/crypto_monitor/crypto_monitor_gate
pm2 start /opt/crypto_monitor/crypto_monitor_gate/.venv/bin/python --name crypto-monitor-gate -- \
  /opt/crypto_monitor/crypto_monitor_gate/app.py

10. 交易所「连接不上」排查清单

  1. .env 是否为 Gate 变量:必须是 GATE_SOCKS_PROXY / GATE_API_KEY / GATE_API_SECRET,不是 OKX。
  2. 隧道是否在本机端口监听(若配置了 GATE_SOCKS_PROXY):
    ss -lntp | grep 1080 || true
    
  3. curl 复测 Gate(与第 3.2 节相同);curl 不通则应用也不会通。
  4. PySockspip show PySocks,缺失则 pip install PySocks
  5. SSH 隧道连不上:检查私钥权限、~/.ssh/config、VPS 出站与端口是否与 .env 一致。
  6. 启动顺序:先保证 SOCKS 已监听,再 pm2 start 应用(或重启应用)。

11. 推荐启动顺序(习惯)

  1. 若走代理:先启动并确认 SSH SOCKS 已监听,再 curl --proxy socks5h://127.0.0.1:1080 https://api.gateio.ws/api/v4/spot/time 成功
  2. pm2 start ecosystem.config.cjs
  3. 再确认页面与余额等接口正常

12. 免责声明

交易所有合规与地区政策要求。请确保使用方式符合当地法律法规与交易所条款。本文仅描述网络与工程部署路径。


附录:数据库标签修复脚本 scripts/fix_breakeven_labels.py

在 Ubuntu 上:

1)预览(不写库):

python scripts/fix_breakeven_labels.py --db ./crypto.db --dry-run

2)确认后执行:

python scripts/fix_breakeven_labels.py --db ./crypto.db --apply

默认修复条件:monitor_type='下单监控'result='止损'pnl_amount > 0 → 改为 result='保本止盈'