🚀 Gemini API 额度不够用?手把手教你无限爽用!

嘿,各位技术爱好者们!👋 作为目前头部大模型厂商。谷歌是唯一提供免费API让人体验目前地球上最强大模型注之一 Gemini2.5pro 的服务商。但是作为一名深度使用的程序员来说,也是感受到了 Gemini API 那"甜蜜的负担"------每日100次使用限制😭 作为一个热衷于探索 AI 应用的开发者,这简直是不能忍!于是,我决定另辟蹊径,在 AWS 上给自己搭建一个专属的 Gemini API 中继站,不仅突破了限制,还顺带把这个小应用部署到了 HTTPS 环境下,简直一举多得!✨

这篇博客,我将以我的亲身经历,手把手教你如何从零开始,在 AWS 免费服务器上搭建一个稳定、安全的 Gemini Balance 代理服务。过程中踩过的那些坑,我都会毫无保留地分享给你,保证让你少走弯路!😉

1. 突破限制!AWS 免费服务器,你的 Gemini API 自建中继站!

解决 Gemini API 限制的第一步,是拥有一台自己的服务器。而 AWS 的免费套餐,简直是为我们量身定制的福音!

如何注册开通 AWS 免费 12 个月的服务器

AWS 提供长达 12 个月的免费 EC2 (Elastic Compute Cloud) 服务器使用权,包括 t2.micro 或 t3.micro 实例(每月 750 小时)以及每月 100GB 的出站流量。这对于我们自建一个 Gemini API 中继站来说,绰绰有余!

首先前往官网注册,需要填写一些信息。

我当时填的表单大概长这样(当然,这是个例子哈,信息最好是"真实"的):

plain 复制代码
姓名:Jane Doe  
国家/地区代码:+1 (美国)  
电话号码:555-0100  
国家/地区:美国  
地址行 1:123 Main Street  
地址行 2:Apartment 4B  
城市:Anytown  
州/省/自治区/直辖市或地区:California  
邮政编码:90210 

跟着 AWS 官网的引导一步步操作,选择你的 EC2 实例类型(推荐 Amazon Linux 2023 或 Amazon Linux 2),创建并下载你的 SSH 密钥对(.pem 文件),然后启动你的实例。别忘了,那个 .pem 文件是你的服务器的"钥匙",务必妥善保管!🔑

服务器启动后,你就能在 EC2 控制台看到它的公共 IP 地址和公共 DNS 名称了,比如 ec2-12352-12348.us-east-2.compute.amazonaws.com这个后面会用到

连接你的服务器

我个人是用 MobaXterm 来管理我的 Linux 服务器,因为它集成了 SSH 客户端、SFTP、X server 等功能,非常方便。

连接步骤很简单:

  1. 打开 MobaXterm。
  2. 点击 "Session" -> "SSH"
  3. "Remote host" 填入你的 EC2 公共 DNS(例如 ec2-12352-12348.us-east-2.compute.amazonaws.com)。
  4. 勾选 "Specify username" 并填入 ec2-user(Amazon Linux 默认用户)。
  5. 勾选 "Use private key",然后选择你之前下载的 mySec.pem 文件。
  6. 点击 "OK" 就可以连接啦!

如果一切顺利,你就能看到熟悉的命令行界面了!🎉

2. 磨刀不误砍柴工:Docker 及环境配置踩坑记 🛠️

在服务器上运行应用程序,Docker 绝对是首选!它能让你的应用在一个隔离的环境中运行,移植性强,管理起来也方便。

安装 Docker

首先,连接到你的 EC2 实例。第一件事永远是更新系统包,保持最新状态:

bash 复制代码
sudo dnf update -y  
# 或者如果你是 Amazon Linux 2,也可以用 sudo yum update -y

接下来是安装 Docker Engine。这里我遇到了第一个小坑,因为我的系统是 Amazon Linux 2023 (AL2023),它和之前的 Amazon Linux 2 (AL2) 在包管理上有细微差别。

🔥 踩坑点 1:EPEL 仓库与 AL2023 的兼容性问题

我习惯性地尝试安装 epel-release,结果系统告诉我"不受支持":

