1. 配置详细解说
这篇文章是对 CLIProxyAPI项目 配置文件中各配置项的详细解读,供程序使用者有疑问时参阅
温馨提示:配置文件支持热重载,修改配置文件是即时生效的,不需要重启程序。
# 端口号,CLIProxyAPI运行了个HTTP服务器,需要端口号来进行访问port: 8317
# 远程管理配置,配合EasyCLI或者WebUI来使用remote-management: # 启用远程管理的开关,如果你部署在服务器上 # 那么需要设置为true,才能使用EasyCLI或者WebUI连接到CLIProxyAPI进行管理 # 如果只是本地使用API进行管理的,可以保持false不动 allow-remote: false
# 如果想使用EasyCLI或者WebUI通过API对CLIProxyAPI进行管理,必须设置Key # 如果不设置,视同关闭了API管理功能,就无法使用EasyCLI或者WebUI进行连接了 # 如果你不需要使用EasyCLI或者WebUI进行管理,可以留空 secret-key: ""
# 认证文件存放目录,用于存放Gemini CLI、Gemini Web、Qwen Code、Codex的认证文件# 默认设置,是在你当前账户目录下的.cli-proxy-api文件夹,适配Windows和Linux环境# 程序首次启动时会自动创建该文件夹# Windows下默认为C:\Users\你的用户名\.cli-proxy-api# Linux下默认为/home/你的用户名/.cli-proxy-api# 如果在Windows环境下使用非默认位置,需要参照这样的格式修改填写"Z:\\CLIProxyAPI\\auths"auth-dir: "~/.cli-proxy-api"
# 是否在日志中启用Debug信息,默认不启用,需要作者配合排错的时候打开就行debug: false
# 是否将日志重定向到日志文件中# 默认启用,日志会保存在程序目录下的logs文件夹中# 如果关闭的话,会在控制台显示日志logging-to-file: true
# 开关使用统计,默认启用# 需要使用API来查看使用量,可以用EeasyCLI或者WebUI来查看usage-statistics-enabled: true
# 如果你要使用代理,那么需要进行以下的设置,支持socks5/http/https协议# 按照这样的格式"socks5://user:pass@192.168.1.1:1080/"填写proxy-url: ""
# 当请求碰到403, 408, 500, 502, 503, 504这些错误码的时候,程序自动重试请求的次数request-retry: 3
# 模型受到限制之后的处理行为quota-exceeded: # 多账号轮询的核心配置 # 设置为true时,例如一个账号触发了429,程序会自动切换到下一个账号重新发起请求 # 设置为false时,程序会把429的错误信息发给客户端,结束当前请求 # 也就是说,当设置为true时,只要轮询的账号里至少有一个号是正常的,客户端这里就不会报错 # 而设置false时,则需要客户端来进行重试或中止操作 switch-project: true # Gemini CLI独占配置,适用于Gemini 2.5 Pro和Gemini 2.5 Flash模型 # 当正式版配额用完之后,会自动切换到Preview模型,保持开启即可 switch-preview-model: true
# 各种AI客户端访问CLIProxyAPI所需要填写的Key,就在这里设置,和后边的各种Key不要弄混淆了# 通俗点讲,这里的Key是CLIProxyAPI作为服务器所需要设置的# 后边的各种Key是CLIProxyAPI作为客户端去访问服务器所需要的api-keys: - "your-api-key-1" - "your-api-key-2"
# Gemini的官方API Key,如果你已经配了Gemini CLI,那么不建议填# 因为Gemini CLI是满血的,而官方Key是残血的,填了的话会一起参与轮询generative-language-api-key: - "AIzaSy...01" - "AIzaSy...02" - "AIzaSy...03" - "AIzaSy...04"
# Codex的API Key,各种中转站提供的Codex的key和base-url参数,填在这里就可以接入了codex-api-key: - api-key: "sk-atSM..." base-url: "https://www.example.com"
# Claude的API Key,使用官方Key的时候,不要填base-url,使用第三方中转的,填base-urlclaude-api-key: - api-key: "sk-atSM..." - api-key: "sk-atSM..." base-url: "https://www.example.com"
# 各种OpenAI兼容的都可以在这里接入,不多解释了openai-compatibility: - name: "openrouter" base-url: "https://openrouter.ai/api/v1" api-keys: - "sk-or-v1-...b780" - "sk-or-v1-...b781" models: # OpenAI兼容供应商提供的模型名称 - name: "moonshotai/kimi-k2:free" # 模型别名 alias: "kimi-k2"
# Gemini Web的相关设置,可以忽略掉,用默认值就行gemini-web: # 此选项用于状态化会话,由于Gemini Web是逆向的 # 因而如果设置false的话,每条发送的消息程序会携带之前的所有上下文发送给服务器 # 设置true的话,程序会按客户端发送的报文,根据最长匹配寻找之前的会话 # 如果已有会话,则只发送当前的消息,而不携带所有上下文 # 如果使用Nano Banana模型,请务必保持此选项为true,否则无法进行连续会话修图 # 如果还有不理解的,可以开始切换开关后,在Gemini Web官方网页查看效果 context: true # 最大发送的字符,保持为默认值即可 max-chars-per-request: 1000000 # 程序默认超出最大字符,会进行截断,分批发送,截断时,会在报文最后附加一条让模型等待的消息 # 如果设置true,则不会在报文最后附加这条消息 # 建议保持false即可,因为只有截断才会附加消息,非截断情况是不会附加的 disable-continuation-hint: false # 编程模式,不用来进行编程,请不要启用,使用Nano Banana模型,请务必关闭 # 设置ture,会有以下效果 ## 使用系统自带的编码助手Gem进行对话 ## 对话时如有思考内容,会把思考内容并入正文 ## 在报文最后附加一条关于XML的消息 code-mode: false2. 项目介绍 +Qwen 实战
CLIProxyAPI 是一款使用 Go 语言编写的开源 AI 代理工具。也许是因为名字朴实无华,许多人可能对它还很陌生。在遇到它之前,为了能“白嫖” Gemini 模型,我曾先后折腾过 AIStudioProxyAPI、AIStudio-Build-Proxy、Gemini-FastAPI 等多款反代工具,但它们或多或少都有些不尽如人意的地方。
直到我发现了 CLIProxyAPI 并深度使用了几个月,我可以肯定地说:无论是在性能、功能还是适用性上,它都是我用过最出色的 AI 代理工具,没有之一。称之为“神器”也毫不为过。
官方仓库地址:https://github.com/router-for-me/CLIProxyAPI
它究竟能做什么?
| 功能特性 | 支持模型 |
|---|---|
| 为 CLIm 模型提供 OpenAI/Gemini/Claude/Codex 兼容的 API 端点 | gemini-2.5-pro |
| 新增 OpenAICodex(GPT 系列)支持(OAuth 登录) | gemini-2.5-flash |
| 新增 ClaudeCode 支持(OAuth 登录) | gemini-2.5-flash-lite |
| 新增 QwenCode 支持(OAuth 登录) | gemini-2.5-flash-image-preview |
| 新增 GeminiWebHost 支持(通过 Cookielogin) | gpt-5 |
| 支持流式与非流式响应 | gpt-5-codex |
| 函数调用/工具支持 | claude-opus-4-1-20250805 |
| 多模态输入(文本、图片) | claude-opus-4-20250514 |
| 多账户支持与轮询负载均衡(Gemini、OpenAI、Claude 与 Qwen) | claude-sonnet-4-5-20250929 |
| 简单的 CLI 身份验证流程(Gemini、OpenAI、Claude 与 Qwen) | claude-sonnet-4-20250514 |
| 支持 GeminiAIStudioAPI 密钥 | claude-3-7-sonnet-20250219 |
| 支持 GeminiCLIm 多账户轮询 | claude-3-5-haiku-20241022 |
| 支持 ClaudeCode 多账户轮询 | qwen3-coder-plus |
| 支持 QwenCode 多账户轮询 | qwen3-coder-flash |
| 支持 OpenAICodex 多账户轮询 | |
| 通过配置接入上游 OpenAI 兼容提供商(例如 OpenRouter) | |
| 可复用的 GoSDK |
简单来说,CLIProxyAPI 的核心优势包括:
-
无需安装 Gemini CLI,即可将其授权转换为通用的 API Key,从而在任何应用中调用功能完整的 Gemini 2.5 Pro、Gemini 2.5 Flash、Gemini 2.5 Flash Lite 模型。当正式版模型配额用尽后,它会自动切换到 Preview 模型(如
gemini-2.5-pro-preview-05-06),基本能用足每天 1000 次的调用配额,轻松实现“Gemini 自由”。 -
无需安装 Qwen Code,即可将其授权转换为通用的 API Key,在任何地方调用 Qwen3 Coder Plus、Qwen3 Coder Flash 模型,实现“Qwen3 Coder 自由”。
-
无需安装 Codex,即可将其授权转换为通用的 API Key,在任何地方调用 GPT-5、GPT-5-Codex 模型。尤其在目前可以免费开设 Team 账户的活动下,轻松实现“GPT 自由”。
-
将 Gemini 网页版转换为 API Key,在任何地方调用 Nano Banana 等网页版模型(需客户端支持。据网友分享,免费版 Gemini 网页账户每天可调用约 100 次,而 Gemini Pro 用户则高达 1000 次)。
-
强大的负载均衡能力。CLIProxyAPI 支持将不同来源(无论是 API Key 还是 OAuth 授权)的多个账户整合在一起进行负载均衡轮询,这意味着你可以轻松地将调用配额翻倍。
-
极低的资源消耗。值得一提的是,该程序对系统资源的消耗极低。程序本身仅 10MB 左右,启动时内存占用不到 10MB,长时间峰值内存占用也仅有 100MB 左右,几乎任何电脑都能流畅运行。
程序的使用非常简单。官方不仅提供了适用于各平台的二进制文件和 Docker 部署方式,还提供了 EasyCLI 和 WebUI,对新手十分友好。所有设置均通过 config.yaml 配置文件管理,且支持热重载——修改配置后即时生效,无需重启程序。
实战教程:转换 Qwen Code 为 API Key
下面,我们以在 Windows 平台下将 Qwen Code 转换为 API Key 为例,演示 CLIProxyAPI 的具体使用方法。
-
下载并解压
首先,从官方仓库下载预编译的可执行文件,并将其解压到任意文件夹。在本例中,我将其放在
Z:\CLIProxyAPI目录下。我们只需要用到图中的两个文件。
-
编辑配置文件
将
config.example.yaml重命名为config.yaml,然后用文本编辑器打开,仅需保留并修改以下基础配置项:port: 8317# 文件夹位置请根据你的实际情况填写auth-dir: "Z:\\CLIProxyAPI\\auths"request-retry: 3quota-exceeded:switch-project: trueswitch-preview-model: trueapi-keys:# Key请自行设置,用于客户端访问代理- "ABC-123456" -
获取授权
在
CLIProxyAPI目录下打开终端,输入cli-proxy-api --qwen-login后回车。程序会自动打开浏览器,请在浏览器中登录你的 Qwen 账户并完成授权。
完成授权后,回到终端,程序会尝试获取认证信息。成功后,会要求输入邮箱或昵称(如图中红色箭头所示)。这只是一个用于标识账户的别名,可以随意填写。我这里填的是
qwen-example。回车后,可以看到认证文件已成功生成,并保存到了配置文件auth-dir指定的位置。
提示:如果系统没有自动弹出浏览器,请不必担心。手动复制终端中红框标出的网址,粘贴到浏览器中打开即可完成授权。
-
启动代理服务
以上步骤完成了账户认证。现在,我们来正式启动代理服务。直接双击可执行文件 (
cli-proxy-api.exe),出现以下窗口即代表启动成功。
-
在客户端中配置和测试
至此,一切准备就绪。下面我们使用 Cherry Studio 来进行测试。
- 在 Cherry Studio 中添加一个新的模型提供商。

