为了方便大家在国内使用chatGPT,所以我调研了一下。在国内用腾讯云使用代理访问,gpt3.5API。最后模仿了openAI的官方网站搭了一个国内可以使用的网站。方便不会注册账号和梯子的人使用。
主页面:VUE3+TS
后台管理页面:VUE2+JS,基于vue-admin-template二次开发的。
MongoDB+nodeJs,使用express轻量级框架进行开发。
Docker + nginx。使用Docker部署自己的项目,简单易懂。且没有各种环境问题。非常好用。
在设计chatGPT返回问题答案时,发现在线上前端返回的答案没有打字机效果,而本地确有打字机效果。
后来发现原因是,本地使用vite开了反代理。而线上经过 Nginx 反向代理,开启了 buffer,则 Nginx 会尝试从后端缓冲一定大小的数据再发送给浏览器。
解决方案:
1、尝试在反代参数后添加 proxy_buffering off;,然后重载 Nginx。其他 web server 配置同理。
2、服务端直接解决跨域问题。不通过nginx反代理解决跨域(我使用的就是这种办法)
这一步全靠chatGpt一步一步的帮我实现。我的流程如下:
1、腾讯云申请域名且将域名备案
2、腾讯云申请免费的ssl证书,将ssl证书在前端服务和后端服务分别添加。
前端nginx中配置文件如下修改,ssl证书文件夹在同级目录:
gzip_static on; #静态压缩
server {
listen 443 ssl;
#请填写绑定证书的域名
server_name hangyejingling.cn; #项目域名;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/ssl/hangyejingling.cn_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/ssl/hangyejingling.cn.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
root /data/nginx/html;
#access_log logs/host.access.log main;
location / {
root /data/nginx/html/dist; #vue项目打包后的dist
try_files $uri $uri/ /index.html; # 配置使用路由
index index.html index.htm;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico|css|eot|svg|ttf|woff|mov)$ {
root /data/nginx/html/dist;
expires 48h;
access_log on;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /data/nginx/html;
}
# location /api { # 要配置的反向代理
# include uwsgi_params;
# proxy_set_header Host $host;
# proxy_set_header x-forwarded-for $remote_addr;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_pass http://www.hangyejingling.cn:3002;
# }
}
server {
listen 80;
#请填写绑定证书的域名
server_name hangyejingling.cn;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
后端app.js如下修改
const options = {
key: fs.readFileSync(path.join(__dirname, './../ssl/hangyejingling.cn.key')),
cert: fs.readFileSync(path.join(__dirname,'./../ssl/hangyejingling.cn_bundle.crt'))
};
const server = https.createServer(options, app);
server.listen(3002, () => {
console.log('Server listening on port 3002');
});
利:现在浏览器默认打开的都是https协议的网站,所以我们如果使用https曝光量会增加很多。
弊:ssl证书部署麻烦。切本地开发用ip请求接口,都会500。必须手动现在浏览器输入一下接口url。