You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

6.6 KiB

交易所服务端

pc端api接口,h5端api接口,后台管理,websocket信息推送系统

后台管理地址
域名/admin
账号:admin
密码:admin

软件架构

Laravel6 + Mysql

环境要求

  • git 用户版本管理,部署和升级必要工具
  • PHP 7.3 +
  • Mysql 5.7+ ,数据库
  • Redis redis需要开启过期键监听功能

在配置文件中的配置 notify-keyspace-events Ex 重启

  • composer 用于安装依赖
  • PHP扩展
    • gmp PHP扩展,注意和 PHP 版本相同。
    • mongodb PHP扩展,注意和 PHP 版本相同。
    • ext-zip 扩展,注意和 PHP 版本相同。
    • ext-json 扩展,注意和 PHP 版本相同。
    • ext-fileinfo 扩展,注意和 PHP 版本相同。
  • PHP函数(需要进入php配置文件取消禁用)
    • putenv 获取env配置信息
    • proc_open (函数说明:执行一个命令,并且打开用来输入/输出的文件指针) composer 安装时需要
    • pcntl_signal (函数说明:安装一个信号处理器) 启用workman需要
    • pcntl_fork (函数说明:在当前金正当前未知产生分支) 启动workerman需要
    • pcntl_wait (等待或返回fork的子进程状态) 启动workerman需要
    • pcntl_signal_dispath (调用等待信号的处理器) 启动workerman需要
    • pcntl_alarm() 启动workerman需要
    • symlink 创建静态资源软连接需要
    • exec tinker需要

部署

Git部署

注意:使用过程中,必须避免直接修改数据库数据,Laravel 拥有强大的 Eloquent ORM 模型层,程序中的所有逻辑交互都由模型关联完成,直接修改数据库数据将会导致未知的错误。应用脱离数据库直接交互是现在最流行的做法。

生产环境下为遵守安全策略,非常建议在服务器本地进行部署,暂时不提供相关线上初始化安装的功能。因此,虽然前期部署的步骤较多,但已经自动化处理了很大部分的流程,只需要跟着下面的命令一步步执行,一般是不会有部署问题的。

  1. 创建一个数据库,命名随意,但记得之后填写配置时需要对应正确,并且数据库字符集为 utf8-general-ci
  2. 打开linux服务器终端执行 ssh-keygen -t rsa 将在 ~/.ssh/id_rsa.pub 生成公钥,将公钥添加到git仓库部署公钥中 获得拉去代码的权限
  3. 在你想要项目运行目录中,执行 git clone --depth 1 -b server git@gitee.com:guapiya233/binvet.git ./server 将代码下载到本地

    -b 意为选择分支 ./server 意为将代码克隆到 server 目录

  4. 进入server项目目录执行 composer install 进行依赖的安装

    如果未满足上述环境要求可能会出现安装报错

  5. 在项目根目录中,复制 .env.example 为一份新的,并重命名为.env

    该文件储存了系统的配置信息

  6. .env 中配置Mysql数据库信息以及redis信息

    mysql与redis是必须配置的信息,其余的workerman、接口域名配置、邮件配置、短信配置可滞后配置

  7. 进入项目根目录后执行php artisan exchange:install 进行安装

    该命令将会自动创建导入数据库、创建资源目录软连接、重置管理员密码

  8. 你可能使用的web服务器为 nginx 以及 apache,无论怎样,应用的起始路径在 /public 目录,请确保指向正确,同时程序的根目录权限应该调整为:拥有者和你的 Web 服务器运行用户一致,且根目录权限为 755
  9. 修改web服务器的伪静态规则为:
    location / { 
       try_files $uri $uri/ /index.php?$args; 
    }
    
  10. 此时可以通过访问 http://your_domain 来使用 交易所管理后台。管理员账号密码为:admin / admin

启动websocket行情服务

  1. 启动主程序

    • php artisan workerman option start --d
    • php artisan workerman swap start --d
  2. 启动websocket行情采集工具

    • 行情采集
      cd public/exchange 
      sh wss_start.sh &
      
    • swap采集
      cd public/swap 
      sh swap_start.sh &
      
  3. 配置nginx 设置协议升级(如果是ws则需要将https改为http) 在站点nginx配置文件增加以下配置

    #在nginx内添加该段内容 
    location /ws1 { 
        proxy_pass https://127.0.0.1:2346; 
        proxy_http_version 1.1; 
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "upgrade"; 
        } 
    location /ws2 { 
        proxy_pass https://127.0.0.1:2348; 
        proxy_http_version 1.1; 
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "upgrade"; 
        }
    
  4. 常见问题

    • killall -9 php 解决无法workerman关闭的问题

开启守护进程 (使用supervisor管理器)

  1. php artisan queue:work redis --queue=triggerStrategy

    合约平仓? triggerStrategy

  2. php artisan queue:work redis --queue=HandleFlatPosition

    HandleFlatPosition

  3. php artisan queue:work redis --queue=handleContractEntrust

    handleContractEntrust

  4. php artisan queue:work redis --queue=handleEntrust

    合约队列 handleEntrust

  5. php artisan queue:work redis --queue=UdunDeposit

    U盾队列 UdunDeposit

  6. php artisan option:delivery 期权交割 option_delivery

  7. php artisan flatPosition

    平仓机器人 flatPosition

  8. php artisan contractDealRobot

    合约交易成交机器人 contractDealRobot

  9. php artisan BdealRobot BdealRobot

    币币交易买单处理机器人

  10. php artisan SdealRobot SdealRobot

    币币交易卖单处理机器人

添加corntab任务(用于执行定时任务)

corntab任务是laravel的任务调度(定时任务)对系统的依赖,如果未开启这项配置将会导致,期权场景不能创建、异常期权任务不能取消、USD-CNY汇率不能更新、申购活动无法进行 在命令行终端执行
crontab -e -u www 增加这一行配置 (命令中的目录需要根据自己的环境进行修改) * * * * * /www/server/php/73/bin/php /www/wwwroot/exchange/server/artisan schedule:run >> /dev/null 2>&1
这行命令是起 每分钟调度一次 php artisan schedule:run 命令 但使用的是绝对路径

常见问题

  1. 安装完成访问网址提示权限问题。 chown -R www:www ./ 将文件夹权限设置给www用户即可
  2. 期权订单无法交割。 打开redis的过期键监听功能 notify-keyspace-events "Ex"