- 模型提供商类型可以选择除 Azure 之外的任意类型。这里我们以
OpenAI-Response为例,供应商名称可自定义,例如CLIProxyAPI。

- API 密钥:填写我们在
config.yaml中自己设置的 Key,本例中为ABC-123456。 - API 地址:填写我们本地服务的地址和端口。还记得配置文件中的端口号
8317吗?这里我们填入http://127.0.0.1:8317。

- 点击“管理模型”,你就可以看到通过代理加载的 Qwen Code 模型了。

- 添加模型后,我们来测试一下。

可以看到,模型已成功返回消息。整个配置过程是不是很简单?
2. Codex 和 Gemini CLI
在之前的文章中,我们通过在 CLIProxyAPI 上的简单配置,成功将 Qwen Code 转换成了 API 并在 Cherry Studio 中调用。相信读到这里的你,已经对这款工具的强大功能和便捷性有了初步认识。
在本篇教程中,我们将继续探讨,并把 Codex 和 Gemini CLI 也集成进来。
需要说明的是,本次操作所使用的配置文件与上一篇 Qwen 教程中的是同一个
port: 8317
# 文件夹位置请根据你的实际情况填写auth-dir: "Z:\\CLIProxyAPI\\auths"
request-retry: 3
quota-exceeded: switch-project: true switch-preview-model: true
api-keys:# Key请自行设置,用于客户端访问代理- "ABC-123456"配置 Codex
首先,我们来配置 Codex。Codex 的 OAuth 授权流程与之前的 Qwen 非常相似。在终端命令行中输入 cli-proxy-api --codex-login,系统会自动打开 ChatGPT 的授权页面,请使用你的 ChatGPT 账号登录。

