Share-plus-chatgpt项目部署
1、创建应用目录并创建配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 cd ~ mkdir cws && cd cws mkdir -p data/config export MONGODB_PASSWORD=your_pass # MongoDB 密码 export INITIAL_ADMIN_PASSWORD=your_pass # 初始管理员密码 # 运行一次 Docker 容器,创建配置文件: docker run -it --rm \ -v $PWD/data/config:/tmp/config \ ghcr.io/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/
2、编辑 docker-compose 文件
1 2 3 4 echo "TZ=Asia/Shanghai" > .env echo "MONGO_INITDB_DATABASE=cws" >> .env echo "MONGO_INITDB_ROOT_USERNAME=cws" >> .env echo "MONGO_INITDB_ROOT_PASSWORD=your_pass" >> .env
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 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 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"
启动服务
3、配置 ChatGPT 代理
Ninja 文档:https://github.com/gngpp/ninja/blob/main/doc/readme_zh.md
简单来说,你需要:
在 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 中填入。
ArkoseLabs
发送GPT-4/GPT-3.5/创建API-Key对话需要Arkose Token作为参数发送,支持的解决方案暂时只有两种
1、使用HAR
支持HAR特征池化,可同时上传多个HAR,使用轮训策略
ChatGPT 官网发送一次 GPT-4 会话消息,浏览器 F12 下载 https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147 接口的HAR日志记录文件,使用启动参数 --arkose-gpt4-har-dir 指定HAR目录路径使用(不指定路径则使用默认路径~/.gpt4,可直接上传更新HAR),同理GPT-3.5和其他类型也是一样方法。支持WebUI上传更新HAR,请求路径:/har/upload,可选上传身份验证参数:–arkose-har-upload-key
2、使用YesCaptcha / CapSolver
平台进行验证码解析,启动参数–arkose-solver选择平台(默认使用YesCaptcha),–arkose-solver-key 填写Client Key
两种方案都使用,优先级是:HAR > YesCaptcha / CapSolver
YesCaptcha / CapSolver推荐搭配HAR使用,出验证码则调用解析器处理,验证后HAR使用更持久
目前OpenAI已经更新登录需要验证Arkose Token,解决方式同GPT-4,填写启动参数指定HAR文件–arkose-auth-har-dir。创建API-Key需要上传Platform相关的HAR特征文件,获取方式同上。
OpenAI取消对GPT-3.5进行Arkose验证,可以不上传HAR特征文件使用(已上传的不影响),兼容后续可能会再次开启Arkose验证,需要加上启动参数–arkose-gpt3-experiment进行开启GPT-3.5模型Arkose验证处理,WebUI不受影响。如果遇到418 I’m a teapot,可以开启–arkose-gpt3-experiment,同时需要上传HAR特征,如果没有GPT-3.5的特征,GPT-4的特征也可以使用,如果还不行,则尝试开启–arkose-gpt3-experiment-solver,可能会使用第三方平台解决验证码。
4、接下来要做的事
到这里,CWS 已经部署完成。要继续使用,你可能需要:
在服务器上配置反向代理,配置域名和 https 加密
关闭 Ninja 对外的 7999 端口,比如在 docker compose 配置中注释掉它,或者使用防火墙限制访问
5、升级及维护
1 2 docker-compose pull && docker-compose up -d # 在更新前,建议备份数据,并且确保设置中已经打开 run_migration 选项,以便在更新后自动执行数据库迁移。
6、反向代理
提供三种方式
6.1 设置反向代理和 SSL
为了向外公开站点,你应当使用 https 协议。我们推荐使用 Caddy 作为反向代理,它可以自动申请证书并配置 https。
下面是一个使用 Cloudflare 的 API 自动进行证书验证的 Caddyfile 例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { 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 }
6.2 使用 Cloudflare
推荐使用 Cloudflare 加速站点,从而隐藏服务器 IP。如果你将域名 DNS 托管在 Cloudflare,在开启 Proxy 之后,你有如下方式使用 https:
在 Cloudflare 中设置站点 https 跳转,并在 SSL/TLS 选项中设置加密类型为 flexible;服务器中反向代理对外使用 http 协议。如果你想更安全,可以将其配置为只允许 Cloudflare 服务器访问。这样的好处是开启 https 较为简单,不用续证书。
在 SSL/TLS 选项中设置加密类型为 Full,服务器反向代理配置有效的 SSL 证书,对外使用 https。
6.3 使用 nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 http { ... map $http_upgrade $connection_upgrade { default upgrade; '' close; } ... } server { listen 443 ssl; server_name plus.domain.com; ssl_certificate /etc/nginx/ssl/plus.doamin.com.pem; ssl_certificate_key /etc/nginx/ssl/plus.domain.com.key; location / { # 目前已经实现的子系统 proxy_http_version 1.1; #WebSocket proxy_set_header Upgrade $http_upgrade; #WebSocket proxy_set_header Connection $connection_upgrade; #WebSocket proxy_pass http://127.0.0.1:5000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_buffering off; chunked_transfer_encoding on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; } } server { listen 80; server_name plus.domain.com; location = / { rewrite ^(.+)$ https://plus.domain.com$1 redirect; } }