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以上
  • 确保以下函数解除禁用
bash
复制代码
shell_exec

pcntl_signal
pcntl_fork
pcntl_wait
pcntl_signal_dispatch
pcntl_alarm
exec

  • 确保php-cli开启了redis扩展,使用以下命令检查:
perl
复制代码
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配置文件

ruby
复制代码
# 开始

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端口无占用)。
    微信图片_20230522230200.jpg
  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 walkormailto:walkor@workerman.net
* @copyright walkormailto: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.phplisten的端口,官方主分支默认端口为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.phpgateway.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.phpregister.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.phpregister.listen配置项端口,官方主分支默认端口为1236,多个服务端不可冲突,此处须修改为其他端口,如1237
]]
],
'register' => [
'handler' => Register::class,
'listen' => 'text://0.0.0.0:1237', // 2. 修改配置文件config\plugin\webman\gateway-worker\process.phpregister.listen配置项端口,官方主分支默认端口为1236,多个服务端不可冲突,此处须修改为其他端口,如1237
'count' => 1, // Must be 1
'constructor' => []
],
];

nginx配置:

ini
复制代码
# 修改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配置错误

作者:冲浪网友
链接:https://juejin.cn/post/7226689042406391864
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后修改:2023 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