概要
使用ChatGPT Web Share开源项目,实现一个ChatGPT账号多人共享使用且聊天会话内容隔离,完善的管理和限制功能。适用于个人、组织或团队的 ChatGPT 共享方案。
ChatGPT Web Share优势
1.网络环境稳定
服务器使用专有网络,不依赖客户端网络。客户端无需使用代理网络,使用自己的域名直接访问。
2.用户隔离
共享用户之间内容完全隔离,使用不同密码访问,无感知共享同一个账号。
3.正版ChatGPT体验
解锁ChatGPT全部功能,高级功能均可正常使用,例如:插件、GPTs、联网、绘画功能。
4.后台管理功能丰富
自带后台实现用户管理、会话管理、系统配置等功能模块。
部署准备
- 海外服务器:推荐配置2核2G以上配置,最低配置1G,Linux系统,安装docker环境。推荐美国服务器,请使用能够解锁 ChatGPT 的 IP 质量较好的服务器。
- ChatGPT账号:使用ChatGPT4必须订阅ChatGPT Plus。在设置中启用所有 beta features。
- 域名:注册最便宜域名即可,能够正常解析就满足条件。
部署步骤
1.服务器安装docker和nginx
2.创建应用目录并创建配置文件
为方便管理,数据和 docker compose 配置应该放在一个单独的文件夹(cws
)中。我们在 home 目录 ~
下创建 cws
文件夹(如果你不在 home 目录中执行下面的命令,以后的操作需要相应修改路径):
cd ~
mkdir cws && cd cws
mkdir -p data/config
我们先将密码写入环境变量,以便后续使用。这里你需要自行修改:
export MONGODB_PASSWORD=password # MongoDB 密码
export INITIAL_ADMIN_PASSWORD=password # 初始管理员密码
接下来,运行一次 Docker 容器,创建配置文件:
docker run -it --rm
-v $PWD/data/config:/tmp/config
moeakwak/chatgpt-web-share:latest
python /app/backend/manage.py create_config -O /tmp/config --generate-secrets --mongodb-url "mongodb://cws:${MONGODB_PASSWORD}@mongo:27017" --initial-admin-password "${INITIAL_ADMIN_PASSWORD}" --chatgpt-base-url http://ninja:7999/backend-api/
配置文件创建成功后,你可以看到 ~/cws/data/config
下出现了两个文件:config.yaml
和 credentials.yaml
。
上述命令会修改配置文件,自动生成 secret (-G
)、配置 MongoDB (--mongodb-url
)、创建初始管理员账户 (--initial-admin-password
)、设置 ChatGPT 代理地址 (--chatgpt-base-url
)。你无需再手动编辑配置文件,就可以正常地启动 CWS。
手动编辑配置文件
你也可以运行如下命令创建一个简单的配置文件,然后手动编辑 data/config
下的配置文件:
docker run -it --rm
-v $PWD/data/config:/tmp/config
moeakwak/chatgpt-web-share:latest
python /app/backend/manage.py create_config -O /tmp/config
3. 编辑 Docker compose 配置文件
运行如下命令,创建 .env
文件:
echo "TZ=Asia/Shanghai" > .env
echo "MONGO_INITDB_DATABASE=cws" >> .env
echo "MONGO_INITDB_ROOT_USERNAME=cws" >> .env
echo "MONGO_INITDB_ROOT_PASSWORD=$MONGODB_PASSWORD" >> .env
接下来,在 cws
目录下创建如下的 Docker compose 配置文件 docker-compose.yml
,它包括了 CWS 本身、Mongo DB、Ninja。其中,Ninja 是 ChatGPT 代理,用于跨过 Cloudflare 验证以及对话时的 Arkose 验证码。
version: "3"
services:
chatgpt-web-share:
image: ghcr.io/chatpire/chatgpt-web-share:latest
container_name: cws
restart: unless-stopped
ports:
- 5000:80
volumes:
- ./data:/app/backend/data
environment:
- TZ=${TZ}
- CWS_CONFIG_DIR=/app/backend/data/config
depends_on:
- mongo
mongo:
container_name: mongo
image: mongo:6.0
restart: always
# ports:
# - 27017:27017
volumes:
- ./mongo_data:/data/db
environment:
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
ninja:
image: ghcr.io/gngpp/ninja:latest
container_name: ninja
restart: unless-stopped
command: run --disable-webui
ports:
- "7999:7999"
environment:
- TZ=Asia/Shanghai
volumes:
- "./har/gpt3:/root/.gpt3"
- "./har/gpt4:/root/.gpt4"
关于 Docker 源
当前项目已经迁移至 chatpire 下,由于 Dockerhub 的 organization 收费,因此不再发布镜像到 Dockerhub。请更改镜像源为 ghcr.io/chatpire/chatgpt-web-share:latest
。
一切就绪,运行 docker-compose up -d
启动 CWS。你可以使用 docker logs cws -f
查看日志。
如果你是在 NAS 上使用 mongodb,CPU 不支持 AVX 指令集,可以使用 groundhog2k/mongo:6.0.9
镜像代替 mongo:6.0
。
若一切正常,你可以打开 http://<你的服务器 IP>:5000
访问 CWS,用 admin
以及刚刚设定的密码登录。登录后,你可以进一步在设置页面修改配置。
4.配置 ChatGPT 代理
现在,你需要参考 Ninja 文档 的说明来配置 Ninja。
配置 Ninja
简单来说,你需要:
- 在 CWS 的配置中将 ChatGPT 代理地址设置为
http://ninja:7999/backend-api/
。(这应当在上一步已经完成了)- 参考 ninja 的文档获取 HAR 文件,将 HAR 文件放在
cws/har/gpt3
(假如 GPT 3.5 模型出现验证码) 和cws/har/gpt4
下。你可以直接上传文件到相应目录,也可以使用 Ninja 提供的网页上传(访问http://<你的服务器 IP>:7999/har/upload
)。- 访问
https://chat.openai.com/api/auth/session
并复制其中的 access token 项内容,在 CWS 的后台设置中的 credentials 中填入。
完成配置后,你可以进入 CWS 的对话管理页,点击上方的同步对话按钮。如果一切正常,你应该可以看到对话列表中出现了你的 ChatGPT Plus 账号中的旧对话。
接下来,进入对话页,尝试新建一个 GPT-4 对话并发送消息。如果一切正常,你可以收到 ChatGPT 的回复;否则,你可能需要检查配置。
5.配置反向代理
方法一、在服务器上配置Nginx反向代理,配置域名和 https 加密
反向代理配置示例:
location / {
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:5000/;
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;
}
方法二、使用Cloudflare Caddy
示例代码:
{
email <YOUR_EMAIL>
storage file_system {
root /root/caddy/certs/
}
log error {
output file /root/caddy/logs/error.log {
roll_size 20MB
roll_keep 5
roll_keep_for 240h
}
level ERROR
}
acme_dns cloudflare API_TOKEN
}
your-cws-site.com {
reverse_proxy :5000
}
Cloudflare 加速配置
- 在 Cloudflare 中设置站点 https 跳转,并在 SSL/TLS 选项中设置加密类型为 flexible;服务器中反向代理对外使用 http 协议。如果你想更安全,可以将其配置为只允许 Cloudflare 服务器访问。这样的好处是开启 https 较为简单,不用续证书。
- 在 SSL/TLS 选项中设置加密类型为 Full,服务器反向代理配置有效的 SSL 证书,对外使用 https。
常见错误Q&A
Name not resolved 相关错误
如果你使用 Docker compose 部署,CWS 无法连接数据库或者无法访问 ninja,这是因为容器内不能正确解析
ninja
或mongo
。
- 你可以进入 cws 容器,用 nslookup 命令确认这一点:
docker exec -it cws nslookup mongo
- 如果确实无法正常解析,那么首先需要确认 Docker compose 配置,确认这些容器在同一 docker network 中,并确保 docker 为最新版本。
错误信息中出现 httpx.ReadTimeout
尝试在设置中增加 timeout 参数,然后重试,如果不出现这个错误了,就说明是网络问题。
No solver available or solver is invalid
如果提问时提示 No solver available or solver is invalid,这是因为 HAR 文件没配置好。请仔细阅读 ninja 的说明。