使用traefik解决ChatGPT的API无法访问的问题

OpenAI 刚更新了 ChatGPT 的 api 接口，在某不知名地区当天就被墙了，看到网上五花八门反代教程，有用 cf work 的，有 NGINX 的，我也来水一篇

首先

确保你安装了 traefik 并配置了 file provider 文件目录

Copy
[providers]
[providers.file]
directory = "/etc/traefik/conf.d/"

docker 文件中挂载了对应 volume，如下

Copy
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/traefik.yml:ro
- ./data/acme.json:/acme.json
# Add folder with dynamic configuration yml
- ./data/configurations://etc/traefik/conf.d/

配置

在 data/configurations 创建 openai.yaml 文件并添加以下内容:

Copy
http:
routers:
openai:
entryPoints:
- websecure
rule: "Host(`yourdomain.com`) && Path(`/v1/chat/completions`)"
service: openai
services:
openai:
loadBalancer:
passHostHeader: true
servers:
- url: "https://api.openai.com"

配置完毕等待一会在 traefik dashbard 查看配置是否加载

我本以为这样就好了。但是尝试了下好像不能代理非容器服务？但是容器服务这样配置是正常的，还是我的使用方式有问题？有知道的请告知我，谢谢

I make a new one

动手糊了一个 docker 镜像 https://hub.docker.com/r/mirrors2/chatgpt-api-proxy

Copy
version: '3.7'
services:
chatgpt-api-proxy:
image: mirrors2/chatgpt-api-proxy
container_name: chatgpt-api-proxy
restart: unless-stopped
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.chatgpt-api-proxy.entrypoints=websecure"
- "traefik.http.routers.chatgpt-api-proxy.rule=Host(`your.domains`)"

networks:
traefik:
external: true

这回搞定了。