如果是 ChatGPT Team 账号,则需要选择对应的工作空间。授权成功的页面如下:

回到终端命令行,可以看到认证文件已成功生成并保存。

如果你有多个 ChatGPT 账号,只需重复几次同样的操作即可。
配置 Gemini CLI
接下来,我们来添加 Gemini CLI。Gemini CLI 是完全免费的,但有些用户在配置过程中可能会遇到问题。因此,在这里我将从创建 Google Cloud 项目开始,一步步带你完成整个授权认证过程。
首先,请用你的 Google 账号登录 https://console.cloud.google.com/ 。登录成功后,点击图中所示位置:

点击“新建项目”。

给项目命名后,点击“创建”。

按照第一步的位置,选择刚刚创建的项目。

先把红框内的项目 ID 复制下来备用,然后点击左上角箭头所指的位置。

依次点击“API 和服务” - “已启用的 API 和服务”。

点击“启用 API 和服务”。

在图示的搜索框内输入 cloudaicompanion.googleapis.com,然后点击搜索到的“Gemini for Google Cloud”。

点击“启用”。

至此,Google Cloud 前期的准备工作就全部完成了。现在,我们回到 CLIProxyAPI 程序所在的目录,打开终端命令行,输入 cli-proxy-api --login --project_id [你的项目ID]。例如,在本例中就是 cli-proxy-api --login --project_id mimetic-planet-473413-v7。
随后会弹出授权页面,请使用刚才完成准备工作的 Google 账号登录。

