5分钟把Gemini CLI变成私有API:Docker部署全攻略

意外富翁 · 1个月前 · 技术 · 112 · 0

很多朋友想用 Gemini 的 API,但官方 API 要绑卡、免费版又限制多。今天教大家一个妙招:把 Google 免费的 Gemini CLI 封装成兼容 OpenAI 的 HTTP API,用 Docker 一键部署,5 分钟拥有自己的 AI 后端。测试使用还是可以的,正式使用的话还是建议付费使用官网的 API,稳定性和速度都有保障。


一、准备工作

你需要:

  • 一台能上网的 Linux/macOS/Windows WSL 电脑
  • 已安装 Docker 和 docker-compose
  • 一个 Google 账号

二、获取 OAuth 凭证(最关键一步)

oauth_creds.json 是 Google 给你的"通行证",有以下两种方式获取:

(一) 本地安装一个 Gemini CLI,正常使用登录之后,就会生成 oauth_creds.json 文件

(二) 通过 Google Cloud Console

  1. 打开 Google Cloud Console,登录后点击新建项目(名字随意,如gemini-cli
  2. 左侧菜单 → "API和服务" → "库" → 搜索Generative Language API → 启用它
  3. 回到左侧菜单 → "凭据" → "创建凭据" → "OAuth客户端ID"
    • 如果提示"配置同意屏幕",选**"外部"** → 应用名称填gemini-cli → 用户支持邮箱选自己 → 保存
    • 应用类型选"桌面应用" → 名字随意 → 创建
  4. 创建完成后点击**"下载JSON"** → 文件名改成oauth_creds.json → 保存到准备运行Docker的目录里

文件最终样子:别改内容,直接放着就行

{
  "installed": {
    "client_id": "123456...apps.googleusercontent.com",
    "project_id": "gemini-cli",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "client_secret": "GOCSPX-xxxxxxxx",
    "redirect_uris": ["http://localhost"]
  }
}

三、Docker 一键部署

oauth_creds.json所在目录执行:

docker run -d --restart unless-stopped --name geminiapi \
  -p 8899:7860 \
  -v $PWD/oauth_creds.json:/app/oauth_creds.json \
  -e GEMINI_AUTH_PASSWORD=你的自定义密码 \
  -e GOOGLE_APPLICATION_CREDENTIALS=oauth_creds.json \
  ghcr.io/gzzhongqi/geminicli2api:latest

四、首次授权(仅一次,如果是复制的本地登录的 json 文件则不需要授权)

  1. 看容器日志:
docker logs -f geminiapi
  1. 你会看到一个https://accounts.google.com/...的长链接 → 复制到浏览器打开
  2. 登录Google账号 → 点击"允许"
  3. 浏览器会跳转到localhost?code=...的空白页 → 复制完整地址,回到终端粘贴并回车
  4. 看到token saved就成功了,Ctrl+C退出

以后重启容器不再需要授权。

五、验证服务

curl http://127.0.0.1:8899/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer 你的自定义密码" \
  -d '{
        "model": "gemini-2.5-pro",
        "messages": [{"role": "user", "content": "hello"}],
        "stream": false
      }'

返回JSON就成功了!现在可以用OpenAI SDK、Cherry Studio、Lobechat等任何兼容OpenAI的工具连接http://127.0.0.1:8899

六、模型与费用(重要)

免费通道(默认)

  • 模型:Gemini 2.5 Pro(100万token上下文)
  • 额度:每分钟60次,每天1000次
  • 费用:完全免费,无需绑卡
  • 限制:Google会用你的数据"改进产品",高峰期可能降速

付费通道(商用级)

在容器内创建config.toml文件,添加API Key:

api_key = "AIza..."  # 在Google AI Studio申请

优点:无每日限制、更多模型(含多模态)、可商用

七、常见问题急救包

问题1:Connection reset by peer

症状:curl时连接被重置
原因:容器端口映射错误
解决:确认-p 8899:7860,内部端口必须是7860

问题2:容器秒退

排查命令

docker logs geminiapi --tail 20
  • 缺文件:日志显示No such file... oauth_creds.json → 检查文件路径
  • 端口占用:日志显示Address already in use → 宿主机换个端口如-p 8898:7860

问题3:云服务器无法访问

排查

# 获取容器IP
container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' geminiapi)

# 测试容器内部是否通
curl -H "Authorization: Bearer 你的密码" \
     -d '{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"hello"}]}' \
     http://$container_ip:7860/v1/chat/completions

如果容器IP能通、公网IP不通 → 云防火墙/安全组没放行TCP 8899

一键体检脚本

#!/bin/bash
echo '--- 容器状态 ---'
docker ps -a | grep geminiapi
echo '--- 最近日志 ---'
docker logs geminiapi --tail 10 2>&1
echo '--- 宿主机端口 ---'
ss -tlnp | grep 8899 || netstat -tlnp | grep 8899
echo '--- 容器内端口 ---'
docker exec geminiapi sh -c 'cat /proc/net/tcp' | grep 7860

八、进阶:docker-compose管理

创建docker-compose.yml

version: '3'
services:
  geminiapi:
    image: ghcr.io/gzzhongqi/geminicli2api:latest
    container_name: geminiapi
    restart: unless-stopped
    ports:
      - "8899:7860"
    volumes:
      - ./oauth_creds.json:/app/oauth_creds.json
      - ./token.json:/app/token.json  # 保留授权状态
    environment:
      GEMINI_AUTH_PASSWORD: "你的密码"
      GOOGLE_APPLICATION_CREDENTIALS: "oauth_creds.json"

以后用docker-compose up -d启动,docker-compose down停止。


总结:这套方案的核心是把Google免费CLI包装成标准API,既省了API Key的费用,又能享受Gemini 2.5 Pro的强大能力。如果遇到问题,90%是端口7860没映射对,剩下10%看日志就能解决。祝大家部署顺利!

已复制到剪贴板

评论 0 条

暂无评论,来种下第一颗种子。