# 本地部署说明(含 SOCKS5 代理 `socks5h://127.0.0.1:1080`) > **云服务器部署**:若主机在境外且可直连 `api.gateio.ws`,请将 `config.yaml` 中 `proxy.enabled` 设为 **`false`**,无需 SOCKS。详见 [`交易系统部署说明.md`](../交易系统部署说明.md) §8 与 [`多执行器与信号转发归档.md`](./多执行器与信号转发归档.md) §7。 本文说明如何在**本机**部署 **onchain_scout_gate**(Gate USDT 永续监控 + 可选 Gemma 漏斗 + Web 看板),并在访问 Gate 行情、企业微信等外网接口时使用 **本地 SOCKS5 代理**。环境变量统一使用 `**socks5h://127.0.0.1:1080`**(**h** = 主机名在代理端解析,等同 curl 的 `socks5h`,推荐)。端口 `**1080`** 与 Clash / v2rayN / Sing-box 等本地 SOCKS 入站一致。 --- ## 1. 前置条件 ### 1.1 系统与软件 | 项目 | 说明 | | ------ | ---------------------------------------------------------------------------- | | 操作系统 | Windows 10/11 或 Linux / macOS 均可 | | Python | **3.10+**(推荐 3.11 / 3.12) | | 代理客户端 | 本机已运行 **SOCKS5** 监听 `**127.0.0.1:1080`**(常见为 Clash / v2rayN 的「本地 SOCKS5 端口」) | | 浏览器 | 用于打开 `http://127.0.0.1:8088`(或你在 `config.yaml` 中配置的端口) | ### 1.2 代理必须可用(自检) 在启动本服务前,请先确认 **1080 端口 SOCKS5 已连通外网**(否则 Gate 行情请求会超时或 TLS 失败)。 **Windows PowerShell**(若已安装 `curl` 且 curl 支持 socks5h): ```powershell curl -x socks5h://127.0.0.1:1080 -I "https://api.gateio.ws" --max-time 15 ``` 期望看到 HTTP 状态行(如 `HTTP/1.1 200` 或 `HTTP/2 302` 等),而不是长时间卡住或 `Connection refused`。 **说明**:`socks5h` 表示把 **DNS 也走代理**(推荐,避免 DNS 污染)。Python 侧下文使用等价思路。 --- ## 2. 获取代码与目录 将仓库(或 `onchain_scout` 目录)放到本机任意路径,例如: - Windows:`C:\opt\onchain_scout` - Linux:`/opt/onchain_scout` 下文以 `**onchain_scout` 为项目根目录**(即包含 `config.yaml`、`requirements.txt`、`app/` 的那一层)。 --- ## 3. Python 虚拟环境 ### 3.1 Windows(PowerShell) ```powershell cd C:\opt\onchain_scout python -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install -U pip pip install -r requirements.txt ``` 若执行策略禁止激活脚本: ```powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned ``` ### 3.2 Linux / macOS ```bash cd /opt/onchain_scout python3 -m venv .venv source .venv/bin/activate pip install -U pip pip install -r requirements.txt ``` ### 3.3 SOCKS5 与 httpx 本项目通过 **httpx** 访问 Gate 行情(及按需的企业微信 Webhook)。走 **SOCKS5** 需要安装带 socks 依赖的 httpx。`requirements.txt` 中已使用: ```text httpx[socks]==0.27.2 ``` 若你曾单独安装过无 extras 的 `httpx`,请在本虚拟环境中重新执行: ```bash pip install -r requirements.txt ``` --- ## 4. 配置文件 `config.yaml` 1. 若不存在,从示例复制: ```bash copy config.example.yaml config.yaml ``` 2. 至少修改: - `auth.username` / `auth.password`:登录 Web 看板用(生产环境请使用强密码)。 - `wecom.webhook`:企业微信群机器人 Webhook(若暂不用推送,可先填占位,但**触发类推送**仍可能失败,可先关相关逻辑或接受报错日志)。 - `monitor.min_24h_quote_volume_usdt`:成交额过滤(默认一千万量级,按 README 说明)。 - `**gemma`**:若本机已装 Ollama 且要跑漏斗,将 `enabled: true` 并设置 `model`;否则保持 `enabled: false`。 - `**proxy**`:访问 Gate 行情需走本机 SOCKS 时,设 `proxy.enabled: true`,`proxy.url` 一般为 `**socks5h://127.0.0.1:1080**`(与 Clash 等本地 SOCKS 端口一致)。**本机 Ollama 不会使用该代理**。 3. **不要将** `config.yaml` **提交到公开仓库**(内含密钥与 Webhook)。 --- ## 5. 代理写入 `config.yaml`(推荐,无需环境变量) 在 `config.yaml` 根级增加或修改 `**proxy`** 段(与 `config.example.yaml` 一致): ```yaml proxy: enabled: true url: "socks5h://127.0.0.1:1080" ``` 说明: - `**socks5h://**`:配置里可继续写(与 curl 习惯一致)。程序在创建 httpx 客户端时会**自动改成 `socks5://`**,因部分环境下 httpx/socksio 不认 `socks5h` 会报 `Unknown scheme`;改为 `socks5` 后由**本机解析 DNS** 再走 SOCKS。若仍异常,可直接在配置里写 `**socks5://127.0.0.1:1080`**。 - **作用范围**:**Gate 行情**相关 httpx 请求使用 `config.yaml` 中的 `proxy`;企业微信当前实现为直连。**不会**对 `gemma.ollama_base_url`(本机 Ollama)套代理。 - `**proxy.enabled: false`**:Gate 客户端仍可使用系统环境变量中的 `HTTP_PROXY` / `ALL_PROXY`(`trust_env=True`);启用配置代理后则**固定走 `proxy.url`**,并 `trust_env=False`,避免与环境变量冲突。 --- ## 6. PM2 守护进程(推荐) ### 6.1 安装 PM2 需已安装 **Node.js**,然后全局安装 PM2: ```bash npm install -g pm2 ``` ### 6.2 准备虚拟环境与配置 1. 项目根目录已创建 `.venv` 且 `pip install -r requirements.txt` 完成。 2. `config.yaml` 已按上文填写(含 `proxy`、`app.port` 等)。 3. 确保存在目录 `**runtime/**`(用于日志与 SQLite;首次启动会自动创建亦可)。 ### 6.3 使用仓库内 `ecosystem` 启动 仓库提供 `**deploy/ecosystem.config.cjs**`: - `**cwd**`:自动设为项目根(`deploy` 的上一级)。 - `**script**`:根据操作系统选择 `**.venv/Scripts/python.exe`(Windows)** 或 `**.venv/bin/python`(Linux/macOS)**。 - `**args`**:`python -m app.main`,**监听地址与端口完全由 `config.yaml` 的 `app.host` / `app.port` 决定**,无需改 ecosystem 里的端口。 在项目根目录执行: ```bash cd /opt/onchain_scout # 或你的实际路径 pm2 start deploy/ecosystem.config.cjs pm2 status pm2 logs onchain-scout ``` 常用维护命令: | 命令 | 说明 | | --------------------------- | --------------------------- | | `pm2 restart onchain-scout` | 热重启(改 `config.yaml` 后需重启生效) | | `pm2 stop onchain-scout` | 停止 | | `pm2 delete onchain-scout` | 从进程列表移除 | | `pm2 save` | 保存当前进程列表 | | `pm2 startup` | 生成开机自启脚本(按屏幕提示执行一次) | 标准输出与错误会写入项目 `**runtime/pm2-out.log**`、`**runtime/pm2-error.log**`(见 ecosystem 内配置)。 ### 6.4 Windows 说明 在 **PowerShell** 或 **cmd** 中同样可使用 `pm2 start deploy\ecosystem.config.cjs`。若 `python.exe` 路径不对,请确认虚拟环境目录名为 `.venv` 且位于项目根。 --- ## 7. 前台启动(调试用) 不经过 PM2、仅本地调试时,**无需**再设置 `ALL_PROXY` 等环境变量(代理已由 `config.yaml` 的 `proxy` 段控制): ```powershell cd C:\opt\onchain_scout .\.venv\Scripts\Activate.ps1 python -m app.main ``` `app.host` / `app.port` 以 `config.yaml` 为准。 --- ## 8. 验证 1. **代理**:本机 SOCKS 入站已监听;`config.yaml` 中 `proxy.enabled: true`。 2. **Web**:浏览器访问 `http://127.0.0.1:`,登录后「监控池配置」JSON 中应出现 `**proxy`** 字段(`enabled` / `url`)。 3. **Gate**:等待一个 `poll_interval` 周期,看日志是否仍有 TLS/连接错误;若有,尝试 `socks5` 或检查端口。 4. **Ollama**:`gemma.enabled: true` 时,访问 `127.0.0.1:11434` **不**走 `proxy.url`,一般无需 `NO_PROXY`。 --- ## 9. 常见问题(FAQ) ### Q1:`Connection refused` 连 Gate / 代理 - 本机代理未开或端口不是 **1080**。 - `proxy.enabled` 未设为 `true` 或 `proxy.url` 写错。 ### Q2:改了 `config.yaml` 不生效 - PM2 下需执行 `**pm2 restart onchain-scout`** 重新加载进程与配置。 ### Q3:企业微信推送失败 - 多为 Webhook 无效;若走代理仍失败,检查代理是否允许访问 `qyapi.weixin.qq.com`。 ### Q4:pip / git 走代理 - 与应用程序无关;可在安装依赖的终端自行 `export HTTPS_PROXY=...`(**不必**写进应用 `config.yaml`)。 --- ## 10. 备忘 ```bash cd /opt/onchain_scout pm2 start deploy/ecosystem.config.cjs && pm2 save ``` --- 文档版本:与仓库 `onchain_scout_gate` 当前结构对应;请以 `README.md`、`deploy/ecosystem.config.cjs`、`app/main.py` 为准。