手把手教你部署PandoraNext-替代已失效的gpt-API网关

💡 以下网关搭建成功后可以替代Chanzhaoyu/chatgpt-web的反代网关
目前之前公开的网关均已失效,具体表现为:
ChatGPT error 429: {“detail”:”It is recommended to upgrade to the latest PandoraNext: https://github.com/pandora-next/deploy“}

教程1:

PandoraNext

PandoraNext助手GPTs,如你有Plus账号,可向它求助项目问题(不要试图套源码)

简单介绍

  • Pandora Cloud + Pandora Server + Shared Chat + BackendAPI Proxy + Chat2API = PandoraNext演示站
  • 支持GPTs,最新UI。
  • 支持多种登录方式:(相当于Pandora Cloud)
    • 账号/密码
    • Access Token
    • Session Token
    • Refresh Token
    • Share Token
  • 可内置tokens(可使用上述所有Token),支持设置密码。(相当于Pandora Server)
  • 可配置共享的tokens,会有一个功能等同chat-shared3.zhile.io的共享站(目前2622个普号、22个Plus)。
  • 为全代理模式,你的用户只需要跟你的部署网络能通即可。
  • 可启动为BackendAPI Proxy模式,直接使用Access Token调用/backend-api/的接口。
  • 还有疑问,那就进Telegram群让大家围观围观:@ja_netfilter_group

手动部署

  • Releases中下载对应操作系统和架构的包。

  • 解压后修改同目录中的config.json至你需要的参数。

  • 获取license_id填写在config.json中,这是必须的前置步骤!

    这里获取:https://dash.pandoranext.com/

  • 各种Linux/Unix系统使用./PandoraNext启动即可。

  • Windows系统双击PandoraNext.exe即可,当然最好在cmd中启动。

Docker Compose 部署

  • 仓库内已包含相关文件和目录,拉到本地,获取license_id填写在data/config.json中。
  • data目录中包含config.jsontokens.json示例文件可自行修改。
  • docker-compose up -d 原神启动!

Docker 部署

$ docker pull pengzhile/pandora-next
$ docker run -d --restart always --name PandoraNext --net=bridge \\
    -p 8181:8181 \\
    -v ./data:/data \\
    -v ./sessions:/root/.cache/PandoraNext \\
    pengzhile/pandora-next
  • 容器内默认监听8181端口,映射宿主机的8181端口,可自行修改。
  • 你可以映射目录到容器内的/data目录,config.jsontokens.json获取license_id填写在config.json中。
  • 你可以映射目录到容器内的/root/.cache/PandoraNext目录,保留登录的session,避免重启容器登录状态丢失。

Nginx 配置

server {
    listen 443 ssl http2;
    server_name chat.zhile.io;

    charset utf-8;

    ssl_certificate      certs/chat.zhile.io.crt;
    ssl_certificate_key  certs/chat.zhile.io.key;

    ...省略若干其他配置...

    location / {
        proxy_http_version 	1.1;
        proxy_pass 		<http://127.0.0.1:8181/>;
        proxy_set_header	Connection		"";
        proxy_set_header   	Host			$http_host;
        proxy_set_header 	X-Forwarded-Proto 	$scheme;
        proxy_set_header   	X-Real-IP          	$remote_addr;
        proxy_set_header   	X-Forwarded-For    	$proxy_add_x_forwarded_for;

        proxy_buffering off;
        proxy_cache off;

        send_timeout 600;
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
    }

    ...省略若干其他配置...
}
  • Nginx建议开启http2
  • 以上仅为推荐配置,可根据具体情况进行改动。
  • 建议开启ssl也即https,否则浏览器限制将无法复制网页内容。

config 配置

  • 以下是一个示例config.json文件
{
  "bind": "127.0.0.1:8181",
  "tls": {
    "enabled": false,
    "cert_file": "",
    "key_file": ""
  },
  "timeout": 600,
  "proxy_url": "",
  "license_id": "",
  "public_share": false,
  "site_password": "",
  "setup_password": "",
  "server_tokens": true,
  "proxy_api_prefix": "",
  "isolated_conv_title": "*",
  "captcha": {
    "provider": "",
    "site_key": "",
    "site_secret": "",
    "site_login": false,
    "setup_login": false,
    "oai_username": false,
    "oai_password": false
  },
  "whitelist": null
}
  • bind指定绑定IP和端口,在docker内,IP只能用0.0.0.0,否则映射不出来。
  • 如果你不打算套nginx等反代,**bind参数的IP请使用0.0.0.0**!!!
  • tls配置PandoraNext直接以https启动。
    • enabled 是否启用,truefalse。启用时必须配置证书和密钥文件路径。
    • cert_file 证书文件路径。
    • key_file 密钥文件路径。
  • timeout是请求的超时时间,单位为
  • proxy_url指定部署服务流量走代理,如:http://127.0.0.1:8888socks5://127.0.0.1:7980
  • license_id指定你的License Id,可以在这里获取
  • public_share对于GPT中创建的对话分享,是否需要登录才能查看。为true则无需登录即可查看。
  • site_password设置整站密码,需要先输入这个密码,正确才能进行后续步骤。充分保障私密性。不少于8位,且同时包含数字字母
  • setup_password定义一个设置密码,用于调用/setup/开头的设置接口,为空则不可调用。不少于8位,且同时包含数字字母
  • server_tokens设置是否在响应头中显示版本号,true显示,false则不显示。
  • proxy_api_prefix可以给你的proxy模式接口地址添加前缀,让人意想不到。注意设置的字符应该是url中允许的字符。包括:a-z A-Z 0-9 _ . ~
  • proxy_api_prefix 你必须设置一个不少于8位,且同时包含数字字母的前缀才能开启proxy模式!
    • /backend-api/conversation proxy模式比例 1:4
    • /v1/chat/completions 3.5模型比例 1:4
    • /v1/chat/completions 4模型比例 1:10, 无需打码
    • /api/auth/login 登录接口比例 1:100,无需打码
    • /api/arkose/token 获取arkose_token,比例 1:10
  • isolated_conv_title现在隔离会话可以设置标题了,而不再是千篇一律的号。
  • captcha配置一些关键页面的验证码。
    • provider验证码提供商,支持:recaptcha_v2recaptcha_enterprisehcaptchaturnstilefriendly_captcha
    • site_key验证码供应商后台获取的网站参数,是可以公布的信息。
    • site_secret验证码供应商后台获取的秘密参数,不要公布出来。有些供应商也称作API Key
    • site_login是否在全站密码登录界面显示验证码,truefalse
    • setup_login是否在设置入口登录界面显示验证码,truefalse
    • oai_username是否输入用户名界面显示验证码,truefalse
    • oai_password是否在输入登录密码界面显示验证码,truefalse
  • whitelist邮箱数组指定哪些用户可以登录使用,用户名/密码登录受限制,各种Token登录受限。内置tokens不受限。
  • whitelistnull则不限制,为空数组[]则限制所有账号,内置tokens不受限。
  • 一个whitelist的例子:"whitelist": ["[email protected]", "[email protected]"]

tokens 配置

  • 以下是一个示例tokens.json文件
{
  "test-1": {
    "token": "access token / session token / refresh token",
    "shared": true,
    "show_user_info": false
  },
  "test-2": {
    "token": "access token / session token / refresh token",
    "shared": true,
    "show_user_info": true,
    "plus": true
  },
  "test2": {
    "token": "access token / session token / refresh token / share token / username & password",
    "password": "12345"
  }
}
  • token支持示例文件中所写的所有类型。session tokenrefresh token可自动刷新。
  • 每个key被称为token key,可在登录框作用户名输入。如上:test-1test-2等,随意更改。
  • 如果设置了password则输入完token key进入输入密码页面输入匹配。
  • 如果设置sharedtrue,则这个账号会出现在/shared.html中,登录页面会出现它的链接。
  • 如果设置sharedtrue,则这个账号不能再在用户名登录框进行登录。
  • /shared.html中的账号和共享站功能相同,可以自行设置隔离密码进行会话隔离。
  • plus用来标识/shared.html上账号是否有金光,没有其他作用。
  • show_user_info表示/shared.html共享时是否显示账号邮箱信息,GPTs建议开启。
  • 现在可以直接内置用户名密码登录,此种方法必须设置passwordshared不可为true
  • 内置账号密码的格式为:邮箱,密码,此种是0额度消耗的。

proxy模式接口

  • /backend-api/* ChatGPT网页版接口,具体F12去页面上看。
  • /public-api/* ChatGPT网页版接口,具体F12去页面上看。
  • GET /api/token/info/fk-xxx 获取share token信息,使用生成人的access token做为Authorization头,可查看各模型用量。
  • POST /api/auth/session 通过session token获取access token,使用urlencode form传递session_token参数。
  • POST /api/auth/refresh 通过refresh token获取access token,使用urlencode form传递refresh_token参数。
  • POST /api/auth/login 登录获取access token,使用urlencode form传递username 和 password 参数。
  • POST /api/token/register 生成share token
  • POST /api/pool/update 生成更新pool token
  • POST /v1/chat/completions 使用ChatGPT模拟API的请求接口,支持share token和pool token。
  • POST /api/arkose/token 获取arkose_token,目前只支持gpt-4类型。使用urlencode form传递type=gpt-4参数。获取后可API方式调用GPTs
  • 以上地址均需在最前面增加 /<proxy_api_prefix>,也就是你设置的前缀。

设置界面

  • 必须先在config.json中设置setup_password为非空!
  • 浏览器打开:<Base URL>/setup,其中<Base URL>是你部署服务的地址。

关于 license_id

  • 在这里获取:https://dash.pandoranext.com
  • 复制License Id:后的内容,填写在config.jsonlicense_id字段。
  • 注意检查不要复制到多余的空格等不可见字符。
  • 如果config.json中没有填写license_id字段,启动会报错License ID is required
  • 没有固定IP的情况,IP变动后会自动尝试重新拉取。
  • 如果你要同时启动webproxy模式,则必须共同一份license.jwt,此时建议手动拉取!

其他说明

  • 如果你发现网页上不能复制,开启https或者使用127.0.0.1
  • 如果你正在自定义页面元素,请保留:
    • Powered by PandoraNext文字和链接。
    • About PandoraNext文字和链接。
  • 如果要抹,请在一百多个js文件中去除若干dom检测代码。
  • 抹了后果如何我不说。
  • PHP是世界上最好的编程语言。

教程2:准备工作

  • 首先我们需要去买一台服务器,这里我随便找了一家,开了一台机器。
  • 提前下载好 SSH 工具
  • 提前将你的域名解析到你的服务器!!!
  • 连上你的服务器!

安装宝塔面板

宝塔面板是一个服务器管理面板,可以帮助你快速安装各种软件,这里我们就用它来安装 PandoraNext。

安装步骤

  1. 访问宝塔面板官网:https://www.bt.cn/open in new window
  2. 在下面找到对应的系统的安装命令,复制到你的服务器上执行。

sh2.png

  1. 等待安装完成,会给你默认的面板信息。

sh2.png

  1. 根据面板信息,访问你的面板,输入用户名和密码。

sh2.png

  1. 进入面板后,需要你登录你的宝塔账号,如果没有账号,可以去官网注册一个。

sh2.png

  1. 登录成功后,会提示你安装初始环境,这里我们只需要安装 Nginx 即可,并默认选择极速安装,等待安装完成即可(时间较长,请耐心等待)。

sh2.png

部署 PandoraNext

  1. 下载 PandoraNext 文件,这里一般是下载 amd64 的版本,如果你的服务器是 arm 架构的,那么就下载 arm64 的版本。

    相关信息

    这里只讲最简单的下载到本地,然后上传到服务器的方式,另外一种方式可参考手动部署

  2. 打开面板的 “文件” 一栏,将路径切到 home 目录下,然后点击 “上传” 按钮,将你下载好的 PandoraNext 上传到服务器(你也可以直接将文件拖进浏览器进行上传)。

sh2.png

  1. 上传完成后,点击右侧的 “解压” 按钮,解压到当前目录,并点击进入解压后的文件夹。
  2. 打开 License 获取页面 open in new window,登录你的 GitHub 账号,然后会在页面上显示你的 License ID,进行复制

sh2.png

  1. 双击打开 config.json 文件,将 License ID 填入到 License ID 的位置,并将 bind 的 IP 改为 0.0.0.0,后面跟的是端口号,你可以自行修改。修改完成后,点击左上角保存退出(当然,你也可以在 FinalShell 使用 vim 命令进行修改)。

sh2.png

  1. 点击路径栏,复制当前的路径,在 FinalShell 中输入 cd 命令进入到你解压好的文件夹。例如 cd /home/Pandora/

sh2.png

  1. 输入 nohup ./PandoraNext & 命令,启动 PandoraNext。
  2. 回到宝塔面板,进入你解压后的文件夹,右键刷新,会出现 nohup.out 文件,双击查看,如果出现以下内容,则说明启动成功(或者你可以直接用 cat nohup.out 命令查看)。

sh2.png

使用 Nginx 反代

  1. 进入宝塔面板,点击左侧的网站,然后点击添加站点。在这里,填写你的域名,然后点击添加站点。

sh2.png

  1. 点击域名,在设置中点击 SSL,然后点击 Let's Encrypt 申请 SSL 证书,选择你的域名,然后点击申请即可。

sh2.png

  1. 申请好 SSL 证书后,在设置中点击 反向代理,在目标 URL 中填入 http://127.0.0.1:8181,代理名称可以随便填,然后点击提交即可。

sh2.png

  1. 点击配置文件,你需要更换以及添加一些内容:
    • proxy_set_header Host $host; 替换为 proxy_set_header Host $http_host;
    • 添加以下内容:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;             # 关闭缓冲
proxy_cache off;                 # 关闭代理缓存
send_timeout 600;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;

sh2.png

  1. 点击保存,然后你就可以通过你的域名访问 PandoraNext 了!

sh2.png

sh2.png

docker部署

$ docker pull pengzhile/pandora-next
$ docker run -d --restart always --name PandoraNext --net=bridge \\
    -p 8181:8181 \\
    -v ./data:/data \\
    -v ./sessions:/root/.cache/PandoraNext \\
    pengzhile/pandora-next

容器内默认监听8181端口,映射宿主机的8181端口,可自行修改。你可以映射目录到容器内的/data目录,config.jsontokens.json和获取license_id填写在config.json中。你可以映射目录到容器内的/root/.cache/PandoraNext目录,保留登录的session,避免重启容器登录状态丢失。

Docker Compose 模版:

仓库内已包含相关文件和目录,拉到本地,获取license_id填写在data/config.json中。data目录中包含config.jsontokens.json示例文件可自行修改。

docker-compose up -d

原神启动!

启动成功后的代理网关:

[http://ip:8181/](http://ip:8181/)<proxy_api_prefix>/backend-api/conversation

欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。

×

喜欢就点赞,疼爱就打赏

//