ChatGPT-Pro布置文档

适用版别:v1.3.0以上

前端开源地址:gitee.com/shoujing100…

办理端开源地址:gitee.com/shoujing100…

uni-app插件商场:ext.dcloud.net.cn/plugin?id=1…

系统架构介绍

服务端

  • PHP >=7.4 <8
  • webman 1.4
  • Redis 7.0

后台办理端

  • vue-cli2
  • element-ui2

客户端

  • uni-app

适用小程序、公众号、普通H5、APP、PC

布置服务端及办理后台

环境查看

  • php -v查看php版别需为7.4以上
  • 保证以下函数免除禁用
shell_exec
pcntl_signal
pcntl_fork
pcntl_wait
pcntl_signal_dispatch
pcntl_alarm
exec
  • 保证php-cli敞开了redis扩展,运用以下指令查看:
php -m | grep redis

有多个php版别的,留意只能一个php版别的redis扩展。

如之前装置有其他redis版别,请卸载其他redis版别,将php7.4的redis版别装置后,切换指令行php版别一次或重启服务器,需求保证 php -m | grep redis有结果。

如果没有,运用php --ini查看装备文件途径是否正确。

浮屠面板新建网站

将代码上传到网站根目录

选定网站目录为/public

为网站装备ssl证书

留意:服务器IP在海外且未装备ssl证书或者国内未敞开强制https可能导致微信jsapi支付回调不能正常告诉。

导入数据库

修正数据库装备文件

修正config\database.php文件,改为你自己的数据库及密码

写入授权码文件

修正resource\secauth文件内容为获取的授权码。

设置nginx装备文件

# 开端
upstream chat_ai {
    server 127.0.0.1:8998;
    keepalive 10240;
}
# 完毕
server
{
    listen 80;
	listen 443 ssl http2;
    server_name domain.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/chat-ai-server/public;
    #SSL-START SSL相关装备,请勿删去或修正下一行带注释的404规矩
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/domain.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/domain.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;
    #SSL-END
    #ERROR-PAGE-START  过错页装备,能够注释、删去或修正
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    #PHP-INFO-START  PHP引证装备,能够注释或修正
    include enable-php-74.conf;
    #PHP-INFO-END
    #REWRITE-START URL重写规矩引证,修正后将导致面板设置的伪静态规矩失效
    include /www/server/panel/vhost/rewrite/domain.com.conf;
    #REWRITE-END
    # 此处开端
    location ^~ / {
      error_page 405 = @webman;
      try_files /${uri}/index.html /${uri} /${uri}/index.html @webman;
    }
    ## WEBMAN LOCATION
    location @webman {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      if (!-f $request_filename){
          proxy_pass http://chat_ai;
      }
    }
    # 此处监听wss,则wss衔接地址为 wss://yourdomin.com/wss 可自行界说
    location /wss {
      proxy_pass http://127.0.0.1:7272;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_set_header X-Real-IP $remote_addr;
    }
    # 此处完毕
    #制止拜访的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    #一键请求SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/domain.com.log;
    error_log  /www/wwwlogs/domain.com.error.log;
}

启动服务端

启动前需求留意查看服务器内存巨细,memory.php中设置的内存巨细尽量不大于1/2总内存,但不应小于256M。

运用指令php start.php start开端运转,如需后台运转,运用php start.php start -d。如需停止进程,运用php start.php stop即可。

拜访办理后台进行初始化装备

服务端布置后,即可经过域名/manage/拜访办理后台。

后台装备

服务端启动完成后,拜访办理后台进行初始化装备。

必填设置

  1. 设置署理计划
  2. Key办理

布置uni-app客户端

拜访H5端

拜访服务端域名即可。

留意:后台装备项中h5地址需求设置为:服务端域名/

拜访PC端

拜访服务端域名/web/即可。

后台装备项阐明

在办理后台装备办理-根本装备中有一些系统常用的装备。

留意:装备项修正后,需求先点击后台右上角清理缓存后退出登录重新登录。

上传途径装备:在拓宽信息中,修正绑定域名装备项,本地测验默许为http://127.0.0.1:8998,如布置到服务端后,此处修正为服务端域名。

在根本信息中:

  • 内容安全检查接口开关如敞开,该功能调用的是微信内容检查接口,因而需求首要保证系统中的小程序装备正确。
  • 署理计划 可选反向署理环境署理直接拜访。如挑选反向署理,则需求装备你的反代服务器域名。如挑选环境署理,则需保证服务端地点环境的署理可用。如挑选直接拜访,需服务端地点环境可直接拜访openai的接口。

在运用信息中:可修正免费体会次数、是否共享获取次数(暂时仅针对小程序)、共享获取次数。

在敞开信息中:可设置微信公众号登录、支付以及小程序支付功能是否敞开。

同一服务器布置多个服务端

  1. 修正装备文件config\server.phplisten的端口,官方主分支默许端口为8998,多个服务端不行抵触,此处须修正为其他端口,如8999
  2. 修正装备文件config\plugin\webman\gateway-worker\process.phpgateway.listen装备项端口,官方主分支默许端口为7272,多个服务端不行抵触,此处须修正为其他端口,如7282。修正该文件中register.listen装备项端口,官方主分支默许端口为1236,多个服务端不行抵触,此处须修正为其他端口,如1237,并同步修正gateway.constructor.registerAddressworker.constructor.registerAddress中的端口为1237(与上一步修正保持一致的端口)。修正startPort为2400(每添加一个服务端,则添加100,需保证2400-2500端口无占用)。
    ChatGPT-Pro部署文档
  3. 修正config\my.php中的redis_queue_name值,默许为send-chat,为防止不同站点消费进程抵触,此处需重命名,如send-chat-re
  4. nginx的转发装备中端口需同步修正,一起upstream的称号也不行重名。

