🚀 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 限制的烦恼!

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

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

相关推荐
奇舞精选5 小时前
用 AI 提效的新方式:全面体验 Google Gemini CLI
前端·google·ai编程
量子位6 小时前
马斯克 Grok-4 碾压所有大模型!“比所有领域博士都聪明”,AIME25 拿满分
ai编程·grok
量子位6 小时前
赵晓卉,你老板知道你用飞书 AI 爆改绩效评价吗?
ai编程
yaocheng的ai分身6 小时前
Claude 4 提示词工程最佳实践
ai编程·claude·trae
北灵聊AI6 小时前
白嫖 Claude Code,国内也能免费使用
ai编程
夲奋亻Jay7 小时前
下面我将针对每个应用场景,详细列出前端领域涉及AI推进的具体技术、工具和方案
aigc·ai编程
qiyue7710 小时前
AI编程专栏(五)-提示词知识-通用提示结构或框架
人工智能·ai编程
泽安AI研习社10 小时前
用了 Claude Code 之后,我不再续费 Cursor 了!国内使用 Claude Code 教程【附案例实操】
ai编程
experdot11 小时前
用Cursor解决了AI聊天的10个痛点后,我又做了一个新功能:交叉分析表
ai编程