# 项目名称
项目介绍

## 目录
- [安装指南](#一、安装指南) 
    - [克隆项目](#克隆项目) 
    - [准备工作](#准备工作)
    - [ffmpeg安装](#ffmpeg安装) 
    - [安装依赖](#安装依赖)
    - [配置](#配置)
        - [运行目录](#运行目录)
        - [apache](#apache)
        - [nginx](#nginx)
        - [.env](#env)
- [数据库](#二、数据库)
- [网站初始信息](#三、初始信息)


## 一、安装指南
### 克隆项目
```bash
git clone http://47.76.126.2:3000/seven/bot-28.git
```
### 准备工作
需要先安装好运行环境，推荐使用宝塔服务器，安装LNMP的架构，建议使用nginx作为服务器，不建议使用apache。需要安装以下软件：


PHP 需要安装扩展：`php_openssl`  `php_gd`  `php_curl`  `php_gmp`  `php_fileinfo`  `php_zip`  `php_pdo_mysql`

|  所需环境 | 版本      | 备注            | 推荐版本 |
|----------|-----------|----------------|----------|
| linux    | \>= 7.0   |                | 7.9      |
| nginx    | \>= 1.17  |                | 最新的    |
| php      | \>= 8.0.2 |   8.0.2 ~ 8.2  | 8.2.9    |
| mysql    | \>= 5.7   | 必须要5.7及以上  | 5.7     |
| node     | >= 22 
### 安装依赖
```bash
# 安装依赖
composer install

# 创建符号链接
php artisan storage:link
```
### 配置
- #### 运行目录：
    - 部署完成后，请修改 【运行目录】 为 `public` ，这里以宝塔为例：
    ![这是图片](public/static/img/1.png)

- #### apache：
```apache
<IfModule mod_rewrite.c>
        Options +FollowSymlinks -Multiviews
        RewriteEngine on
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>

# 可根据实际情况进行修改
<IfModule mod_headers.c>
        Header set Accept-Ranges bytes
        Header set Access-Control-Allow-Origin "*"
        Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
        Header set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With"
        Header set Access-Control-Allow-Credentials "true"
</IfModule>
```
- #### nginx：
```nginx
location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Lang';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Max-Age' 3600;

        if ($request_method = 'OPTIONS') {
            # OPTIONS 请求直接返回 200
            return 204;
        } 

        #try_files $uri $uri/ /index.php?$query_string;        
        if (!-e $request_filename) {
            rewrite ^/index.php(.*)$ /index.php?s=$1 last;
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
}
```
- #### .env：
    (1) 将 `example.env` 重命名为 `.env`
    
    (2) 修改以下配置项
```bash
# 以下配置仅为示例

# App
APP_NAME=lovingtalk
APP_DEBUG=false
APP_URL=http://localhost:8080

#足球接口域名
FOOTBALL_APP_URL=https://api.8xbet001.com

# 足球数据API平台的秘钥和地址
API_FOOTBALL_KEY=b60ecb5e998be566e592068b3f6d98b1
API_FOOTBALL_HOST=https://v3.football.api-sports.io


# 数据库
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=bot
DB_USERNAME=root
DB_PASSWORD=123456
DB_PREFIX=bot_

# 电子邮件
MAIL_MAILER=smtp
MAIL_ENCRYPTION=tls
MAIL_PORT=587
MAIL_FROM_NAME="${APP_NAME}"
MAIL_HOST=
MAIL_FROM_ADDRESS=""
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_EXP=600  # 邮件验证码有效期(秒)
```


## 二、数据库
<!-- 首次部署请依次导入以下文件，增量更新请根据实际情况导入即可。-->
- 请依次导入以下文件

|序号|文件|说明|
|---|---|---|
|1|[/sql/sql_prod.sql](/sql/sql_prod.sql)|初始数据|

## 三、初始信息
- 通过部署的域名访问程序后台系统，登录后请及时修改密码！！！
- 初始账号密码： 
    - 用户名：`admin`
    - 密码：`123456`
`注意：登录后请及时修改管理员密码，防止泄露。`

## 四、设置机器人回调地址、菜单等
- .env设置机器人信息
- 访问 https://域名/api/setWebHook

## 五、执行脚本(守护进程)
- 先创建队列表
    - php artisan queue:table
    - php artisan migrate
    
    (1) 队列进程：php artisan queue:work --queue   #【此进程启动或重启后，都需手动执行一次命令：php artisan five_task】


## 六、执行脚本(添加计划任务)
    (1) 检测超时未开始的足球赛事【每隔 5 分钟执行一次】：cd /www/wwwroot/bot-28 && php artisan sport 3
    (2) 检测进行中3分钟未变更的足球赛事【每隔 1 分钟执行一次】：cd /www/wwwroot/bot-28 && php artisan sport 2
    (3) 实时更新进行中的足球赛事【每隔 6 秒执行一次】: cd /www/wwwroot/bot-28 && php artisan sport 1
    (4) 实时更新直播的赔率【每隔 6 秒执行一次】: cd /www/wwwroot/bot-28 && php artisan sport:odds 1
    (5) 每三小时更新赔率【每隔 3 小时的第 5 分钟执行一次】: cd /www/wwwroot/bot-28 && php artisan sport:odds 0
    (6) 每三小时拉取近7天的赛事【每隔 3 小时的第 0 分钟执行一次】: cd /www/wwwroot/bot-28 && php artisan sport 0


    crontab 命令：
        # (1) 检测超时未开始的足球赛事【每隔 5 分钟执行一次】
        */5 * * * * cd /www/wwwroot/bot-28 && php artisan sport 3 > /dev/null 2>&1

        # (2) 检测进行中3分钟未变更的足球赛事【每隔 1 分钟执行一次】
        * * * * * cd /www/wwwroot/bot-28 && php artisan sport 2 > /dev/null 2>&1

        # (3) 实时更新进行中的足球赛事【循环模拟每 6 秒执行一次】
        * * * * * cd /www/wwwroot/bot-28 && for i in {0..9}; do php artisan sport 1 > /dev/null 2>&1 & sleep 6; done

        # (4) 实时更新直播的赔率【循环模拟每 6 秒执行一次】
        * * * * * cd /www/wwwroot/bot-28 && for i in {0..9}; do php artisan sport:odds 1 > /dev/null 2>&1 & sleep 6; done

        # (5) 每三小时更新赔率【每隔 3 小时的第 5 分钟执行一次】
        5 */3 * * * cd /www/wwwroot/bot-28 && php artisan sport:odds 0 > /dev/null 2>&1

        # (6) 每三小时拉取近7天的赛事【每隔 3 小时的第 0 分钟执行一次】
        0 */3 * * * cd /www/wwwroot/bot-28 && php artisan sport 0 > /dev/null 2>&1

        # (7) 人工充值/提现超时自动失败【每隔 1 分钟执行一次】
        * * * * * cd /www/wwwroot/bot-28 && php artisan payment:order > /dev/null 2>&1
        
    
## 七、安装wkhtmltopdf网页图片
- apt install wkhtmltopdf
- yum install wkhtmltopdf


## 七、支付配置

## 八、计划任务
- 归集USDT 每30秒归集一次
    域名/admin/sync/collect
- USDT 充值确认 30秒/次
    域名/admin/sync/recharge
- 虚拟投注 9秒/次
    域名/admin/fake
- 同步汇率 1天/次
    域名/admin/sync/exchange
- 清空开奖图片 1天/次
    cd 开奖图片目录 && rm -rf ./*



