新人逛社区的时候看到很多佬友在讨论cpa,特别是看到一个很厉害的大佬分享的提供一个自用无限使用codex的思路太强了,忍不住也想自己本地搭建一个cpa反代来缓解下token焦虑,
但是由于我是mac电脑,而且我搜了站内关于cpa结合mac电脑部署教程很少(也可能是我没看完),所以这里我也分享下在mac环境下使用docker搭建cpa配合cc switch来接入codex的部署过程,这里也算是记录一下我的搭建踩坑记录吧。希望对各位佬友们有所帮助。
首先我mac的配置跟很多佬友一样的 安装了cc switch 下载地址
给非技术朋友推广coding Agent产生的思考,中短期内,普及编程基础概念与AI工具的“黑盒化”趋势,哪个会发展快一些?
[程序员] 兄弟们你们加薪最低的比例是多少,有没有像我一样的小丑
然后魔法这里我用的也是Clash Verge 下载地址
如果是win安装或者linux的可以参考这个 #CPA小白快速上手
cpa官网文档参考:CLIProxyAPI
搭建过程
官方文档给的 Docker 启动命令是这样的:
docker run --rm -p 8317:8317 \
-v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml \
-v /path/to/your/auth-dir:/root/.cli-proxy-api \
eceasy/cli-proxy-api:latest
这里有两个挂载点,一个是配置文件 config.yaml ,一个是授权目录 auth-dir 。
这里我们一定要挂载,因为如果不挂载的话,Docker 容器重启后,我们的授权配置就丢了,又得重新授权一遍。所以这里必须把配置和授权数据挂载到本地。
准备工作首先,我在本地创建两个目录,用来存放配置文件和授权数据。
我自己电脑的Docker相关文件都放在 /Users/kaka/Docker/ 下面了,所以我就先创建两个目录:
mkdir -p /Users/kaka/Docker/CLIProxyAPI/config
mkdir -p /Users/kaka/Docker/CLIProxyAPI/auth
然后我需要获取一份官方的配置文件。这里我直接从 GitHub 下载:
curl -o /Users/kaka/Docker/CLIProxyAPI/config/config.yaml https://raw.githubusercontent.com/router-for-me/CLIProxyAPI/main/config.example.yaml
这个命令是从 CPA 的开源仓库下载官方示例配置,并保存为 config.yaml 。
这样准备工作就做好了,接下来就可以启动 Docker 容器了。
启动容器这里我有个建议哈:尽量不要直接用 docker run 的形式去运行,特别是需要挂载的容器。
因为命令相对复杂,后续如果要做什么变更,还得删除容器、重启、重新 docker run ,很麻烦。
我更推荐用 docker-compose.yml 的形式启动。这样后续做变更的时候,改一下配置文件,重新 docker compose up -d 就行了。
所以我在 /Users/kaka/Docker/CLIProxyAPI 下面新建了一个 docker-compose.yml ,内容如下:
services:
cli-proxy:
image: eceasy/cli-proxy-api:latest
container_name: cli-proxy
ports:
- "8317:8317"
- "1455:1455"
volumes:
- ./config/config.yaml:/CLIProxyAPI/config.yaml
- ./auth:/root/.cli-proxy-api
restart: always
然后在这个目录下运行:
docker compose up -d
Docker 会自动拉取最新镜像并启动容器了。

因为我之前已经安装过了,所以直接就启动成功了。可以看到容器已经 Started。
启动成功后,可以查看一下日志,确认有没有报错:
docker logs cli-proxy

这里我是通过docker ui界面查看的,我这边直接成功了,没有报错。可以看到 CPA 服务已经在 8317 端口启动了。
这样,CPA 就通过 Docker 运行起来了。
配置 config.yaml容器启动后,我们还需要简单配置一下 config.yaml 才能正常访问。
我们打开之前挂载的配置文件 /Users/kaka/Docker/CLIProxyAPI/config/config.yaml ,这里需要改三个地方:

1. allow-remote: false 改为 true
allow-remote: true
因为我们是在 Docker 容器里运行 CPA 的,容器内部是一个独立的环境。如果不开启 allow-remote ,宿主机(也就是我们的 Mac)就访问不了容器里的服务。
开启后,配合 secret-key 鉴权,既能让宿主机访问,也能保证安全。
2. secret-key: “” 设置一个密码
secret-key: "123456"
这是后台登录密码,必须设置一个。我这里为了方便设置的是 123456 ,实际使用可以设置复杂一点的。
3. auth-dir: “~/.cli-proxy-api” 改为绝对路径
auth-dir: "/root/.cli-proxy-api"
这个要改是因为我们在 docker-compose.yml 里写的挂载路径是:
- ./auth:/root/.cli-proxy-api
意思是把宿主机的 auth 文件夹,挂载到容器内的 /root/.cli-proxy-api 。
在 Docker 环境里,程序运行在容器内部,默认的 ~ 路径可能识别不准确。我们直接写成绝对路径 /root/.cli-proxy-api ,确保程序能准确读写授权文件。
如果是在 Windows 或 Linux 上直接运行(不用 Docker),就保持默认的 ~ 就行,不用改。
改完这三个地方,保存配置文件,然后重启容器:
docker compose restart
这样配置就生效了。
配置 CPA
配置cpa这里就跟其他佬分享的大差不差了 ,这里我快速过一下,其实非常简单。
1.登录后台在浏览器输入地址:
http://127.0.0.1:8317/management.html
回车后会跳转到 CPA 的登录页面。输入我们上面在配置里面配置的密码进行登录即可。
2. 认证配置
我们可以看到里面有三个密钥列表,这是 config.yaml 里初始化的默认密钥。
这里我建议把这三个默认密钥删掉,自己重新生成一个。因为默认密钥是公开的,不太安全。
删除后,我们点击右上角的"添加API密钥"按钮,然后选择生成新的密钥就行。
注意 :修改完配置后,一定要点击页面底部的"保存"按钮,否则配置不会生效。