bash 复制代码
sudo yum install -y epel-release  
# 报错:sudo yum install -y epel-release 这个命令在我的系统上不受支持。因为是先版本的亚马逊服务器

原来,AL2023 已经将许多常用工具直接集成到默认仓库中,或者使用 dnf 作为主要的包管理器(虽然 yum 很多时候是 dnf 的别名)。

正确的安装姿势(针对 AL2023):

bash 复制代码
sudo dnf install -y docker 
# 或者 sudo yum install -y docker

如果你是 Amazon Linux 2 (AL2):

bash 复制代码
sudo amazon-linux-extras install docker -y

安装完成后,启动 Docker 服务并设置开机自启:

bash 复制代码
sudo systemctl start docker  
sudo systemctl enable docker

赋权 Docker,告别 sudo!

默认情况下,只有 root 用户才能运行 Docker 命令。每次都敲 sudo 实在太麻烦了!我们需要把 ec2-user 添加到 docker 用户组:

bash 复制代码
sudo usermod -a -G docker ec2-user

⚠️ 踩坑点 2:用户组生效需要重新登录!

执行完上面那条命令,你可能立刻尝试 docker run hello-world,结果发现还得加 sudo。别急!这是因为用户组的更改需要你注销当前的 SSH 会话并重新登录才能生效。

重新登录 MobaXterm 后,不带 sudo 运行 docker run hello-world,如果看到"Hello from Docker!",恭喜你,Docker 环境已经准备就绪!🥳

bash 复制代码
docker run hello-world

3. Docker Compose 登场!Gemini Balance 容器轻松跑起来 🚀

为了更优雅地管理我的 Gemini Balance 容器,我们需要 Docker Compose。它能通过一个简单的 docker-compose.yml 文件定义和运行多个 Docker 容器。

下面介绍的 .env 和 dock-compose.yaml 文件均可在仓库地址中拷贝

.env 只需要复制前11行就行了

创建项目目录和 .env 文件

首先,为你的项目创建一个专门的目录,这样所有相关文件都能整洁地放在一起:

bash 复制代码
mkdir my-gemini-app  
cd my-gemini-app

接着,创建一个 .env 文件。这个文件用于存放环境变量,特别是那些敏感信息,比如 API 密钥。现在可以先创建一个空文件,等拿到具体配置再填入:

bash 复制代码
touch .env

将以下内容粘贴进去:

plain 复制代码
# 数据库配置
DATABASE_TYPE=mysql
#SQLITE_DATABASE=default_db
MYSQL_HOST=gemini-balance-mysql
#MYSQL_SOCKET=/run/mysqld/mysqld.sock
MYSQL_PORT=3306
MYSQL_USER=gemini
MYSQL_PASSWORD=change_me
MYSQL_DATABASE=default_db
API_KEYS=["AIzaSyxxxxxxxxxxxxxxxxxxx","AIzaSyxxxxxxxxxxxxxxxxxxx"]
ALLOWED_TOKENS=["sk-123456"]

API_KEYS 记得填你自己的Gemini Api keys 你可以填很多个来进行负载轮询 达到无限爽用的体验
ALLOWED_TOKENS 记得改的复杂点 并且记住它。等下登录 web界面会用到

编写 docker-compose.yml

这是 Docker Compose 的核心!它定义了你的服务如何运行。

bash 复制代码
vi docker-compose.yml

将以下内容粘贴进去:

yaml 复制代码
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秒再开始第一次健康检查

启动容器:又一个命令坑!🤯

安装 Docker Compose(如果你的系统没有预装):

bash 复制代码
sudo dnf install -y docker-compose # 针对 AL2023 或其他较新系统  
# 或者 sudo yum install -y docker-compose

如果安装失败。按照下面的安装独立的 docker-compose

  1. 下载 Docker Compose 二进制文件: 你可以从 Docker Compose 的 GitHub 发布页面下载最新版本。我们下载到 /usr/local/bin 目录,并确保它有执行权限。
bash 复制代码
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.添加执行权限:

bash 复制代码
sudo chmod +x /usr/local/bin/docker-compose

