1120 字
6 分钟
通过 Cloudflare/Vercel 代理实现 Gemini API 负载均衡

通过 Cloudflare/Vercel 代理实现 Gemini API 负载均衡#

前言#

标题

在当前环境下,国内服务器直接访问 Google Gemini API 存在网络障碍。为了解决这个问题,同时有效管理和轮换多个 Gemini API 密钥,我们可以采用一种“代理 + 负载均衡”的架构。

本文将介绍如何结合使用两个开源项目:gemini-balance-litegemini-balance,搭建一套稳定、高效的 Gemini API 调用服务。

  • gemini-balance-lite: 一个轻量级的 Gemini API 代理,非常适合部署在 Cloudflare Pages 或 Vercel 等边缘计算平台上,作为海外的流量入口。
  • gemini-balance: 一个支持多密钥负载均衡的后端服务,部署在国内服务器上,负责管理和分发请求。

架构图#

[你的应用] ---> [国内服务器 (gemini-balance)] ---> [Cloudflare/Vercel (gemini-balance-lite)] ---> [Google AI API]

这种架构的优势在于:

  1. 网络优化: 利用 Cloudflare/Vercel 的全球网络优化国内服务器到 Google API 的访问。
  2. 密钥安全: API 密钥集中在国内服务器管理,不暴露在前端代理上。
  3. 负载均衡: gemini-balance 自动轮换多个 API 密钥,避免单个密钥因请求频率过高而被限制。

准备工作#

  1. 一个 GitHub 账户。
  2. 一个 Cloudflare 或 Vercel 账户。
  3. 一台国内服务器(有 Node.js 或 Docker 环境)。
  4. 一个或多个 Gemini API 密钥。

步骤一:部署 gemini-balance-lite 前端代理#

gemini-balance-lite 项目提供了非常方便的一键部署功能,可以轻松部署到 Vercel、Cloudflare 等多个平台。

  1. 一键部署到 Vercel/Cloudfare:
    Deploy to Vercel
    Deploy to Cloudflare Workers
    点击上方按钮(不要点到中间图片,不然只会显示图标预览),Vercel/Cloudfare 将会自动为你克隆项目并完成部署。你只需要根据提示登录 GitHub 账户并授权即可。

  2. 获取部署地址: 部署成功后,Vercel 会为你生成一个域名,例如 https://gemini-balance-lite-xxxx.vercel.app。这个就是你的代理地址,请记录下来。

注意: gemini-balance-lite 本身不需要配置 API 密钥,它是一个纯粹的请求转发代理。国内用户可能需要为 Vercel 分配的域名配置自定义域名以获得更好的访问效果。

步骤二:部署 gemini-balance 后端负载均衡#

现在,我们回到国内服务器,部署 gemini-balance

  1. 克隆项目:

    Terminal window
    git clone https://github.com/snailyp/gemini-balance.git
    cd gemini-balance
  2. 使用 Docker Compose 部署: gemini-balance 项目推荐使用 Docker Compose 进行部署,这样可以同时管理服务本身和其依赖的 MySQL 数据库。

    首先,在 gemini-balance 目录下创建一个 docker-compose.yml 文件,内容如下:

    volumes:
    mysql_data:
    services:
    gemini-balance:
    image: ghcr.io/snailyp/gemini-balance:latest
    container_name: gemini-balance
    restart: unless-stopped
    ports:
    - "8000:8000"
    env_file:
    - .env
    depends_on:
    mysql:
    condition: service_healthy
    healthcheck:
    test: ["CMD-SHELL", "python -c \"import requests; exit(0) if requests.get('http://localhost:8000/health').status_code == 200 else exit(1)\"" ]
    interval: 30s
    timeout: 5s
    retries: 3
    start_period: 10s
    mysql:
    image: mysql:8
    container_name: gemini-balance-mysql
    restart: unless-stopped
    environment:
    MYSQL_ROOT_PASSWORD: your_root_password
    MYSQL_DATABASE: ${MYSQL_DATABASE}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    # ports:
    # - "3306:3306"
    volumes:
    - mysql_data:/var/lib/mysql
    healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
    interval: 10s # 每隔10秒检查一次
    timeout: 5s # 每次检查的超时时间为5秒
    retries: 3 # 重试3次失败后标记为 unhealthy
    start_period: 30s # 容器启动后等待30秒再开始第一次健康检查

    然后,创建一个 .env 文件来存放环境变量,docker-compose.yml 会自动加载它。请参照 gemini-balance 项目的官方文档来配置此文件,至少需要包含数据库连接信息、Gemini API 密钥和前端代理地址。

    请务必根据 gemini-balance 项目的官方文档修改正确的配置项。

  3. 启动服务: 配置完成后,在项目目录下运行以下命令启动服务:

    Terminal window
    docker-compose up -d
  4. 测试: 服务启动后,默认会在本地监听 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 的一种高效且可靠的方案。
通过 Cloudflare/Vercel 代理实现 Gemini API 负载均衡
https://fuwari.vercel.app/posts/2025082801/
作者
木木em哈哈
发布于
2025-08-28
许可协议
CC BY-NC-SA 4.0