举例:服务器上已运转一个服务端运用,那么须做如下装备修正: config\server.php:

<?php
/**
 * This file is part of webman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author    walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link      http://www.workerman.net/
 * @license   http://www.opensource.org/licenses/mit-license.php MIT License
 */
return [
    'listen' => 'http://0.0.0.0:8999', // 修正装备文件`config\server.php`中`listen`的端口,官方主分支默许端口为`8998`,多个服务端不行抵触,此处须修正为其他端口,如`8999`
    'transport' => 'tcp',
    'context' => [],
    'name' => 'webman',
    'count' => cpu_count() * 2,
    'user' => '',
    'group' => '',
    'reusePort' => false,
    'event_loop' => '',
    'stop_timeout' => 2,
    'pid_file' => runtime_path() . '/webman.pid',
    'status_file' => runtime_path() . '/webman.status',
    'stdout_file' => runtime_path() . '/logs/stdout.log',
    'log_file' => runtime_path() . '/logs/workerman.log',
    'max_package_size' => 100 * 1024 * 1024
];

config\plugin\webman\gateway-worker\process.php

<?php
use Webman\GatewayWorker\Gateway;
use Webman\GatewayWorker\BusinessWorker;
use Webman\GatewayWorker\Register;
return [
  'gateway' => [
    'handler'     => Gateway::class,
    'listen'      => 'websocket://0.0.0.0:7282', // 2. 修正装备文件`config\plugin\webman\gateway-worker\process.php`中`gateway.listen`装备项端口,官方主分支默许端口为`7272`,多个服务端不行抵触,此处须修正为其他端口,如`7282`。
    'count'       => cpu_count(),
    'reloadable'  => false,
    'constructor' => ['config' => [
      'lanIp'           => '127.0.0.1',
      'startPort'       => 2400,
      'pingInterval'    => 25,
      'pingData'        => '{"type":"ping"}',
      'registerAddress' => '127.0.0.1:1237', // 同步修正端口:2. 修正装备文件`config\plugin\webman\gateway-worker\process.php`中`register.listen`装备项端口,官方主分支默许端口为`1236`,多个服务端不行抵触,此处须修正为其他端口,如`1237`
      'onConnect'       => function () {
      },
    ]]
  ],
  'worker' => [
    'handler'     => BusinessWorker::class,
    'count'       => cpu_count() * 2,
    'constructor' => ['config' => [
      'eventHandler'    => plugin\webman\gateway\Events::class,
      'name'            => 'ChatBusinessWorker',
      'registerAddress' => '127.0.0.1:1237', // 同步修正端口:2. 修正装备文件`config\plugin\webman\gateway-worker\process.php`中`register.listen`装备项端口,官方主分支默许端口为`1236`,多个服务端不行抵触,此处须修正为其他端口,如`1237`
    ]]
  ],
  'register' => [
    'handler'     => Register::class,
    'listen'      => 'text://0.0.0.0:1237', // 2. 修正装备文件`config\plugin\webman\gateway-worker\process.php`中`register.listen`装备项端口,官方主分支默许端口为`1236`,多个服务端不行抵触,此处须修正为其他端口,如`1237`
    'count'       => 1, // Must be 1
    'constructor' => []
  ],
];

nginx装备:

# 修正upstream称号,需求保证服务器上大局仅有
upstream bkchat {
    server 127.0.0.1:8999; # 修正server端口
    keepalive 10240;
}
...
# 此处开端
    location ^~ / {
      error_page 405 = @webman;
      try_files /${uri}/index.html /${uri} /${uri}/index.html @webman;
    }
    ## WEBMAN LOCATION
    location @webman {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      if (!-f $request_filename){
          proxy_pass http://bkchat;
      }
    }
    # 此处监听wss,则wss衔接地址为 wss://yourdomin.com/wss 可自行界说
    location /wss {
      proxy_pass http://127.0.0.1:7272;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_set_header X-Real-IP $remote_addr;
    }
    # 此处完毕

留意:多个服务端运转在同一服务器,不行运用开发模式,有必要以-d模型运转,否则monitor进程端口会抵触报错。

留意:多服务端运转,gateway进程可能会报过错SQLSTATE\[HY000] \[1040] Too many connections in,这是由于每个进程运转时都独立拜访了数据库,导致mysql服务器报错,但不影响运转,具体衔接数量上限待测验。

留意:多服务端需求关注\memory.php为每个服务端分配的内存约束巨细,超越总内存可能导致服务器宕机。一起需求留意gateway进程与redis进程数量,多服务端需调试到最合适的数量。

内容安全

自界说灵敏词检测

自界说灵敏词在百度内容审阅平台文本审阅接口调用前进行,当射中违禁词库时会自动取消本次对话,并将射中词汇以*替代后回来前端提示用户修正。

自界说灵敏词文件存放在服务端/resource/sensitive_words.txt文件中,如需增改请打开该文件后弥补,灵敏词之间以分割。

为什么以文件方式实现?

进步功率,灵敏词库数据量很大,从数据库中读取影响功率。

其他Debug

Nginx装备过错