Files
2026-05-21 16:51:27 +08:00

8.5 KiB
Raw Permalink Blame History

crypto_monitor_okx 部署指南:SSH SOCKS + OKX + PM2Ubuntu

本文面向:本地 Ubuntu 机器运行项目,但 本机直连 OKX 会被 TLS/SNI reset 的场景。解决思路是:

  • 本机启动 ssh -D 动态转发,把 SOCKS5 出口放到你可正常访问 OKX 的 VPS 上
  • 项目通过环境变量 OKX_SOCKS_PROXY=socks5h://127.0.0.1:1080ccxt 走 SOCKS
  • pm2 托管 SSH 隧道Flask 应用(你也可以只用 screen,但本文按你要求用 PM2

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


0. 你需要准备的东西

  • 一台 Ubuntu 本地机器(下文称“本机”)
  • 一台可 SSH 登录、且 能正常访问 OKX 的 VPS(示例公网 IP47.76.87.111,用户:root
  • VPS 登录方式:SSH 私钥(推荐)或密码(不推荐用于无人值守)
  • 本机已安装:
    • python3python3-venvpip(或 python3-pip
    • git(可选)
    • curlssh
    • node + npm(用于安装 pm2

1. 获取代码与目录

1.1 Git 克隆(推荐)

mkdir -p /opt/crypto_monitor_user
cd /opt/crypto_monitor_user
git clone https://git.bz121.com/dekun/crypto_monitor_user.git
cd crypto_monitor_user/crypto_monitor_okx
cp -n .env.example .env    # 若尚无 .env

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

1.2 从云服务器打包同步到本地(可选)

在云服务器项目目录(包含 app.py 的目录)执行:

cd /opt/crypto_monitor_user/crypto_monitor_okx

# 可选:清理 Python 缓存,减少小文件传输
find . -type d -name __pycache__ -prune -exec rm -rf {} +
find . -type f -name "*.pyc" -delete

tar -czf crypto_monitor_user.tgz .

下载 crypto_monitor_user.tgz 到本机后解压:

mkdir -p /opt/crypto_monitor_user/crypto_monitor_okx
cd /opt/crypto_monitor_user
tar -xzf crypto_monitor_user.tgz -C crypto_monitor_okx
cd crypto_monitor_okx
cp -n .env.example .env    # 若尚无 .env

2. 配置 SSH 私钥与 ~/.ssh/config(推荐)

把私钥放到本机(示例:~/.ssh/vps1.pem),并设置权限:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
mv ~/Downloads/vps1.pem ~/.ssh/vps1.pem
chmod 600 ~/.ssh/vps1.pem

编辑 ~/.ssh/config(没有就创建),添加:

Host okx-vps
  HostName 47.76.87.111
  User root
  IdentityFile ~/.ssh/vps1.pem
  IdentitiesOnly yes
  ServerAliveInterval 30
  ServerAliveCountMax 3
  ExitOnForwardFailure yes
  BatchMode yes

测试:

ssh okx-vps true

如果你还没完全切到密钥登录(还会交互要密码),先把 BatchMode yes 注释掉,等密钥登录稳定后再打开。


3. 先手工验证:SSH SOCKS + OKX API

3.1 开一个本地 SOCKS1080

ssh -N -D 127.0.0.1:1080 okx-vps

保持该进程运行(另开终端继续下面步骤)。

3.2 验证 OKX 走 SOCKS 可用

curl -4 -Iv --max-time 15 --proxy socks5h://127.0.0.1:1080 https://www.okx.com/api/v5/public/time

看到 HTTP/2 200(或至少 TLS 握手成功且返回 JSON)即 OK。


4. Python 虚拟环境(venv

在本机项目目录:

cd /opt/crypto_monitor_user/crypto_monitor_okx

python3 -m venv .venv
source .venv/bin/activate

python -m pip install -U pip
pip install flask requests ccxt werkzeug PySocks Pillow

说明:本仓库当前没有 requirements.txt。如果你希望“完全复刻云服务器依赖”,可以在云服务器项目环境里执行 pip freeze > requirements.txt 带回本机再 pip install -r requirements.txt(记得删掉明显无关/体积巨大的包)。

建议减少 .pyc 垃圾文件(可选):

export PYTHONDONTWRITEBYTECODE=1

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

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

5.1 首次配置

cd /opt/crypto_monitor_user/crypto_monitor_okx

cp -n .env.example .env    # 已存在 .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 必填项检查(OKX + 代理)

至少确认/填写这些关键项(示例):

APP_HOST=127.0.0.1
APP_PORT=5000

# OKX(如需实盘)
LIVE_TRADING_ENABLED=false
OKX_API_KEY=...
OKX_API_SECRET=...
OKX_API_PASSPHRASE=...

# OKX 出口:走本机 SSH 动态转发 SOCKS
OKX_SOCKS_PROXY=socks5h://127.0.0.1:1080

# 开仓多周期K线图(可选)
# ORDER_CHART_ENABLED=true
# ORDER_CHART_TFS=4h,1h,15m,5m
# ORDER_CHART_LIMIT=100
# ORDER_CHART_DIR=static/images/order_charts
# DAILY_OPEN_ALERT_THRESHOLD=5

# Ollama(如本机跑)
OLLAMA_API=http://127.0.0.1:11434/api/generate
AI_MODEL=你的模型名

OKX_SOCKS_PROXY 使用 socks5h:让 SOCKS 侧做域名解析(更贴近你 curl --proxy socks5h://... 的成功路径)。


6. 本机手工启动(验证 Flask

确保:

  1. SOCKS 隧道已运行(127.0.0.1:1080
  2. 虚拟环境已 activate
  3. .env 已配置

启动:

cd /opt/crypto_monitor_user/crypto_monitor_okx
source .venv/bin/activate
python app.py

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


7. 安装 PM2Node

sudo npm i -g pm2
pm2 -v

8. 用 PM2 启动 SSH SOCKS 隧道(推荐:密钥免交互)

8.1 启动隧道进程

pm2 start "ssh" --name okx-socks-tunnel -- \
  -N -D 127.0.0.1:1080 okx-vps \
  -o ServerAliveInterval=30 -o ServerAliveCountMax=3 \
  -o ExitOnForwardFailure=yes -o BatchMode=yes

查看日志:

pm2 logs okx-socks-tunnel --lines 200

8.2 仍然验证 OKX

curl -4 -Iv --max-time 15 --proxy socks5h://127.0.0.1:1080 https://www.okx.com/api/v5/public/time

8.3 开机自启(可选)

pm2 save
pm2 startup

9. 用 PM2 启动 Flaskapp.py

pm2 管理 Python 的常用方式是直接启动解释器:

cd /opt/crypto_monitor_user/crypto_monitor_okx

pm2 start /opt/crypto_monitor_user/crypto_monitor_okx/.venv/bin/python --name crypto-monitor -- \
  /opt/crypto_monitor_user/crypto_monitor_okx/app.py

若项目目录与上文不一致,请替换为实际绝对路径;或用 readlink -f app.py 得到绝对路径。

查看日志:

pm2 logs crypto-monitor --lines 200

保存进程列表:

pm2 save

10. 常见问题排查(高频)

10.1 OKX 仍然失败:先看隧道是否在

ss -lntp | grep 1080 || true
pm2 status

10.2 pm2 里的 ssh 立刻退出

常见原因:

  • 私钥权限不对(chmod 600
  • ~/.ssh/config 写错 HostName/User/IdentityFile
  • 开了 BatchMode yes 但仍需要密码(会失败)

10.3 ccxt SOCKS 报错 / 代理不生效

本机 Python 依赖通常需要:

source .venv/bin/activate
pip install PySocks

10.4 .pyc 很多导致同步慢

.pyc 是缓存,删除不影响功能:

find . -type d -name __pycache__ -prune -exec rm -rf {} +
find . -type f -name "*.pyc" -delete

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

  1. pm2 启动 okx-socks-tunnel
  2. curl --proxy socks5h://127.0.0.1:1080 ... 验证 OKX
  3. pm2 启动 crypto-monitor

12. 免责声明

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

写好了,脚本路径:

  • scripts/fix_breakeven_labels.py

你在 Ubuntu 上这样用:

  1. 先预览(不写库):
python scripts/fix_breakeven_labels.py --db ./crypto.db --dry-run
  1. 确认后执行:
python scripts/fix_breakeven_labels.py --db ./crypto.db --apply

默认修复条件就是你要的:

  • monitor_type='下单监控'
  • result='止损'
  • pnl_amount > 0
  • 改成 result='保本止盈'

如果你想,我还可以再给你一条“先自动备份 DB 再执行”的一键命令。