自建 AI API 中转站 — 一台海外 VPS + ChatGPT Plus,搭一个属于自己的 OpenAI 反代 + 网关。
¥99/年 VPS + ¥100/月每个 Plus 账号(按需 N 个),做完后 Codex CLI / OpenCode / Cherry Studio / Cursor 全能用。
把"ChatGPT Plus 网页订阅"变成"标准 OpenAI API",部署到自己海外 VPS 上 24/7 运行。包含:
- 2 个反代(直接对接 AI 服务):
codex-proxy/chatgpt2api - 1 个网关(聚合 + 计费 + 用户体系):
new-api - 2 个工具(衍生功能):
image-gen/codex-log-viewer
| 自建 | 买中转站 | |
|---|---|---|
| 固定成本 | VPS ¥99/年 + Plus ¥100/月×N 个 | $20-100/月起 |
| Token 单价 | 几乎零(Plus 套餐内,按账号数线性扩容) | 按量计费,商业溢价 |
| Prompt Caching | ✅ 支持(codex-proxy 内置) | 多数中转站不支持 Responses API |
| 数据隐私 | 自己机器,自己 log | 经过第三方 |
| 可控性 | 完全可控 + 可定制 | 取决于服务商 |
| 学习价值 | ⭐⭐⭐⭐⭐ Docker / Nginx / OAuth | ⭐ |
| 端口 | 服务 | 类型 | 用途 | 续期 |
|---|---|---|---|---|
| 8080 | codex-proxy | 反代 | Codex CLI / OpenCode,Responses API + prompt caching | OAuth 自动 |
| 3002 | chatgpt2api | 反代 | ChatGPT Plus 文本 + GPT-Image-2 出图 | 手动续 token(~10 天) |
| 3001 | new-api | 网关 | 多渠道聚合、Token 计费、用户管理 | - |
| 8088 | image-gen | 工具 | GPT-Image-2 双号池并行出图 Web | 复用 chatgpt2api |
| 8089 | codex-log-viewer | 工具 | codex-proxy 调用日志面板 | - |
┌─ 反代: codex-proxy (:8080) ─────────┐
│ Codex CLI 专用 │
│ OAuth 自动续期 + Responses API │
用户/客户端 ──→ Nginx ┤ ├──→ OpenAI
├─ 反代: chatgpt2api (:3002) ─────────┤
│ ChatGPT Plus 文本 + 出图 │
│ 手动续 access_token (~10 天) │
├─ 网关: new-api (:3001) ──────────────┤
│ 统一入口 / 计费 / 聚合两个反代 │
├─ 工具: image-gen (:8088) │
└─ 工具: codex-log-viewer (:8089) │
- 一台海外 VPS(推荐 2C4G、Ubuntu 22.04+,¥99/年起)
- 一个域名(解析到 VPS,约 ¥60/年)
- N 个 ChatGPT Plus 账号(每个 ¥100/月,按使用强度决定数量)
- 本机 Linux/macOS/WSL(Windows 用 Git Bash 也行)
Plus 账号数量怎么估?
| 场景 | 推荐账号数 | 说明 |
|---|---|---|
| 个人自用(IDE 编码、问答) | 1 个 | 一般够用 |
| 1-3 人小组共用 | 2 个 | 号池轮询,单号被限流时切换 |
| 多人团队 / 学员共用 | 3-5 个 | 并发高、出图多需要更多冗余 |
| 重度使用(持续脚本/批量) | 5+ 个 | 避免单号触发风控 |
单 Plus 账号触发限流时,整个号池会自动切换到下一个账号;账号越多稳定性越高。
# 1. 克隆仓库
git clone https://github.com/cheer932041235/api-proxy-server.git
cd api-proxy-server
# 2. 复制环境变量并填入你的值
cp .env.example .env
vim .env # 改 VPS_HOST / DOMAIN / 各种密码
# 3. 首次安装(在新 VPS 上跑一次)
make setup # 装 Docker / Nginx / SSL / 部署所有容器
# 4. 后续更新
make deploy # 同步本地修改 + 重启对应服务
make logs # 看日志
make status # 查状态详细步骤见 docs/00-quickstart.md。
| 端点 | 用途 | 鉴权 |
|---|---|---|
https://${DOMAIN}/v1 |
New-API 主入口 | API Key |
https://${DOMAIN}/codex/v1 |
Codex Proxy(绕过 New-API) | ${CODEX_PUBLIC_KEY} |
https://${DOMAIN}/img/v1 |
chatgpt2api 直通 | ${CHATGPT2API_AUTH_KEY} |
https://${DOMAIN}/studio/ |
配图工具 | 答题/密码解锁 |
https://${DOMAIN}/codex/log/ |
日志面板 | URL token |
| 文档 | 内容 |
|---|---|
| docs/00-quickstart.md | ★ 30 分钟跑通 |
| docs/01-architecture.md | 完整架构 + 数据流 + 端口表 |
| docs/02-services.md | 每服务详情(容器、数据路径) |
| docs/03-operations.md | 日常运维(重启、日志、备份) |
| docs/04-token-renewal.md | ★ 续期 SOP |
| docs/05-troubleshooting.md | ★ 故障速查 |
| docs/06-network-tuning.md | ★ 链路稳定性 |
每个服务的部署细节在 services/<服务名>/README.md。
api-proxy-server/
├── README.md ← 本文件
├── LICENSE ← MIT
├── Makefile ← 顶层入口(make help/setup/deploy/...)
├── PLAN.md ← 项目资产清单 + 路线图
├── TODO.md ← 待办与变更日志
├── .env.example ← 环境变量模板(.env 由你创建,已 gitignore)
├── .gitignore ← 保护 .env / local.secrets.md / homepage 等
│
├── docs/ ← 完整文档
│ ├── 00-quickstart.md ← ★ 30 分钟跑通指南
│ ├── 01-architecture.md ← 架构 + 数据流 + 端口表
│ ├── 02-services.md ← 每服务详情
│ ├── 03-operations.md ← 日常运维
│ ├── 04-token-renewal.md ← Token 续期 SOP
│ ├── 05-troubleshooting.md ← 故障速查
│ └── 06-network-tuning.md ← 链路稳定性调优
│
├── services/ ← 各服务文档与源码
│ ├── codex-proxy/ ← Codex CLI 反代(用上游公开镜像,仅 README)
│ ├── chatgpt2api/ ← ChatGPT Plus 反代(用上游公开镜像,仅 README)
│ ├── new-api/ ← API 网关(用上游公开镜像,仅 README)
│ ├── image-gen/ ← 配图工具(自建源码 + Dockerfile)
│ └── codex-log-viewer/ ← 日志面板(自建源码 + systemd unit)
│
├── nginx/
│ ├── api.example.com.conf.template ← Nginx 模板(用 envsubst 渲染)
│ └── rendered/ ← 渲染产物(gitignore)
│
└── scripts/
├── README.md ← 脚本目录总览
├── setup.sh ← 首次安装(VPS 准备 + SSL + cron)
├── deploy.sh ← 部署/重建 Docker 容器
├── render-nginx.sh ← 渲染 nginx 配置
├── daily-backup.sh ← 每日备份(cron)
├── daily-report.sh ← 每日邮件报告(cron)
├── proxy-health-check.py ← 账号健康检查 + 告警邮件
├── dedup-accounts.py ← chatgpt2api 号池去重
├── fix-docker-iptables.sh ← Docker iptables 修复
├── fix-docker-iptables.service ← 上述脚本的 systemd unit
├── codex-log-sync/ ← Codex 日志同步到 New-API SQLite
└── sanitize.ps1 ← 敏感词批量脱敏工具(一次性,保留备用)
| 项目 | 作用 | 镜像 |
|---|---|---|
| chatgpt2api | ChatGPT Plus 网页反代 | ghcr.io/basketikun/chatgpt2api:latest |
| New-API | API 管理/分发网关 | calciumion/new-api:latest |
| codex-proxy | Codex CLI 反代 | ghcr.io/icebear0828/codex-proxy:latest |
| Let's Encrypt + certbot | SSL 证书自动续期 | - |
| Nginx | 反向代理 + SSL 终端 | - |
image-gen 和 codex-log-viewer 是本仓库自带源码,MIT 协议。
- 把
.env中所有ChangeMe_*改成强随机值 - 不要把
.env提交到 GitHub(已在.gitignore) - VPS 防火墙只放行必要端口(22/80/443,其他端口仅 localhost)
- 定期检查
docker logs中的异常请求
- access_token 泄露 = 账号被盗
- 单 IP 大量请求可能触发 OpenAI 风控
- 号池越多越稳定(建议 ≥2 个 Plus)
MIT — 自由使用,欢迎 PR。