通过docker在VPS上一键部署自己专属ChatGPT网站


分类:玩转Internet       作者:Caq98i       发布时间:2023-07-07       更新时间:2023-09-02 阅读量:722    


本文将介绍通过docker在VPS上一键部署自己专属ChatGPT,实现无需科学上网就能随时随地访问自己专属的chatGPT网页应用。本文所使用的项目基于openAI的API实现,所以需要API key



准备工作:

vps一台,已安装docker(Linux系统Docker安装教程

racknerd $14一年VPS(4000 GB流量每月,1Gbps) 了解更多

 

简单部署:

ssh登录VPS后,直接执行:

docker run -d --name gpt -p 3000:3000 \
-e OPENAI_API_KEY="" \
-e CODE="" \
yidadaa/chatgpt-next-web

其中,OPENAI_API_KEY填写从OpenAI官网获取的API_KEY:在OpenAI创建API_KEY(需要OpenAI账号,API_KEY的是按使用量付费的,参考:定价 (openai.com),根据统计规律,$5 可以正常使用 GPT3.5 模型一年。注意GPT4的API使用费是GPT3.5的20倍!)

CODE是登录密钥,用于验证你的身份,不然谁都能使用的网站,你的API_KEY很容易被聊完!

然后,在浏览器中使用 ip:3000 进行访问。

注:根据 2023/09/02 在 Yidadaa/ChatGPT-Next-Web 官方项目 处给出的部署文档显示,环境变量的值已经不需要加引号了,笔者尝试使用了加引号部署,无法正常使用(测试的版本为:v2.9.5)。

 

进阶部署:

实现目标:开启https域名访问,通过cloudflare的CDN进行加速。效果演示网站:ChatGPT Web

准备工作:已做好域名解析(本教程是假设你已经通过cloudflare进行了DNS解析并开启的CDN),已创建了一个docker网络(在本教程中,所有的容器都将放置在这个网络中并都有一个固定的ip方便nginx的访问):

docker network create --subnet 192.168.18.0/24 --gateway 192.168.18.1 anqiqii

在本教程中创建了一个名为anqiqii的网络,并确定网关为192.168.18.1(宿主机的内网IP)

添加的域名解析与docker网络的IP分配如下:

sea.anqi.ml   --> 服务器公网IP

192.168.18.5         nginx

192.168.18.55     chatGPT

 

① 安装nginx

创建一个nginx容器:

docker run -d \
--name nginx --network=anqiqii --ip 192.168.18.5 \
-p 80:80 \
-p 443:443 \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/cert:/home/cert

根据这个部署nginx的挂载命令,容器中的路径 /usr/share/nginx/html/ 其实对应了宿主机的 /home/nginx/html/ 路径,这个路径一般放置网站的根目录文件夹。在宿主机的 /home/nginx/html/ 目录下创建一个文件夹,以你的域名进行命名,在本例中,文件夹命名为:sea.anqi.ml

 

② 在宿主机的 /home/cert/ 目录下放置证书与私钥,可以使用cloudflare提供的证书(cf的控制面板 → SSL/TLS → 源服务器),把证书和私钥的文本保存为两个文件。

 

③ 部署chatGPT容器:

docker run -d --name gpt -p 3000:3000 --net anqiqii --ip 192.168.18.55 \
-e OPENAI_API_KEY="" \
-e CODE="" \
yidadaa/chatgpt-next-web

这里保留了3000的端口映射,你同样可以使用ip和端口的方式访问到你的chatGPT应用(只想域名访问可以去掉端口映射)

 

⑤ 在 /home/nginx/conf.d/ 目录下创建一个文件,以 .conf 结尾,在本例中,文件命名为:sea.anqi.ml.conf;打开此文件,编辑内容为:

server
{
listen 80;
listen 443 ssl http2;

server_name sea.anqi.ml;       # 修改为你自己为chatGPT准备的域名
index index.php index.html index.htm default.php default.htm default.html;
root /usr/share/nginx/html/sea.anqi.ml;      # 设置网站的根目录地址,将sea.anqi.ml替换为你自己的域名

ssl_certificate /home/cert/path/fullchain.pem;     # 更改为证书所在路径,一般是fullchain.pem文件
ssl_certificate_key /home/cert/path/privkey.pem;       # 更改为私钥所在路径,一般是privkey.pem文件
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
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";

#auth_basic "Authorization";
#auth_basic_user_file /home/cert/yanzen.pass;    #指定密码文件的路径


#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
{
return 404;
}

location ~* \.log$ {
deny all;
}

#禁止在证书验证目录放入敏感文件
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}

location / {     #反代chatGPT容器
proxy_pass http://192.168.18.55:3000;        # 修改为插头GPT容器实际的ip与端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /usr/share/nginx/html/sea.anqi.ml/sssvip.log;
# 设置日志存放路径,将sea.anqi.ml替换为你自己的域名,可以注释掉,不记录访问正常的日志
error_log /usr/share/nginx/html/sea.anqi.ml/sssvip.error.log;     # 设置错误日志存放路径,将sea.anqi.ml替换为你自己的域名
}

本配置文件中注释掉了简单用户验证的部分,因为chatGPT容器已经实现了认证。创建用于简单认证的用户名与密码可以参考:配置nginx下载服务器并要求输入用户名密码进行身份验证

 

⑥ 检查并重启nginx服务:

docker exec nginx nginx -t
docker exec nginx nginx -s reload

 

⑦ 打开浏览器通过域名访问。


捐赠通道,感谢!🦀🦀


          support a 🍕


留言与评论







限时特惠促销