接下来需要配置代理,因为 Codex 登录和授权都是需要魔法的。
我们打开 Clash Verge 的设置页面,找到"端口设置"。

可以看到端口号是 7897 ,这个端口号后面配置代理时要用到。
然后回到 CPA 的管理后台,打开左侧的"配置面板",找到"网络配置"。
在"代理 URL"这里填写:
http://host.docker.internal:7897

重点来了 :这里一定要用 http://host.docker.internal:7897 ,而不是 http://127.0.0.1:7897 哈。
因为我们是在 Docker 容器里运行 CPA 的,容器内部的 127.0.0.1 指向的是容器自己,而不是宿主机。要访问宿主机的服务,必须用 host.docker.internal 。
我之前根据大佬的教程配置的时候,就忘了自己是 Docker 部署,填写成 127.0.0.1 后就各种授权失败。折腾了好久才发现是这个问题。
所以这里一定要注意下哈。
另外,我们还需要开启商业模式。商业模式主要是为了安全。开启后,它会自动拦截上游模型的报错信息,防止我们的 API Key 泄漏;同时会开启最小化日志记录,保护聊天数据隐私;还会严格执行限流策略,防止接口被盗刷。
简单来说,就是给我们的 API 加一道安全锁。 配置完后我们还是点击下面的保存按钮, 然后重启 Docker 容器让配置生效:
docker compose restart
4.OAuth 授权
接下来我们就可以进行授权我们的codex账户了。
我们打开左侧的"OAuth 登录"菜单。

可以看到这里支持多个平台的授权,包括 Codex、Anthropic、Antigravity、Gemini CLI 等。
我们这里选择 Codex,点击右侧的"开始 Codex 登录"按钮。
点击后会显示一个授权链接,我们直接点击"打开链接"或者复制链接到浏览器打开。



打开后会跳转到 Codex 的授权页面,我们选择我们登陆的账号按流程进行授权就行。
授权成功后,会显示"Authentication successful!"的提示,窗口会在 5 秒后自动关闭。

这时候我们就回到 CPA 后台,打开左侧的认证文件菜单。

可以看到已经有了 Codex 的认证文件了,当然我们也可以到配额管理页面看一下。刷新下可使用额度。

因为我这个账号是free账号没有购买套餐,而且还么使用 所以会显示套餐是free 额度100%。
这样,我们就成功授权了 Codex 账号,CPA 代理也就搭建成功了。
配置 cc switch
接下来我们就可以在cc switch里面配置使用了,我们打开cc switch后切换到codex标签页这里。

我们点击右上角的加号按钮,添加新供应商。

在这个页面,我们需要填写两个关键信息:
1. API Key
这个就是我们在 CPA 后台"认证配置"里生成的那个密钥,直接复制过来就行。
2. API 请求地址
填写:
http://127.0.0.1:8317/v1
填写完后,点击"获取模型列表"按钮,如果显示"获取到n个模型"的提示。这说明 cc switch 已经成功连接到我们的 CPA 了。

我这里选择的是 gpt-5.5模型 ,因为这是目前最新的版本,开发能力最强且废话不多。我比较喜欢的模型。
然后往下滚动,找到"1M 上下文窗口"选项。勾选"1M 上下文窗口"。这样可以处理更长的上下文,对于大型项目开发很有用。

配置完后,点击右下角的"添加"按钮就成功了。然后我们回到 cc switch 的列表页面,可以看到新添加的供应商已经出现在列表里了。
我们可以点击右侧的"测试模型"按钮,验证一下配置是否正确。

可以看到提示运行正常说明配置成功了。
这样,cc switch 的配置就完成了。接下来就可以在 CLI 和编辑器里正常使用了。
踩坑记录
最后说说我在配置过程中遇到的最大的坑。
初次配置的时候,我在 OAuth 授权这一步一直失败,报错提示是:
认证失败:Failed to exchange authorization code for tokens
反复折腾了很久,授权链接能打开,账号也能选择,但就是最后一步交换 token 的时候失败。
我在站内搜了很多相关的问题,看到有佬友也遇到了类似的情况,总结下来就是代理的问题。
但我对比大佬给的解决方案,并没有看出来自己哪里配置不对。代理开了,端口也对,Clash Verge 也在正常运行。
最后在重头梳理复盘的时候,我才发现问题出在哪里:
因为我是 Docker 部署的,代理 URL 那里填写的是 http://127.0.0.1:7897。
在 Docker 容器里,127.0.0.1 指向的是容器自己,而不是宿主机。所以授权的时候,容器根本访问不到宿主机上的 Clash Verge,自然就无法走魔法,导致一直失败。
解决方案就是把代理 URL 改成:
http://host.docker.internal:7897
改完后,重启容器,再次授权,就成功了。
另外,也有人说需要开启 Clash Verge 的 TUN 模式。我这里没开也成功了,不过也算是标记一下,如果有佬友遇到类似问题,可以试试开启 TUN 模式哈。
最后再次真诚的感谢社区的各位大佬,也感谢平台给我可以分享的机会。希望有机会可以帮到各位佬友。
1 个帖子 - 1 位参与者