基于 Docker 托管 ChatGPT 页面与 OpenAI API 解锁

ChatGPT已经火了有一阵了,而自己在使用 NPM(Nginx Proxy Manger) 后,便一直想尝试通过 NPM 来反代 ChatGPT 页面。并且本地和远程服务器也无法访问 OpenAI API,因此进行一番尝试后,得到如下架构来实现。

architecture

其中,Caddy2 作为基本的 Web 服务器,来支持访问 ChatGPT 的个性化静态页面。然后由于 Caddy2 所在的远程服务器无法访问OpenAI API,再想办法让 Caddy2 通过代理的形式访问,因此要再使用一个 WARP 服务充当 Socket5 代理。

配置

以下为相关的配置文件。

Docker Compose file

version: "3.7"
services:
  app:
    image: 'caddy:latest'
    container_name: chatgpt_web
    restart: unless-stopped
    environment:
      - HTTP_PROXY=socks5h://warp-socks:9091
      - HTTPS_PROXY=socks5h://warp-socks:9091
    depends_on:
      - warp-socks
    ports:
      - 20011:80
    volumes:
      - ./data/Caddyfile:/etc/caddy/Caddyfile 
      - ./data/site:/srv
      - ./data/caddy_data:/data
      - ./data/caddy_config:/config

  warp-socks:
        image: monius/docker-warp-socks:latest
        privileged: true
        # ports:
        #     - "9091:9091"
        #     # - target: 9091
        #     #   published: 9091
        #     #   mode: host
        cap_add:
            - NET_ADMIN
            - SYS_ADMIN
        sysctls:
            net.ipv6.conf.all.disable_ipv6: 0
            net.ipv4.conf.all.src_valid_mark: 1
        healthcheck:
            test: ["CMD", "curl", "-f", "https://www.cloudflare.com/cdn-cgi/trace"]
            interval: 30s
            timeout: 10s
            retries: 5

如果要让 warp socks 向外提供服务,则修改 warp-socks 中的 ports 注释。

Caddy2配置

在 docker-compose.yml 同级目录中创建 data目录,在data目录中创建 Caddyfile 目录,内容如下。这里的 route /api* 表示对于反代域名/api* 会实际访问api.openai.com,并且 uri strip_prefix /api 将路径中的 /api 给去除。这样 openai 收到的地址才是正常的访问路径。

:80 {
        route /api* {
            uri strip_prefix /api
            reverse_proxy https://api.openai.com  {
                header_up Host api.openai.com
                header_up Authorization "{http.request.header.Authorization}"
            }
        }
        encode zstd gzip
        # Set this path to your site's directory.
        root * /srv

        # Enable the static file server.
        file_server
}

静态ChatGPT页面

这里利用了现现成的 GitHub 库来进行,这里选择了 https://github.com/xqdoo00o/chatgpt-web 这个库来做前端页面,支持语音输入转文字和朗读功能,我觉得用起来很顺手。

  1. 在 data 目录,执行 git clone https://github.com/xqdoo00o/chatgpt-web.git site,这会将 git 库下载并命名为 site

  2. 回到 data 目录上一级,包含 docker-compose.yml,执行 docker compose up -d,启动服务。

NPM配置

自己定义一个域名,在托管 域名管理 控制面板中将该域名指向 NPM 的服务器地址,随后在 NPM 中创建该域名,并在 hostname/IP 填写本地地址,Forward Port 指向 Compose file 中所填端口。 SSL中按自己所申请的具体域名还是泛域名进行选择打开。

NPM

使用

访问设置的域名,进入主界面后,进入设置页面,在OpenAI 接口处填入 域名/api/,然后输入 API 密钥(sk-xxx形式),点击检查API额度,数秒后正确返回结果即代表可正常访问,若有错误则需重回整体步骤检查。

chatgpt settings

结语

通过一套反代配置,可以利用 NPM 和 Caddy2 的优势,结合 ChatGPT 前端页面,来快速实 ChatGPT 基本聊天功能访问,解决本地和远程服务器不是 OpenAI 目标对象而无法使用的情形。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