
通过 Cloudflare/Vercel 代理实现 Gemini API 负载均衡
前言
在当前环境下,国内服务器直接访问 Google Gemini API 存在网络障碍。为了解决这个问题,同时有效管理和轮换多个 Gemini API 密钥,我们可以采用一种“代理 + 负载均衡”的架构。
本文将介绍如何结合使用两个开源项目:gemini-balance-lite 和 gemini-balance,搭建一套稳定、高效的 Gemini API 调用服务。
- gemini-balance-lite: 一个轻量级的 Gemini API 代理,非常适合部署在 Cloudflare Pages 或 Vercel 等边缘计算平台上,作为海外的流量入口。
- gemini-balance: 一个支持多密钥负载均衡的后端服务,部署在国内服务器上,负责管理和分发请求。
架构图
[你的应用] ---> [国内服务器 (gemini-balance)] ---> [Cloudflare/Vercel (gemini-balance-lite)] ---> [Google AI API]
这种架构的优势在于:
- 网络优化: 利用 Cloudflare/Vercel 的全球网络优化国内服务器到 Google API 的访问。
- 密钥安全: API 密钥集中在国内服务器管理,不暴露在前端代理上。
- 负载均衡:
gemini-balance
自动轮换多个 API 密钥,避免单个密钥因请求频率过高而被限制。
准备工作
- 一个 GitHub 账户。
- 一个 Cloudflare 或 Vercel 账户。
- 一台国内服务器(有 Node.js 或 Docker 环境)。
- 一个或多个 Gemini API 密钥。
步骤一:部署 gemini-balance-lite
前端代理
gemini-balance-lite
项目提供了非常方便的一键部署功能,可以轻松部署到 Vercel、Cloudflare 等多个平台。
-
一键部署到 Vercel/Cloudfare:
点击上方按钮(不要点到中间图片,不然只会显示图标预览),Vercel/Cloudfare 将会自动为你克隆项目并完成部署。你只需要根据提示登录 GitHub 账户并授权即可。 -
获取部署地址: 部署成功后,Vercel 会为你生成一个域名,例如
https://gemini-balance-lite-xxxx.vercel.app
。这个就是你的代理地址,请记录下来。
注意:
gemini-balance-lite
本身不需要配置 API 密钥,它是一个纯粹的请求转发代理。国内用户可能需要为 Vercel 分配的域名配置自定义域名以获得更好的访问效果。
步骤二:部署 gemini-balance
后端负载均衡
现在,我们回到国内服务器,部署 gemini-balance
。
-
克隆项目:
Terminal window git clone https://github.com/snailyp/gemini-balance.gitcd gemini-balance -
使用 Docker Compose 部署:
gemini-balance
项目推荐使用 Docker Compose 进行部署,这样可以同时管理服务本身和其依赖的 MySQL 数据库。首先,在
gemini-balance
目录下创建一个docker-compose.yml
文件,内容如下:volumes:mysql_data:services:gemini-balance:image: ghcr.io/snailyp/gemini-balance:latestcontainer_name: gemini-balancerestart: unless-stoppedports:- "8000:8000"env_file:- .envdepends_on:mysql:condition: service_healthyhealthcheck:test: ["CMD-SHELL", "python -c \"import requests; exit(0) if requests.get('http://localhost:8000/health').status_code == 200 else exit(1)\"" ]interval: 30stimeout: 5sretries: 3start_period: 10smysql:image: mysql:8container_name: gemini-balance-mysqlrestart: unless-stoppedenvironment:MYSQL_ROOT_PASSWORD: your_root_passwordMYSQL_DATABASE: ${MYSQL_DATABASE}MYSQL_USER: ${MYSQL_USER}MYSQL_PASSWORD: ${MYSQL_PASSWORD}# ports:# - "3306:3306"volumes:- mysql_data:/var/lib/mysqlhealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]interval: 10s # 每隔10秒检查一次timeout: 5s # 每次检查的超时时间为5秒retries: 3 # 重试3次失败后标记为 unhealthystart_period: 30s # 容器启动后等待30秒再开始第一次健康检查然后,创建一个
.env
文件来存放环境变量,docker-compose.yml
会自动加载它。请参照gemini-balance
项目的官方文档来配置此文件,至少需要包含数据库连接信息、Gemini API 密钥和前端代理地址。请务必根据
gemini-balance
项目的官方文档修改正确的配置项。 -
启动服务: 配置完成后,在项目目录下运行以下命令启动服务:
Terminal window docker-compose up -d -
测试: 服务启动后,默认会在本地监听
8000
端口。你可以通过curl
命令来测试:Terminal window curl -X POST http://localhost:8000/v1/models/gemini-pro:generateContent \-H "Content-Type: application/json" \-d '{"contents": [{"parts": [{"text": "你好"}]}]}'
``` 如果能正常收到 Gemini 的回复,说明整个链路已经打通。
## 步骤三:在你的应用中调用
现在,你只需要将你的应用程序中调用 Gemini API 的地址,从官方地址 `https://generativelanguage.googleapis.com` 修改为你国内服务器上 `gemini-balance` 服务的地址 `http://localhost:8080` (或服务器的公网 IP 和端口),就可以开始使用了。
## 总结
通过这种组合部署方式,我们成功地搭建了一套高可用的 Gemini API 服务。它不仅解决了网络问题,还通过负载均衡提高了服务的稳定性和可用性,是目前在国内环境下使用 Gemini API 的一种高效且可靠的方案。