yobett / oec-nest

OEC 现货交易助手(后端)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OEC 现货交易助手(后端)

简介

这里是OEC现货交易助手的后端部分,采用NestJS开发,数据库为Mysql/MariaDB。前端部分见 https://github.com/yobett/oec-ng

系统功能介绍和界面截图,见前端 Wiki

本系统的好处:

  • 从统一界面或入口查看产品信息、实时价格
  • 提供一个整合多平台的资产、订单数据视图
  • 统一的下单界面,快速下单
  • 配置策略,达到交易点即自动下单
  • 把服务器部署在海外,随时随地访问,免翻墙(在大陆访问交易所需要翻墙)

本系统通过API来连接CMC和各个交易所,用户需在这些平台上分别创建API,然后配置到本系统。目前支持三个交易所:币安、欧易和火币。

系统对API的使用如下:

  • CMC:币种信息,币价和价格变更,币种排名
  • 币安、欧易和火币:公开的交易对信息、当前价格、K线数据;个人的资产、订单数据,下单

部署和初始化

数据库

安装Mysql(或MariaDB)数据库,启动数据库实例。

创建应用数据库,例:

create schema oec charset utf8mb4 default collate utf8mb4_bin;

注意设置为utf8mb4_bin这个collate(区分大小写)。

创建数据库用户,例:

create user oecu@localhost identified by '.....';
grant all privileges on oec.* to 'oecu'@'localhost';
FLUSH PRIVILEGES;

数据库表会在应用启动时创建。

应用配置

src/common/下需要有个配置文件config-local.ts,可以从data-sample/config-local.ts拷进来,再做修改。

config-local.ts文件中:

  • 修改数据库配置
  • 如果在墙内运行,需要有一个代理,并把HttpRequestConfig.proxyEnabled设为true(生产环境在墙外,则设为false)。可以通过ssh隧道创建一个socks代理:ssh -ND localhost:1080 xxx@12.23.34.45
  • 配置服务器静态资源目录STATIC_RES_DIR.BASE
  • 配置ConfigLocal.JwtSecretConfigLocal.SiteSalt,用于访问token加密和数据库密码加密。可以通过命令npm run keys生成随机字符串,再拷进去

src/common/config.ts中的配置,如有必要也可以修改。

应用启动

npm install
npm run build
npm run start:dev

应用初次启动后,会在数据库中建立相应的表。

数据库初始化

创建应用的用户,在应用目录下运行(替换”登录名“和”密码“):

npm run console user create 登录名 密码

会在用户表创建一个用户。

创建交易所记录,运行:

npm run console exch init

将会创建几条交易所的记录(ba/oe/hb)。

部署前端

见前端项目。

配置交易所API(前端界面)

分别在CMC、各个交易所(如果有资产)申请API。

从前端界面登录,进入”系统/交易所API“菜单,把API配置进来。

同步币种、交易对数据

npm run console market-data init

此命令先从CMC同步前1000个币种,再从各交易所同步交易对。对于交易对中出现的新币种,会继续从CMC同步过来。

以上操作也可以在前端界面上完成。

同步个人数据(前端界面)

  • 进入”资产(合并)“,同步资产,关注币种,关注交易对
  • 进入”订单“,同步订单
  • 进入”上次交易“,关注交易对
  • 进入”市场/币种“,点”全部“,关注感兴趣的币种
  • 进入”市场/交易对“,点”全部“,关注感兴趣的交易对
  • 再次进入”订单“,同步火币(HB)的订单(火币的API,只能获取指定交易对的订单,因此要先关注交易对,再同步火币订单)

生产环境

启动:

npm run build
npm run start:prod
#
node dist/main

在生产服务器,一般会把node应用安装为服务。以下为Systemd系统服务的示例(文件/etc/systemd/system/multi-user.target.wants/node-oec.service):

[Unit]
Description=OEC

[Service]
ExecStart=node /usr/node/oec/dist/main
Restart=always
RestartSec=1
User=oec
Group=oec
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
Environment=PORT=3000
WorkingDirectory=/usr/node/oec
SyslogIdentifier=node-oec
TZ=Asia/Shanghai

[Install]
WantedBy=multi-user.target

可以使用Nginx来提供前端资源,并作为后端应用的代理。Nginx的配置示例:

location /oec/api/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://11.22.33.44:3000;
    client_max_body_size 20M;
}

location /oec {
    root   /usr/node/html;
    index  index.html index.htm;
    try_files $uri /oec/index.html;
}

location / {
    root   /usr/node/html;
    index  index.html index.htm;
}

License

MIT

About

OEC 现货交易助手(后端)


Languages

Language:TypeScript 99.8%Language:JavaScript 0.2%