在现代开发中,代理服务常常是不可或缺的一部分。无论是为了跨域请求、隐藏真实API地址,还是为了实现负载均衡,代理服务都能发挥重要作用。今天,我将向大家介绍一个简单小巧的OpenAI Proxy项目,它不仅易于上手,还使用了最新的Bun运行时,让你的开发体验更加流畅。
快速上手
如果你已经熟悉Docker,或者想直接使用这个项目而不需要深入了解其内部实现,那么你可以通过一行命令快速启动代理服务:
sudo docker run -d -p 9017:9017 aiql/openai-proxy-docker:latest
如果你对项目的源码感兴趣,或者想进一步自定义和扩展功能,可以直接访问项目的GitHub仓库:
https://github.com/AI-QL/openai-proxy-docker
接下来,我们将详细介绍这个简单小巧的OpenAI Proxy项目,以及如何通过Docker快速部署和使用它。
项目简介
这个OpenAI Proxy Docker项目基于Express和http-proxy-middleware
,旨在为OpenAI的API提供一个简单的代理服务。通过这个项目,你可以轻松地将OpenAI的API请求转发到你的本地服务器,并且可以自定义请求和响应的头部信息。
项目的主要特点包括:
- 简单易用:只需几行代码即可完成代理服务的配置。
- 灵活配置:支持通过环境变量动态设置目标URL和端口。
- 安全优化:自动移除不必要的请求头部信息,增强安全性。
- 跨域支持:自动添加跨域头部信息,方便前端开发。
准备
在开始使用这个OpenAI Proxy项目之前,你需要准备一个可以访问OpenAI API的云服务环境。由于OpenAI的API服务需要访问境外网络,因此推荐使用以下云服务提供商的境外实例:
- 腾讯云境外轻量应用服务器:腾讯云提供了性价比高的境外轻量应用服务器,适合快速部署和运行代理服务。你可以选择硅谷、新加坡或其他境外区域的服务器。
- 阿里云境外服务器:阿里云的境外服务器也是一个不错的选择,提供稳定的网络连接和灵活的配置选项。
- 其他云服务提供商:如果你已经有其他云服务提供商的境外实例,也可以直接使用。
项目代码
以下是项目的主要代码部分:
const express = require('express')
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express()
const port = process.env.PORT || 9017
const target = process.env.TARGET || 'https://api.openai.com'
app.use('/', createProxyMiddleware({
target: target,
changeOrigin: true,
on: {
proxyReq: (proxyReq, req, res) => {
/* handle proxyReq */
proxyReq.removeHeader('x-forwarded-for');
proxyReq.removeHeader('x-real-ip');
},
proxyRes: (proxyRes, req, res) => {
/* handle proxyRes */
proxyRes.headers['Access-Control-Allow-Origin'] = '*';
proxyRes.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
},
error: (err, req, res) => {
/* handle error */
},
},
}));
app.listen(port, () => {
console.log(`Proxy agent started: http://localhost:${port}`)
})
Docker镜像
为了方便部署,项目还提供了Dockerfile,使用了最新的Bun运行时。Bun是一个快速、现代的JavaScript运行时,能够显著提升Node.js应用的性能。
以下是Dockerfile的内容:
# use the official Bun image
# see all versions at https://hub.docker.com/r/oven/bun/tags
FROM oven/bun:slim AS base
WORKDIR /usr/src/app
# install dependencies into temp directory
# this will cache them and speed up future builds
FROM base AS install
RUN mkdir -p /temp/dev
COPY package.json package-lock.json /temp/dev/
RUN cd /temp/dev && bun install --frozen-lockfile
# install with --production (exclude devDependencies)
RUN mkdir -p /temp/prod
COPY package.json package-lock.json /temp/prod/
RUN cd /temp/prod && bun install --frozen-lockfile --production
# copy node_modules from temp directory
# then copy all (non-ignored) project files into the image
FROM base AS prerelease
COPY --from=install /temp/dev/node_modules node_modules
COPY . .
# [optional] tests & build
ENV NODE_ENV=production
# copy production dependencies and source code into final image
FROM base AS release
COPY --from=install /temp/prod/node_modules node_modules
COPY --from=prerelease /usr/src/app/app.js .
COPY --from=prerelease /usr/src/app/package.json .
# run the app
USER bun
ENTRYPOINT [ "bun", "run", "app.js" ]
一键部署
通过Docker,你可以轻松地将这个项目部署到任何支持Docker的环境中。只需一行命令,即可启动代理服务:
sudo docker run -d -p 9017:9017 aiql/openai-proxy-docker:latest
这条命令将会在后台运行一个Docker容器,并将本地的9017端口映射到容器的9017端口。你可以通过http://你的IP地址:9017
访问代理服务。
更多场景
这个OpenAI Proxy Docker项目不仅仅局限于代理OpenAI的API,它还可以轻松扩展到其他场景。例如,你可以将其用于代理Nvidia NIM API,或者为其他第三方服务提供代理支持。通过简单的配置修改,你可以将目标URL指向任何你需要的API服务。
此外,如果你需要为代理服务设置自定义域名,或者进一步定制这个项目,比如添加更多的自定义头部信息、修改错误处理逻辑,或者使用不同的运行时环境,你可以参考项目的源代码并进行相应的修改。
同时,项目的README中也提供了更详细的部署说明,并了解如何将其集成到你的应用中,比如:
- 使用docker-compose进行部署
- 一个现成的Demo,可以快速验证代理服务的功能
- 一个OpenAI API的实时可视化页面,快速了解最新的OpenAPI JSON定义
项目源代码托管在GitHub上,地址为:
https://github.com/AI-QL/openai-proxy-docker
总结
这个OpenAI Proxy Docker项目不仅简单小巧,而且易于上手。通过使用最新的Bun运行时,你可以在保持高性能的同时,享受到现代JavaScript运行时的便利。无论是用于开发环境还是生产环境,这个项目都能为你提供一个可靠的代理服务解决方案。
快来试试吧,只需一行Docker命令,你就可以拥有一个自己的的OpenAI API代理服务!
标签:代理服务,temp,app,一键,API,OpenAI,Docker From: https://blog.csdn.net/aiqlcom/article/details/144684140