验证成功的页面如下:

回到终端命令行,可以看到认证文件已被成功保存。

有些读者可能会好奇,为什么 Codex 和 Gemini CLI 在验证成功后的命令行信息,与 Qwen 有所不同?答案是,在验证 Codex 和 Gemini CLI 时,CLIProxyAPI 会在本地监听一个特定端口以接收回调,因此验证总是一次成功。而在验证 Qwen 时,CLIProxyAPI 会直接从 Qwen 的验证服务器来获取授权信息,因此最多会有 60 次的尝试请求。
验证模型
我们再来验证一下刚才通过 OAuth 添加的 Codex 和 Gemini CLI。在 Cherry Studio 中添加模型,如下所示:

试试 Gemini-2.5-Pro:

再来问问 GPT-5-Codex:

至此,所有模型都已成功集成。你学会了吗?
3. NanoBanana 实战
经过前两期的实战,我们已成功在 CLIProxyAPI 上集成了 Qwen Code、Gemini CLI 和 Codex。本期内容将介绍如何通过添加 Gemini Web 的 Cookie,使 CLIProxyAPI 支持 NanoBanana 模型。
Gemini 的 NanoBanana 模型因其出色的图像处理能力而备受赞誉。然而,Google 并未提供该模型的免费 API。而现在,使用 CLIProxyAPI 之后,我们就可以通过集成 Gemini Web,从而以免费 API 的形式使用 NanoBanana 啦。
我们有两种方法可以获取认证信息:
第一种方法
首先,使用您的 Google 账号登录 Gemini 官网。据了解,普通账号每天有 100 次图像生成配额,Pro 账号则有 1000 次。登录成功后,在浏览器中按 F12 打开开发者工具,并切换到“网络” (Network) 选项卡。

