最近买了ChatGPT PLUS服务,想通过web服务将它共享给其他人使用,搜了一下目前GitHub上比较热门的服务有
- ChatGPT-Next-Web
- chatgpt-web-share
其中chatgpt-web-share支持API和PLUS账号分享两种方式,且架构为Python+JS+Docker,相对比较熟悉一些。而ChatGPT-Next-Web使用纯JS开发,且使用方式更为“傻瓜”,导致灵活性不足。所以我选择chatgpt-web-share。
准备
运行环境
- Windows11
- WSL2
- Docker
- Clash
- WSL2
版本
我这里使用chatgpt-web-share的最新版本0.4.0-alpha4.4
配置文件
最终的目录结构如下,需要先创建docker-compose.yml、data目录、config目录、config目录下的config.yaml、credentials.yaml,绿框中的是自动生成的目录及文件。
# docker-compose.yml
services:
chatgpt-web-share:
image: ghcr.io/moeakwak/chatgpt-web-share:0.4.0-alpha4.4
container_name: cws
restart: always
ports:
- 8092:80 #端口可调整
volumes:
- ./data:/app/backend/data
environment:
- TZ=Asia/Shanghai
- CWS_CONFIG_DIR=/app/backend/data/config
- CHATGPT_BASE_URL=http://go-chatgpt-api:8080/chatgpt/
depends_on:
- mongo
- go-chatgpt-api
mongo:
image: mongo:6.0
restart: always
volumes:
- ./mongo_data:/data/db
environment:
MONGO_INITDB_DATABASE: cws
MONGO_INITDB_ROOT_USERNAME: cws
MONGO_INITDB_ROOT_PASSWORD: password
go-chatgpt-api:
container_name: go-chatgpt-api
image: linweiyuan/go-chatgpt-api:latest
environment:
- GIN_MODE=release
- PROXY=http://10.30.48.245:7890 #宿主机IP端口
restart: unless-stopped
# config.yaml
openai_web:
is_plus_account: true
chatgpt_base_url: http://go-chatgpt-api:8080/chatgpt/backend-api/
proxy:
common_timeout: 10
ask_timeout: 600
openai_api:
openai_base_url: https://api.openai.com/v1/
proxy:
connect_timeout: 10
read_timeout: 20
common:
print_sql: false
create_initial_admin_user: true
initial_admin_user_username: admin
initial_admin_user_password: password
sync_conversations_on_startup: true
sync_conversations_regularly: false
http:
host: 127.0.0.1
port: 8000
cors_allow_origins:
- http://localhost
- http://127.0.0.1
- http://0.0.0.0
data:
data_dir: ./data
database_url: sqlite+aiosqlite:///data/database.db
mongodb_url: mongodb://cws:password@mongo:27017
run_migration: false
auth:
jwt_secret: MODIFY_THIS_TO_RANDOM_SECRET
jwt_lifetime_seconds: 86400
cookie_max_age: 86400
cookie_name: user_auth
user_secret: MODIFY_THIS_TO_RANDOM_SECRET
stats:
ask_stats_ttl: 7776000
request_stats_ttl: 2592000
request_stats_filter_keywords:
- /status
log:
console_log_level: INFO
# credentials.yaml
openai_web_access_token: "eyJhbGcxxxxxxxxxxx"
openai_api_key: "sk-POxxxxxxxx"
access_token获取链接:https://chat.openai.com/api/auth/session
api_key生成链接:https://platform.openai.com/account/api-keys
梯子
众所周知的原因docker pull官方镜像源非常慢,需要加速,方式见我另一篇
除此之外,容器内也需要梯子,可以通过修改docker-compose.yml文件,使go-chatgpt-api服务使用宿主机的代理
...
go-chatgpt-api:
container_name: go-chatgpt-api
image: linweiyuan/go-chatgpt-api:latest
environment:
- GIN_MODE=release
- PROXY=http://10.30.48.245:7890 #宿主机IP端口
restart: unless-stopped
部署
docker compose up -d
部署成功后可以看到日志如下:
浏览器打开127.0.0.1:8092、0.0.0.0:8092、172.23.192.1:8092就能看到登录页面,账号密码为配置文件中的admin和password
外部访问
上面正常就说明基本完成部署了,但如果想让其他用户从外部访问就需要进行端口映射,因为你通过本机ip:8092会发现无法打开,需要进行端口映射。
之后一路下一页就行了。
再用管理员权限打开powershell
netsh interface portproxy add v4tov4 listenport=8092 listenaddress=0.0.0.0 connectport=8092 connectaddress=localhost
通过以上命令,就将0.0.0.0:8092映射给了localhost:8092,所以如果电脑有多块网卡,则通过任一网卡ip:8092就能访问到localhost:8092了,所以就实现外部访问了。具体可以参考:https://zhuanlan.zhihu.com/p/425312804
注意:如果梯子怎么也进不去wsl2,则可以试试打开clash的TUN Mode