分页: 1 / 1

部署你自己的 ChatGPT 网页服务

发表于 : 2023年 3月 29日 07:50
BobMaster

前言

这是一个由Yidadaa和众多社区志愿者共同维护的一个项目,UI简洁素雅,是一个十分好用的chatgpt网页客户端
项目地址: https://github.com/Yidadaa/ChatGPT-Next-Web
我fork的版本: https://github.com/hibobmaster/ChatGPT-Next-Web
图片

nodejs项目的编译和打包是挺“繁琐”的,这里我们采用docker用容器化的方式实现更优雅的部署方案。

准备

  1. 一台国外的GNU/Linux服务器,chatgpt的官方接口被大陆屏蔽了,因此需要一台国外的服务器以获得稳定的体验
  2. 准备一个域名,用于提供 https 公网服务

正式部署

下面的过程省略了获取openai api key,创建域名DNS记录,使用SSH连接服务器,安装Nginx,Docker,以及获取SSL证书的过程
PS: 都会玩服务器了,所以我假设你会
假设工作目录是: /home/bobmaster/projects/chatgpt-web

进入到工作目录
cd /home/bobmaster/projects/chatgpt-web

创建 compose.yaml

代码: 全选

services:
  app:
    image: hibobmaster/chatgptnextweb:latest
    container_name: chatgptnextweb
    ports:
      - "127.0.0.1:18080:3000"
    env_file:
      - .env
创建 .env

代码: 全选

OPENAI_API_KEY="你的openai api key"
启动容器

代码: 全选

sudo docker compose pull && sudo docker compose up -d
创建Nginx配置文件,使用你的域名提供服务
请将gpt.hibobmaster.com替换为你的域名,SSL证书的公钥和私钥也记得替换

代码: 全选

server {
    listen 80;
    listen [::]:80;
    server_name "gpt.hibobmaster.com";
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;
    server_name "gpt.hibobmaster.com";

    ssl_certificate /etc/nginx/ssl/gpt.hibobmaster.com.cert.pem;
    ssl_certificate_key /etc/nginx/ssl/gpt.hibobmaster.com.key.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam /etc/nginx/dhparam;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /etc/nginx/ssl/gpt.hibobmaster.com.cert.pem;

    # replace with the IP address of your resolver
    resolver 127.0.0.1 1.1.1.1;

    location / {
        proxy_pass http://127.0.0.1:18080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $http_host;
        # basic auth 服务是为了防止未授权的访问,密码可使用下面的指令生成
        # printf "用户名:$(openssl passwd -apr1)" >> /etc/nginx/passwords
        # printf "bobmaster:$(openssl passwd -apr1)" >> /etc/nginx/passwords
        # 生成后请取消下面两行的注释内容
        # auth_basic "Private";
        # auth_basic_user_file /etc/nginx/passwords;
    }
}
测试配置是否正确并启动Nginx http服务

代码: 全选

sudo nginx -t && sudo nginx -s reload
然后打开你的域名,进行测试吧

结语

快去部署一个自己的服务玩玩吧!
我fork的版本相比原版多了一个头像和emoji静态资源反代功能,原版会调用cdn.jsdelivr.net的地址,但是该地址在大陆有时无法正常访问,然后导致头像“开裂”。

Re: 部署你自己的 ChatGPT 网页服务

发表于 : 2023年 3月 29日 11:15
ejsoon
你的fork是否可以提交給原版?

Re: 部署你自己的 ChatGPT 网页服务

发表于 : 2023年 3月 31日 22:22
BobMaster
ejsoon 写了: 2023年 3月 29日 11:15 你的fork是否可以提交給原版?
因为头像地址是编译时的变量,process.env 获取的环境变量在运行时才有效,我没有想到特别优雅的解决方案。
目前使用的是创建一个配置文件,然后进行解析,由于我不会javascript/typescript,代码质量不太好,因此不打算提交。
https://github.com/hibobmaster/ChatGPT- ... 22a2df68d4

不过目前提交了个CI流水线自动化构建脚本
https://github.com/Yidadaa/ChatGPT-Next ... 792a607a45