这个帖子主要是记录一下操作步骤,要不然时间久了我根本记不住,又得重新问gpt。
主要是有些主机的IP无法直接访问openai,或者其他模型的api,官方默认的url被他们禁的死死的,所以需要一个中转的IP。
为此,我特意整了一个便宜的中转服务器。
以openai的base_url为例:https://api.openai.com/v1/chat/completions
好了,我们现在有一个能访问openai的中转服务器A,公网IP为122.122.122.122,有一个本地服务器B,还需要一个域名,假设是abc.com。
这时候要配置的步骤还是比较复杂的,一条一条的梳理。
services:
caddy:
image: caddy:alpine
container_name: caddy
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data:/data/caddy
user: "1000"
restart: always
environment:
TZ: Asia/Shanghai
networks:
default:
external: true
name: net
创建docker的桥接网络:docker network create net
vim Caddyfile
填入:
openai.abc.com {
encode gzip
reverse_proxy 122.122.122.122:2222
}
docker compose up --force-recreate --build -d
接下来要配置具体的跨域转发。
安装Node.js
确保你的开发环境中已经安装了Node.js。如果还没有安装,你可以从Node.js官网下载并安装它。我系统是Ubuntu22.04.3,node.js安装的是v12.22.9。
创建项目目录:
mkdir proxy-server
cd proxy-server
初始化Node.js项目
在项目目录中,运行以下命令来初始化一个新的Node.js项目并创建package.json文件:
npm init -y
安装依赖
你需要安装express和http-proxy-middleware。使用以下命令安装这些依赖。
npm install express http-proxy-middleware
创建server.js文件
打开server.js文件并添加以下代码:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
// 创建Express应用
const app = express();
// 定义代理中间件选项
const proxyOptions = {
target: 'https://api.openai.com', // 目标主机
changeOrigin: true, // 需要虚拟主机站点
};
// 使用中间件将特定请求转发到目标API
app.use('/api', createProxyMiddleware(proxyOptions));
// 设置端口
const PORT = process.env.PORT || 2222;
// 启动服务器
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
node server.js
nohup node server.js >> output.log 2>&1 &
这时候只需要将openai的base_url(https://api.openai.com/v1/chat/completions)替换成你的url就行了:
# openai.base_url = 'https://api.openai.com/v1/chat/completions'
openai.base_url = 'https://openai.abc.com/v1/chat/completions'
完美,也许帮不到大家,但我自己做了一个比较完整的记录。