文件
quantKonwledge/wiki/tradehk/部署运维指南.md
Manus Quant Agent baf10a9e91 feat: 新增 tradehk 专属 Wiki 文档体系(10个文档)
- 系统架构总览:技术栈、目录结构、数据流向
- 指标引擎详解:16个指标完整原理与参数(含源码行号)
- 信号评分引擎:多指标共振评分机制、动态阈值、案例分析
- 大周期偏向判定:assessBigTimeframeBias 完整说明
- EWO转换检测机制:evaluateEwoTurnForUser 逐步流程
- 飞书通知格式规范:三类通知完整格式模板
- 类型系统参考:所有 TypeScript 类型完整文档
- 数据库与存储:MySQL 表结构、缓存机制、维护指南
- 部署运维指南:Docker Compose、Nginx、飞书配置
- 开发历史与TODO:功能状态表、优先级路线图
- 优化建议汇总:9项优化建议含源码位置和预期效果
2026-03-05 23:14:31 -05:00

6.2 KiB

tradehk 部署运维指南

返回:tradehk 文档中心 源文件:docker-compose.ymldeploy/deploy.shdeploy/nginx.conf

概述

tradehk 采用 Docker Compose 部署,包含三个容器Node.js 应用服务、MySQL 数据库、Nginx 反向代理。支持一键部署脚本。


环境要求

组件 版本要求
Docker 20.10+
Docker Compose 2.0+
服务器内存 最低 2GB
服务器磁盘 最低 20GB
操作系统 Ubuntu 20.04+ / CentOS 7+

快速部署

第一步:克隆仓库

git clone ssh://git@git.hk.hao.work:2222/hao/tradehk.git
cd tradehk

第二步:配置环境变量

复制并编辑环境变量文件:

cp .env.example .env

关键环境变量说明:

变量 必填 说明 示例
DATABASE_URL MySQL 连接字符串 mysql://user:pass@mysql:3306/tradehk
JWT_SECRET JWT 签名密钥(随机字符串) your-secret-key-here
LARK_WEBHOOK_URL 飞书 Webhook URL https://open.feishu.cn/...
MARKET_ENGINE_POLL_MS 引擎轮询间隔(毫秒) 30000
MARKET_SUMMARY_INTERVAL_HOURS 汇总通知间隔(小时) 4
BINANCE_API_KEY Binance API Key自动交易需要 your-api-key
BINANCE_API_SECRET Binance API Secret your-api-secret

第三步:一键部署

chmod +x deploy/deploy.sh
./deploy/deploy.sh

部署脚本会自动完成:

  1. 构建 Docker 镜像
  2. 启动 MySQL 容器并等待就绪
  3. 运行数据库迁移Drizzle migrate
  4. 启动 Node.js 应用容器
  5. 启动 Nginx 反向代理

Docker Compose 结构

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL
      - JWT_SECRET
      - LARK_WEBHOOK_URL
    depends_on:
      mysql:
        condition: service_healthy

  mysql:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
      - ./deploy/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./deploy/nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app

volumes:
  mysql_data:

Nginx 配置说明

tradehk 的 Nginx 配置实现了:

  1. 前端静态文件服务React 构建产物(/dist
  2. API 反向代理/api/* 转发到 Node.js 应用(localhost:3000
  3. WebSocket 代理:支持 tRPC WebSocket 连接
  4. HTTPS 支持:可配置 SSL 证书

关键配置片段:

server {
    listen 80;
    server_name your-domain.com;

    # 前端静态文件
    location / {
        root /app/dist;
        try_files $uri $uri/ /index.html;
    }

    # API 代理
    location /api/ {
        proxy_pass http://app:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
    }
}

数据库管理

运行迁移

docker compose exec app pnpm drizzle-kit migrate

查看数据库

docker compose exec mysql mysql -u root -p tradehk

常用 SQL 查询

查看最近信号:

SELECT symbol, interval, direction, strength, price, 
       FROM_UNIXTIME(signalAt/1000) as signal_time
FROM signals
ORDER BY signalAt DESC
LIMIT 20;

查看 EWO 转换统计:

SELECT symbol, interval, direction, COUNT(*) as count
FROM signals
WHERE direction IN ('long', 'short')
GROUP BY symbol, interval, direction
ORDER BY count DESC;

日常运维

查看日志

# 应用日志
docker compose logs -f app

# 最近100行
docker compose logs --tail=100 app

# 只看错误
docker compose logs app 2>&1 | grep -i error

重启服务

# 重启应用(不重启数据库)
docker compose restart app

# 完整重启
docker compose down && docker compose up -d

更新部署

git pull
docker compose build app
docker compose up -d app

备份数据库

docker compose exec mysql mysqldump -u root -p tradehk > backup_$(date +%Y%m%d).sql

飞书 Webhook 配置

获取 Webhook URL

  1. 在飞书群中添加自定义机器人
  2. 复制 Webhook URL格式https://open.feishu.cn/open-apis/bot/v2/hook/xxx
  3. 设置到环境变量 LARK_WEBHOOK_URL

测试通知

curl -X POST "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" \
  -H "Content-Type: application/json" \
  -d '{"msg_type":"text","content":{"text":"tradehk 通知测试"}}'

性能调优

MySQL 配置deploy/mysql/my.cnf

参数 推荐值 说明
innodb_buffer_pool_size 服务器内存的50% InnoDB 缓冲池
max_connections 200 最大连接数
query_cache_size 64M 查询缓存

引擎轮询间隔

  • 默认30秒MARKET_ENGINE_POLL_MS=30000
  • 激进10秒更快响应,更高 API 消耗)
  • 保守60秒减少 API 调用,适合多币对监控)

注意Binance API 有速率限制,监控超过20个币对时建议将轮询间隔设为60秒以上。


常见问题

QEWO 转换通知没有收到?

检查顺序:

  1. LARK_WEBHOOK_URL 是否正确配置
  2. 用户设置中 larkWebhookEnabled 是否为 true
  3. ewoTurnRules 中是否有对应币对的规则且 enabled=true
  4. 查看应用日志是否有推送错误

Q信号通知太频繁?

调整 signalLarkThrottleMinutes 参数在用户设置中,默认10分钟,可以增加到30-60分钟。

Q数据库磁盘占用增长过快?

signals 表会持续增长。建议设置定期清理任务:

DELETE FROM signals WHERE signalAt < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) * 1000;

相关文档