记录一次全栈经验,所有遇到的坑。(文中无需梯子,免费使用chatGPT方法喔)

记录,一次,经验,所有,遇到,文中,无需,梯子,免费,使用,chatgpt,方法 · 浏览次数 : 25

小编点评

**1. 网站介绍** * **1.1 网站地址:chatGPT1.2** * **1.3 网站亮点:** * 访问方便,无需注册账号和梯子 * 聊天记录持久化,可分享至多设备 * 账号后台管理,可设置提问次数限制 **2. 技术栈** * **2.1 前端:VUE3+TS后台管理页面:Vue2+JS** * **2.2 后端:MongoDB+nodeJs,使用express轻量级框架** * **2.3运维:Docker + nginx** **3. 遇到的坑** * **3.1 nginx反向代理问题:** * 在线上返回问题答案时,发现在线上前端返回的答案没有打字机效果,而本地确有打字机效果 * 原因是,本地使用vite开了反代理 *解决方案:添加 `proxy_buffering off;` 选项于 `nginx.conf` 中 * **3.2 配置 SSL 证书:** * 腾讯云申请域名且将域名备案 * 腾讯云申请免费的 SSL证书,将证书在前端服务和后端服务分别添加 * 配置 SSL 证书文件路径和证书密码 * **3.3 跨域问题:** * 使用 `proxy_pass` 将请求转发到 `www.hangyejingling.cn:3002` * `app.js` 中修改 `options` 对象的 `cert` 和 `key` 属性 **4. 其他补充** * 代码示例中包含对 SSL 证书部署的详细说明,但由于缺少代码示例,此处不做展开。

正文

1、先推荐一下自己搭的网站

1.1 网站地址:chatGPT

1.2 建站原因

为了方便大家在国内使用chatGPT,所以我调研了一下。在国内用腾讯云使用代理访问,gpt3.5API。最后模仿了openAI的官方网站搭了一个国内可以使用的网站。方便不会注册账号和梯子的人使用。

1.3网站亮点

  • 聊天记录做了持久化,同账号可在多设备共享聊天记录
  • 一人一号,通过短信注册方式,防止一个人无限制注册多个账号。
  • 账号后台管理,有独立的账号后台管理系统。可以精确的从后台给每个用户添加或减少提问次数,对不文明提问的用户直接封禁。自由设置管理员用户与普通用户。

2、技术栈

2.1、前端

主页面:VUE3+TS
后台管理页面:VUE2+JS,基于vue-admin-template二次开发的。

2.2、后端

MongoDB+nodeJs,使用express轻量级框架进行开发。

2.3、运维

Docker + nginx。使用Docker部署自己的项目,简单易懂。且没有各种环境问题。非常好用。

3遇到的坑

3.1 nginx

在设计chatGPT返回问题答案时,发现在线上前端返回的答案没有打字机效果,而本地确有打字机效果。
后来发现原因是,本地使用vite开了反代理。而线上经过 Nginx 反向代理,开启了 buffer,则 Nginx 会尝试从后端缓冲一定大小的数据再发送给浏览器。
解决方案:
1、尝试在反代参数后添加 proxy_buffering off;,然后重载 Nginx。其他 web server 配置同理。
2、服务端直接解决跨域问题。不通过nginx反代理解决跨域(我使用的就是这种办法)

3.2 配置ssl证书

这一步全靠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');
});

3.3 https的利弊

利:现在浏览器默认打开的都是https协议的网站,所以我们如果使用https曝光量会增加很多。
弊:ssl证书部署麻烦。切本地开发用ip请求接口,都会500。必须手动现在浏览器输入一下接口url。

与记录一次全栈经验,所有遇到的坑。(文中无需梯子,免费使用chatGPT方法喔)相似的内容:

记录一次全栈经验,所有遇到的坑。(文中无需梯子,免费使用chatGPT方法喔)

## 1、先推荐一下自己搭的网站 ### 1.1 网站地址:[chatGPT](https://www.hangyejingling.cn/) ### 1.2 建站原因 为了方便大家在国内使用chatGPT,所以我调研了一下。在国内用腾讯云使用代理访问,gpt3.5API。最后模仿了openAI的官

记一次 .NET 某设备监控系统 死锁分析

一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下。 二:WinDbg 分析 1. 程序为什么会卡死 因为是窗体程序,所以看主线程的线程栈就好了,如果卡在

记一次栈溢出异常问题的排查

刚修改的服务,推到开发环境之后,总是时不时的崩溃,但是不知道为什么。尝试找到他的最后一次调用,也没有复现。 没有办法,只能抓dump了。 开启崩溃自动dump,网络上很多,不赘述了。 拿到dump之后,首先看看是什么类型的异常 如图所示,是个栈溢出的异常。 打印一下堆栈,发现密密麻麻的全是这个代码。

记一次 .NET 某工控视觉系统 卡死分析

## 一:背景 ### 1. 讲故事 前段时间有位朋友找到我,说他们的工业视觉软件僵死了,让我帮忙看下到底是什么情况,哈哈,其实卡死的问题相对好定位,无非就是看主线程栈嘛,然后就是具体问题具体分析,当然难度大小就看运气了。 前几天看一篇文章说现在的 .NET程序员 不需要学习**WinDbg** ,

一文全解:LVM(逻辑卷管理器)

一般而言,在生产环境中无法在最初时就精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。硬盘分好区或者部...

面试官:transient关键字修饰的变量当真不可序列化?我:烦请先生教我!

一、写在开头 在这篇文章中记录一下之前自己面试时学到的东西,是关于transient关键字的,当时面试官问我IO的相关问题,基本上全答出来了,关于如何不序列化对象中某个字段时,我果断的选择了static和transient,但面试官紧接着问了我:“transient关键字修饰的变量当真不可序列化吗?

万字长文详述ClickHouse在京喜达实时数据的探索与实践

在引入ClickHouse过程中经历各种困难,耗费大量精力去探索并一一解决,在这里记录一下希望能够给没有接触过ClickHouse的同学提供一些方向上的指引避免多走弯路,如果文中有错误也希望多包含给出指点,欢迎大家一起讨论ClickHouse相关的话题。本文偏长但全是干货,请预留40~60分钟进行阅读。

MySQL读取的记录和我想象的不一致

摘要:并发的事务在运行过程中会出现一些可能引发一致性问题的现象,本篇将详细分析一下。 本文分享自华为云社区《MySQL读取的记录和我想象的不一致——事物隔离级别和MVCC》,作者:砖业洋__。 事务的特性简介 1.1 原子性(Atomicity) 要么全做,要么全不做,一系列操作都是不可分割的,如果

[转帖]性能分析之TCP全连接队列占满问题分析及优化过程(转载)

https://cloud.tencent.com/developer/article/1420726 前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的。 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时

[转帖]性能分析之TCP全连接队列占满问题分析及优化过程

https://www.cnblogs.com/wx170119/p/12068005.html 前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的。 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时候,有