## 交易所服务端 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`。 8. 修改web服务器的伪静态规则为: ``` location / { try_files $uri $uri/ /index.php?$args; } ``` 9. 此时可以通过访问 `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"