3.验证安装:

复制代码
docker-compose version

4.最终启动容器

bash 复制代码
sudo docker-compose up -d

等待片刻,容器启动成功。查看容器状态

bash 复制代码
docker ps

当当!!此时服务实际上已经部署成功了!我们只需要去AWS 开启 8000端口即可正常访问了!

前往 EC2 - 安全组 - 选择安全组 - 编辑规则 - 添加 8000端口的入站规则

此时复制你的EC2 公共DNS域名加上端口 类似http://ec2-52-xxsss.compute.amazonaws.com:8000 在浏览器中输入回车能看到下面的页面。就说明你配置成功啦。

4. 门面担当 Nginx:域名与反向代理的艺术 🌐

服务跑起来了,但它还在 8000 端口,而且是 HTTP 的。为了让它能通过你自己的域名访问,并且穿上 HTTPS 的"安全衣",我们需要 Nginx。

如果你对安全无所谓~ 可以直接跳到 应用落地:CherryStudio 中集成你的专属 Gemini API!

域名准备

首先,你需要一个自己的域名(例如 gemini.eu.cc

  • 更新 DNS: 在你的域名注册商那里,添加一条 A 记录,将你的域名(例如 geminihu.eu.cc)指向这个AWS 公网IP。

安装 Nginx

回到你的 EC2 服务器,安装 Nginx:

bash 复制代码
sudo dnf install -y nginx 
# 或者 sudo yum install -y nginx

启动 Nginx 服务并设置开机自启:

bash 复制代码
sudo systemctl start nginx  
sudo systemctl enable nginx

在 AWS 控制台,修改你的 EC2 实例的安全组:

  • 入站规则 中,确保 HTTP (80 端口)HTTPS (443 端口) 都对 0.0.0.0/0(所有人)开放。这是 Certbot 验证域名和用户访问 HTTPS 所必需的。

然后在浏览器中访问你的 EC2 公共 IP 地址,如果看到 Nginx 的欢迎页面,说明 Nginx 已经跑起来了!

配置 Nginx 反向代理

我们将创建一个 Nginx 配置文件来转发请求到你的 Docker 容器。

bash 复制代码
sudo vi /etc/nginx/conf.d/gemini-balance.conf

输入以下基础配置(这是最初的 HTTP 配置):

nginx 复制代码
server {
    listen 80;
    server_name geminihu.eu.cc; # 替换成你的域名

    location / {
        proxy_pass http://127.0.0.1:8000; # 你的 Docker 容器内部服务的端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 90;
    }
}

保存并退出。然后检查 Nginx 配置语法并重新加载:

bash 复制代码
sudo nginx -t  
sudo systemctl reload nginx

现在,通过 http://你的域名 访问,你应该能看到你的 Gemini Balance 应用内容了!

5. 安全第一!SSL 证书,让你的服务穿上 HTTPS 的盔甲 🔒

让你的服务从 HTTP 升级到 HTTPS,不仅更安全,也更专业!我们将使用 Certbot 和 ZeroSSL 来实现。

安装 Certbot

在 AL2023 上安装 Certbot 非常简单:

bash 复制代码
sudo dnf install -y certbot python3-certbot-nginx

证书申请:又双叒叕是坑!😅

我首先尝试使用 Let's Encrypt 申请,结果遇到了速率限制

⚠️ 踩坑点 4:Let's Encrypt 的速率限制,特别是针对公共后缀域名!

bash 复制代码
An unexpected error occurred:  
too many certificates (50) already issued for "eu.cc" in the last 168h0m0s, retry after 2025-07-08 10:43:06 UTC

我当时一脸懵逼:"我这域名是新买的呀!" 后来才明白,eu.cc 这种域名,被 Let's Encrypt 视为一个"公共后缀"(Public Suffix),类似于 .co.uk。这意味着所有 *.eu.cc 的子域名(包括我的 geminihu.eu.cc)的证书申请,都会计入 eu.cc 这个注册域名的整体限制!如果这个公共后缀下的子域名在一周内被申请了超过 50 个证书,那么整个域名就得排队等重置了。

解决方案:等待或更换 CA。 既然时间不多,我选择更换 CA 到 ZeroSSL。

ZeroSSL 申请证书:EAB 凭证与超时挑战

我注册了 ZeroSSL 账户,并在其面板中找到了 EAB (External Account Binding) 凭证(Key ID 和 HMAC Key)。然后尝试用 Certbot 申请:

bash 复制代码
sudo certbot certonly --nginx \
  --server https://acme.zerossl.com/v2/DV90 \
  --eab-kid v3pJQ-kK7g \  
  --eab-hmac-key xxxasdf-LDxD_X7T9bczBDlqzvnm-y2Awwu2RtQAn_hK5g \
  -d geminihu.eu.cc \
  --email example@qq.com \
  --agree-tos \
  --non-interactive

eab-kid eab-hmac-key 替换为你自己的ZeroSSL的 EAB 凭证

等待几分钟后,应该就能成功看到下面的输出了了!👍

bash 复制代码
Successfully received certificate.  
Certificate is saved at: /etc/letsencrypt/live/geminihu.eu.cc/fullchain.pem  
Key is saved at:        /etc/letsencrypt/live/geminihu.eu.cc/privkey.pem  
This certificate expires on 2025-10-06.  
...

手动配置 Nginx HTTPS,解决 Certbot 遗漏问题 😵‍💫

正常来说 Certbot 既然成功了,Nginx 肯定已经自动配置好了 HTTPS。结果一看配置文件,傻眼了------它还停留在 HTTP 状态!

⚠️ 踩坑点 6:Certbot 有时不会自动配置 Nginx HTTPS!

这意味着我需要手动为 Nginx 添加 HTTPS 配置。Certbot 已经把证书文件放到了 /etc/letsencrypt/live/geminihu.eu.cc/ 目录下,所以我们直接引用它们就好。

编辑 gemini-balance.conf:

bash 复制代码
sudo vi /etc/nginx/conf.d/gemini-balance.conf

粘贴以下完整的 Nginx 配置(它包含了 HTTP 到 HTTPS 的重定向,以及 HTTPS 的配置):

nginx 复制代码
# HTTP 到 HTTPS 的重定向
server {
    listen 80;
    listen [::]:80; # IPv6 支持
    server_name geminihu.eu.cc; # 替换成你的域名

    # 永久重定向所有 HTTP 请求到 HTTPS
    return 301 https://$host$request_uri;
}

# HTTPS 配置
server {
    listen 443 ssl http2; # 监听 443 端口,启用 SSL/TLS 和 HTTP/2
    listen [::]:443 ssl http2; # IPv6 支持

    server_name geminihu.eu.cc; # 替换成你的域名

    # SSL 证书和私钥路径 (Certbot 生成的)
    ssl_certificate /etc/letsencrypt/live/geminihu.eu.cc/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/geminihu.eu.cc/privkey.pem;

    # 额外的 SSL/TLS 安全配置 (Certbot 推荐的最佳实践)
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # DH 参数文件(如果存在)

    # 反向代理到你的 Docker 容器
    location / {
        proxy_pass http://127.0.0.1:8000; # 你的 Docker 容器内部服务的端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 90;
    }
}

保存并退出。

权限问题:Nginx 无法读取证书!😱

当我满心欢喜地运行 sudo nginx -t 检查配置时,又一个报错给了我当头一棒:

bash 复制代码
nginx: [emerg] cannot load certificate "/etc/letsencrypt/live/geminihu.eu.cc/fullchain.pem": BIO_new_file() failed (SSL: error:8000000D:system library::Permission denied

以及日志文件的权限问题:

bash 复制代码
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

⚠️ 踩坑点 7:Nginx 运行用户权限不足!

这是经典的权限问题。Nginx 的工作进程通常以一个非 root 用户(比如 nginx 用户)运行,而 Certbot 生成的证书文件和 Nginx 日志目录的权限默认可能只允许 root 用户访问。

解决方案:赋予 Nginx 用户正确的权限!

  1. 确定 Nginx 运行用户: 通常是 nginx。可以通过 sudo cat /etc/nginx/nginx.conf | grep user 确认。
  2. 调整日志目录权限:
bash 复制代码
sudo chown -R nginx:nginx /var/log/nginx/
sudo chmod -R 755 /var/log/nginx/
  1. 调整证书目录权限(核心!): 确保 Nginx 用户可以读取证书文件。
bash 复制代码
sudo chgrp -R nginx /etc/letsencrypt/archive
sudo chgrp -R nginx /etc/letsencrypt/live
sudo chmod -R g+rX /etc/letsencrypt/archive
sudo chmod -R g+rX /etc/letsencrypt/live
  1. 修复 Nginx http2 警告: 顺便把之前 nginx -t 看到的 http2 警告也改掉。
    listen 443 ssl http2; 拆分成:
nginx 复制代码
listen 443 ssl;
listen [::]:443 ssl;
http2 on; # 单独一行

再次运行 sudo nginx -t,这次应该会显示 syntax is ok 和 test is successful!

最后,重新加载 Nginx 配置:

bash 复制代码
sudo systemctl reload nginx

现在,你的服务应该可以通过 https://geminihu.eu.cc 访问了!而且,HTTP 请求也会自动跳转到 HTTPS!🔒✨

6. 应用落地:CherryStudio 中集成你的专属 Gemini API!

终于到了最激动人心的时刻!你的 Gemini API 中继站已经上线并被 HTTPS 保护了!现在,你可以在你的应用程序中愉快地使用它,绕过那些恼人的 API 限制了。

以 CherryStudio 为例演示

配置模型供应商

  • 点击左侧 设置 - 模型服务 - 添加
  • 输入名称(例如 GeminiBalance)。提供商类型选择 Gemini
  • 配置API密钥 与 API地址。密钥为登录设置的密钥 sk-xxx 地址为你的 https域名(或者最初的DNS域名:8000)
  • 添加模型: gemini-2.5-pro gemini-2.5-flash

最终效果类似这样

接下来就可以在聊天页面切换到 这个模型愉快的使用啦。你可以多配置几个账户的 API KEY让 Gemini Balance 进行负载均衡轮询使用从而达到无限制使用的效果!

总结

回顾一下,我们经历了一场从零开始,在 AWS 免费服务器上搭建 Gemini API 中继站的冒险!我们:

  • 🚀 成功开通了 AWS EC2 免费服务器。
  • 📦 完美安装并配置了 Docker 环境,并解决了用户组权限问题。
  • 🐳 运用 Docker Compose 优雅地运行了 Gemini Balance 容器,并搞定了命令语法差异。
  • 🌐 巧妙地使用 Nginx 作为反向代理,并设置了自定义域名。
  • 🔒 排除万难,最终为服务添加了 HTTPS 证书。
  • ✨ 最终,将自建的 Gemini API 中继站集成到了应用程序中,从此告别 API 限制的烦恼!

希望我的这些经验和踩坑记录,能帮助你在自己的技术探索之路上更加顺利!如果你觉得这篇文章对你有帮助,不妨点个赞,分享给更多需要的朋友,或者在评论区留下你的想法,我们一起交流进步!

感谢你的阅读!我们下期再见!👋

相关推荐
牛奶8 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶8 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
KEEN的创享空间14 小时前
AI编程从0到1之10X提效(Vibe Coding 氛围式编码 )09篇
openai·ai编程
AlienZHOU15 小时前
为 AI Agent 编写高质量 Skill:Claude 官方指南
agent·ai编程·claude
恋猫de小郭15 小时前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
KaneLogger16 小时前
【翻译】打造 Agent Skills 的最佳实践
agent·ai编程·claude
王小酱16 小时前
Everything Claude Code 文档
openai·ai编程·aiops
雮尘18 小时前
如何在非 Claude IDE (TARE、 Cursor、Antigravity 等)下使用 Agent Skills
前端·agent·ai编程
刘贺同学18 小时前
Day12-龙虾哥打工日记:OpenClaw 子 Agent 到底看到了什么?
aigc·ai编程
程序员鱼皮20 小时前
离大谱,我竟然在 VS Code 里做了个视频!
github·aigc·ai编程