Skip to content
This repository has been archived by the owner on May 23, 2024. It is now read-only.

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
testinguser committed Jan 21, 2024
1 parent a48bdf5 commit 7ee1de1
Show file tree
Hide file tree
Showing 4 changed files with 272 additions and 0 deletions.
272 changes: 272 additions & 0 deletions deploy.README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,272 @@
# PandoraNext

> [!IMPORTANT]
> ✨ 一个新的 [文档站](https://docs.pandoranext.com),从部署到常见问题,甚至接口调用都有详细说明。
>
> ✨ 现在我们可以使用PandoraNext [注册ChatGPT账号](https://zhile.io/2023/12/09/pandoranext-introduction.html)了,无墙,全代理!
>
> [PandoraNext助手GPTs](https://chat.oaifree.com/g/g-CFsXuTRfy-pandoranextzhu-shou),如你有Plus账号,可向它求助项目问题(不要试图套源码)
## 简单介绍

* Pandora Cloud + Pandora Server + Shared Chat + BackendAPI Proxy + Chat2API = `PandoraNext`[演示站](https://chat.oaifree.com)
* 更强大,但还是那个让你呼吸顺畅的ChatGPT。支持GPTs,最新UI。
* 支持多种登录方式:(相当于Pandora Cloud)
* 账号/密码
* Access Token
* Session Token
* Refresh Token
* Share Token
* 可内置tokens(可使用上述所有Token),支持设置密码。(相当于Pandora Server)
* 可配置共享的tokens,会有一个功能等同[chat-shared3.zhile.io](https://chat-shared3.zhile.io)的共享站(目前1841个普号、6个Plus)。
* 为全代理模式(能想象到的都代理了),你的用户只需要跟你的部署网络能通即可。
* 可启动为BackendAPI Proxy模式,直接使用`Access Token`调用`/backend-api/`和chat2api的接口。
* 还有疑问,那就进Telegram群让大家围观围观:[@ja_netfilter_group](https://t.me/ja_netfilter_group)

<details>
<summary>

旧的、简易的文档。更新、更详细的访问文档站。
</summary>

## 手动部署

*[Releases](https://github.com/pandora-next/deploy/releases)中下载对应操作系统和架构的包。
* 解压后修改同目录中的`config.json`至你需要的参数。
* [获取license_id](#%E5%85%B3%E4%BA%8E-license_id)填写在`config.json`中,这是必须的前置步骤!
* 各种Linux/Unix系统使用`./PandoraNext`启动即可。
* Windows系统双击`PandoraNext.exe`即可,当然最好在cmd中启动。

## Docker Compose 部署

* 仓库内已包含相关文件和目录,拉到本地,[获取license_id](#%E5%85%B3%E4%BA%8E-license_id)填写在`data/config.json`中。
* `data`目录中包含`config.json``tokens.json`示例文件可自行修改。
* `docker compose up -d` **原神启动!**

## Docker 部署

```bash
$ 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.json``tokens.json`[获取license_id](#%E5%85%B3%E4%BA%8E-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`文件

```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": "*",
"disable_#": false,
"auto_conv_arkose": false,
"proxy_file_service": false,
"custom_doh_host": "",
"captcha": {
"provider": "",
"site_key": "",
"site_secret": "",
"site_login": false,
"setup_login": false,
"oai_username": false,
"oai_password": false,
"oai_#": false
},
"whitelist": null
}
```

* `bind`指定绑定IP和端口,在docker内,IP只能用`0.0.0.0`,否则映射不出来。
* **如果你不打算套nginx等反代,`bind`参数的IP请使用`0.0.0.0`!!!**
* `tls`配置PandoraNext直接以`https`启动。
* `enabled` 是否启用,`true``false`。启用时必须配置证书和密钥文件路径。
* `cert_file` 证书文件路径。
* `key_file` 密钥文件路径。
* `timeout`是请求的超时时间,单位为``
* `proxy_url`指定部署服务流量走代理,如:`http://127.0.0.1:8888``socks5://127.0.0.1:7980`
* `license_id`指定你的License Id,可以在[这里获取](#%E5%85%B3%E4%BA%8E-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/#` 登录接口比例 `1:100`,无需打码
* `/api/auth/#2` 获取`refresh_token`接口比例 `1:1000`,无需打码
* `/api/arkose/token` 获取`arkose_token`,比例 `1:10`
* `/api/auth/platform/#` 登录platform接口比例 `1:100`,无需打码
* `isolated_conv_title`现在隔离会话可以设置标题了,而不再是千篇一律的`*`号。
* `disable_#` 禁用注册账号功能,`true``false`
* `auto_conv_arkose``proxy`模式使用`gpt-4`模型调用`/backend-api/conversation`接口是否自动打码,使用消耗为`4+10`
* `proxy_file_service``proxy`模式是否使用PandoraNext的文件代理服务,避免官方文件服务的墙。
* `custom_doh_host` 配置自定义的`DoH`主机名,建议使用IP形式。默认启动时在公共`DoH`中挑选你所在地区最快的那个。
* `captcha`配置一些关键页面的验证码。
* `provider`验证码提供商,支持:`recaptcha_v2``recaptcha_enterprise``hcaptcha``turnstile``friendly_captcha`
* `site_key`验证码供应商后台获取的网站参数,是可以公布的信息。
* `site_secret`验证码供应商后台获取的秘密参数,不要公布出来。有些供应商也称作`API Key`
* `site_login`是否在全站密码登录界面显示验证码,`true``false`
* `setup_login`是否在设置入口登录界面显示验证码,`true``false`
* `oai_username`是否输入用户名界面显示验证码,`true``false`
* `oai_password`是否在输入登录密码界面显示验证码,`true``false`
* `whitelist`邮箱数组指定哪些用户可以登录使用,用户名/密码登录受限制,各种Token登录受限。内置tokens不受限。
* `whitelist``null`则不限制,为空数组`[]`则限制所有账号,内置tokens不受限。
* 一个`whitelist`的例子:```"whitelist": ["mail2@test.com", "mail2@test.com"]```

## tokens 配置

* 以下是一个示例`tokens.json`文件

```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 token``refresh token`可自动刷新。
* 每个key被称为`token key`,可在登录框作用户名输入。如上:`test-1``test-2`等,随意更改。
* 如果设置了`password`则输入完`token key`进入输入密码页面输入匹配。
* 如果设置`shared``true`,则这个账号会出现在`/shared.html`中,登录页面会出现它的链接。
* 如果设置`shared``true`,则这个账号不能再在用户名登录框进行登录。
* `/shared.html`中的账号和共享站功能相同,可以自行设置隔离密码进行会话隔离。
* `plus`用来标识`/shared.html`上账号是否有金光,没有其他作用。
* `show_user_info`表示`/shared.html`共享时是否显示账号邮箱信息,GPTs建议开启。
* 现在可以直接内置用户名密码登录,此种方法必须设置`password``shared`不可为`true`
* 内置账号密码的格式为:`邮箱,密码`,此种是`0`额度消耗的。

## proxy模式接口
* 页面 /auth 使用账号密码,手动获取`access token``session token`。只是给UI方便获取,`1:100`的消耗依然存在。
* 页面 /fk 使用`access token``session token`,手动获取`share token`
* 页面 /pk 使用`share token`,手动组`pool token`
* /backend-api/* `ChatGPT`网页版接口,具体F12去页面上看。
* /public-api/* `ChatGPT`网页版接口,具体F12去页面上看。
* /v1/* 所有`https://api.openai.com/v1/*`开头的接口,每次调用`1:1`
* /dashboard/* 所有`https://api.openai.com/dashboard/*`开头的接口,每次调用`1:1`
* **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/# 登录获取access token,使用urlencode form传递username 和 password 参数。
* **POST** /api/auth/#2 登录获取refresh token,使用urlencode form传递username、password 和 mfa_code 参数。
* **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`
* **POST** /api/setup/reload 重载当前服务的`config.json``tokens.json`等配置。
* **POST** /api/auth/platform/refresh 通过`platform`的refresh token获取access token,使用urlencode form传递refresh_token参数。
* **POST** /api/auth/platform/# 登录`platform`获取access token,使用urlencode form传递username 和 password 参数。如果要获取`sess key`,增加参数`prompt=login`
* 以上地址均需在最前面增加 `/<proxy_api_prefix>`,也就是你设置的前缀。


## 设置界面

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

## 关于 license_id

* 在这里获取:[https://dash.pandoranext.com](https://dash.pandoranext.com)
* 复制`License Id:`后的内容,填写在`config.json``license_id`字段。
* 注意检查不要复制到多余的空格等不可见字符。
* 如果`config.json`中没有填写`license_id`字段,启动会报错`License ID is required`
* **没有固定IP的情况**,IP变动后会自动尝试重新拉取。
* 更换`License Id`之后,通常需要手动删除`license.jwt`再启动。

</details>

## 其他说明

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

> 感谢所有让这个项目变得更好的贡献者们!
[![Contributors](https://contrib.rocks/image?repo=pandora-next/deploy)](https://github.com/pandora-next/deploy/graphs/contributors)

## Star历史

![Star History Chart](https://api.star-history.com/svg?repos=pandora-next/deploy&type=Date)

0 comments on commit 7ee1de1

Please # to comment.