在筛选框中输入 List,然后将鼠标悬停在您的用户头像上。片刻之后,下方列表中应出现 ListAccounts 的条目。如果未出现,请刷新页面重试。

点击 ListAccounts,在“标头” (Headers) -“请求标头” (Request Headers) 中找到 Cookie,并完整复制其值。

回到 CLIProxyAPI 程序所在的目录,打开终端或命令行,输入命令 cli-proxy-api --gemini-web-auth。根据提示,粘贴我们刚才复制的 Cookie 值并回车,即可看到验证成功的消息,Cookie 已被自动保存。

第二种方法
如果您使用的是 macOS 系统,或者第一种方法认证失败,那么可能需要手动输入 __Secure-1PSID 和 __Secure-1PSIDTS 的值。请切换到“应用” (Application) 选项卡,并依次复制图示中的这两个值。


在命令行执行验证时,根据提示手动填入这两个值即可完成验证。

验证步骤
接下来我们进行验证。需要注意的是,目前程序仅支持通过 OpenAI 兼容接口和 Gemini 原生接口进行文生图或图文生图的操作。因此,我们之前在 Cherry Studio 中设置的提供商类型 OpenAI Response 需要修改为 OpenAI。

添加模型 NanoBanana (即 gemini-2.5-flash-image-preview)。

现在,在 Cherry Studio 中测试一下吧!

完美地满足了我们的要求,尽情享受“香蕉”吧!
注意事项
- 现阶段请避免在
CLIProxyAPI中添加多个 Gemini Web 账户。因为当存在多个账户时,程序会轮询调用,这可能会破坏会話的连续性,导致请求失败。 - 在
Cherry Studio中,切勿在OpenAI Response提供商类型下添加NanoBanana模型。已知Cherry Studio在此情况下存在 Bug,会导致程序崩溃。
4. 中转转发接入
在前几篇文章中,我们已经成功通过 OAuth 或 Cookie 方式接入了 Qwen、Codex、Gemini CLI 和 Gemini Web。在本篇教程中,我们将更进一步,学习如何便捷地将各类 AI 中转服务接入 CLIProxyAPI。
首先,让我们回顾一下之前使用的配置文件:
port: 8317
# 文件夹位置请根据你的实际情况填写auth-dir: "Z:\\CLIProxyAPI\\auths"
request-retry: 3
quota-exceeded: switch-project: true switch-preview-model: true
api-keys:# Key请自行设置,用于客户端访问代理- "ABC-123456"初次配置后,我们一直没有改动过它。现在,是时候对这个文件进行一些扩展了。
我们先来添加一个 Claude 的中转服务。为此,我们首先需要获取该服务的 base-url,这个地址通常可以在相应服务商的官方文档或教程中找到。
以 88code 为例,在其官方教程中可以找到如下信息:

从图中可以获知,88code 中转 Claude 服务的 base-url 是 https://www.88code.org/api。
我们在配置文件中加入 claude-api-key 字段:
port: 8317auth-dir: "Z:\\CLIProxyAPI\\auths"request-retry: 3quota-exceeded: switch-project: true switch-preview-model: trueapi-keys:- "ABC-123456"
claude-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/api"同样地,88code 也提供了 Codex 服务。我们依照相同的方法,找到其 base-url:

然后,在配置文件中添加 codex-api-key 字段:
port: 8317auth-dir: "Z:\\CLIProxyAPI\\auths"request-retry: 3quota-exceeded: switch-project: true switch-preview-model: trueapi-keys:- "ABC-123456"
claude-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/api"
codex-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/openai/v1"对于其他服务商,也可以采用类似的方式进行添加。例如,我这里还有几个 PackyCode 的 Codex API Key,我将它们一并加入配置:
port: 8317auth-dir: "Z:\\CLIProxyAPI\\auths"request-retry: 3quota-exceeded: switch-project: true switch-preview-model: trueapi-keys:- "ABC-123456"
claude-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/api" - api-key: "sk-4cXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://api.packycode.com" - api-key: "sk-HpYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" base-url: "https://api.packycode.com"
codex-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/openai/v1" - api-key: "fk-4cXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://oai-api.fkclaude.com/v1" - api-key: "sk-amXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://codex-api.packycode.com/v1" - api-key: "sk-sTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://codex-api.packycode.com/v1"请注意,即使是同一服务商、使用相同 base-url 的多个 api-key,也需要为每一条 api-key 单独声明 base-url,不可省略。
此外,CLIProxyAPI 还支持接入任何兼容 OpenAI 接口的供应商,这需要通过 openai-compatibility 字段来配置。在此不再赘述具体步骤,大家可以直接参考下方的配置文件示例进行配置:
port: 8317auth-dir: "Z:\\CLIProxyAPI\\auths"request-retry: 3quota-exceeded: switch-project: true switch-preview-model: trueapi-keys:- "ABC-123456"
claude-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/api"
codex-api-key: - api-key: "88_XXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://www.88code.org/openai/v1" - api-key: "fk-4cXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://oai-api.fkclaude.com/v1" - api-key: "sk-amXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://codex-api.packycode.com/v1" - api-key: "sk-sTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" base-url: "https://codex-api.packycode.com/v1"
openai-compatibility: - name: "openrouter" base-url: "https://openrouter.ai/api/v1" api-keys: - "sk-or-v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "sk-or-v1-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" models: - name: "deepseek/deepseek-chat-v3.1:free" alias: "deepseek-v3.1" - name: "deepseek/deepseek-r1-0528:free" alias: "deepseek-r1-0528" - name: "x-ai/grok-4-fast:free" alias: "grok-4-fast" - name: "groq" base-url: "https://api.groq.com/openai/v1" api-keys: - "gsk_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" models: - name: "deepseek-r1-distill-llama-70b" alias: "deepseek-r1-70b"可以看到,openai-compatibility 的配置逻辑与之前略有不同:同一供应商(Provider)下的所有 api-key 共享同一个 base-url。
至此,配置就完成了。剩下的模型连通性验证,就留给各位读者自行测试了。
5. Docker 服务器部署
在之前的系列文章中,我们介绍了如何在本地电脑上使用 CLIProxyAPI。本文将更进一步,讲解如何在服务器上通过 Docker 完成部署。
一、 环境准备
在开始之前,请确保你拥有一台可用的 VPS(虚拟专用服务器)。本文将以 Debian 13 系统为例进行演示。
同时,请确保你的服务器上已经安装了 Git 和 Docker。
如果尚未安装,可以通过以下命令进行安装:
1. 安装 Git
apt update && apt install git -y2. 安装 Docker
可以使用官方提供的一键脚本进行安装:
bash <(curl -fsSL https://get.docker.com)二、 部署 CLIProxyAPI
准备工作就绪后,请依次执行以下命令来克隆项目并初始化配置。
git clone https://github.com/luispater/CLIProxyAPI.gitcd CLIProxyAPIcp config.example.yaml config.yaml
此时,我们可以打开 config.yaml 文件进行编辑。本教程将采用以下最小化配置作为示例:
port: 8317
# 文件夹位置请根据你的实际情况填写auth-dir: "~/.cli-proxy-api"
request-retry: 3
quota-exceeded: switch-project: true switch-preview-model: true
api-keys:# Key 请自行设置,用于客户端访问代理- "ABC-123456"请注意: 当使用 Docker 部署时,建议保持 auth-dir 的默认设置,无需修改。
编辑完 config.yaml 文件后,我们执行以下命令来执行 Docker 容器构建脚本。
bash docker-build.sh脚本会提供两个选项:

- 选项 1: 直接使用 Docker Hub 上的预构建镜像运行 (
docker compose up -d),速度快。 - 选项 2: 在服务器本地编译镜像然后再运行,适合需要自定义修改的场景。
在本教程中,我们选择选项 1,以快速启动服务,稍待片刻,服务便成功启动了。

三、 查看日志
尽管脚本提示使用 docker compose logs -f 查看日志,但由于程序默认会将日志重定向到文件,因此实时查看日志需要使用以下命令:
tail -f ./logs/main.log四、 添加 OAuth 认证
现在程序已经在正常运行了。如果需要添加中转 Key,只需按照之前文章介绍的方法编辑配置文件即可,这一次,我们重点讲解如何通过 OAuth 添加授权认证文件。
步骤一:在服务器端生成认证链接
以添加 Codex 为例,请在项目根目录下执行以下命令:
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --codex-login程序会生成一段用于建立 SSH 隧道的命令,请复制箭头处 ssh 开头的整段命令。

步骤二:在本地建立 SSH 隧道
在你自己电脑的终端或命令行工具中,粘贴刚才复制的命令。

特别注意: 需要将命令中 -p 参数后的端口号(示例中的 22)替换为你 VPS 的实际 SSH 端口。
回车后输入服务器的 SSH 登录密码。成功连接后,请保持此终端窗口不要关闭,然后回到刚才操作服务器的终端上。

步骤三:通过浏览器完成授权
复制服务器终端上箭头指向的链接

在你本地电脑的浏览器中打开这个链接,用你的 ChatGPT 账号登录并授权

授权成功后,会看到如下画面:

同时,服务器的终端上也会显示认证文件已成功保存

至此,Codex 的认证就全部完成了。对于 Gemini-CLI 和 Claude 等其他需要 OAuth 授权的服务,操作流程完全相同。
五、 原理总结
最后,我们来总结一下这个远程 OAuth 认证流程的原理:
Gemini-CLI、Claude 和 Codex 的 OAuth 认证都需要一个“回调”(Callback)过程来接收授权令牌。由于安全限制,服务商的回调地址通常强制设置为 localhost。
当我们在 Docker 容器中执行授权命令时,容器内没有浏览器环境,我们必须在本地电脑上打开授权网页。但授权成功后,浏览器会尝试访问 localhost,这只会访问到我们自己的电脑,而无法将令牌传递给远在服务器上的程序。
SSH 隧道(SSH Tunnel) 的作用就是搭建一座桥梁:它将我们本地电脑的某个端口(例如 1455)上的所有网络请求,通过加密的 SSH 连接,转发到服务器的同一端口上。这样,当浏览器访问本地的 http://localhost:1455 时,请求实际上被转发给了服务器上正在监听 1455 端口的 CLIProxyAPI 程序,从而巧妙地完成了远程认证。
作为 SSH Tunnel 的替代方案,你也可以在浏览器跳转到 localhost 回调链接时,手动将其中的 localhost 替换为你服务器的 IP 或域名。不过,请注意,这种方法需要你正确配置服务器的防火墙或反向代理,以确保回调请求能够被正确接收,否则可能会认证失败。
六、 客户端使用
完成以上配置后,在客户端使用时,只需将请求的端点(Endpoint)地址指向你服务器的 IP:端口(例如 http://YOUR_SERVER_IP:8317)即可,其余操作与本地使用完全相同。
至此,你已经掌握了在服务器上通过 Docker 部署 CLIProxyAPI 的完整流程,快去享受 AI 带来的便利吧!
如果在配置或使用过程中遇到任何问题,欢迎加入官方社群进行交流咨询,作者很热情很 Nice 哟~
[!note] 转载自@hkfires 发布于 9/29/2025, 11:09:36 AM,编辑于 9/29/2025, 11:13:04 AM