zyycnandClaude c6444b2bf1 ci: assert the migration freeze manifest is append-only vs the PR base
Follow-up to 720eb0c2: the manifest was self-attested — editing a released
migration and regenerating its sha256 line in the same PR passed the
checksum and membership checks, and the next release then bricked every
deployment on the startup checksum mismatch the guard exists to prevent.
On pull requests, fetch the base commit and require every line in the base
manifest to survive verbatim, so a changed hash (edit) or a dropped line
(delete) fails CI; genuinely new migrations only add lines and still pass.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-27 00:12:44 +08:00
2026-07-26 06:17:28 +08:00

Codex Proxy RS

Codex Proxy RS

基于 Rust 的多 Provider 透明 AI 网关

CI Release GHCR MIT

快速开始 · 客户端接入 · 运维 · 部署 · 接口 · 架构

Note

只支持 OpenAI Responses API,不提供 /v1/chat/completions。

能力

领域 实现
协议 OpenAI Responses JSON、SSE、WebSocket 与模型目录
Provider 固定 OpenAI、xAI 两个 Provider;各自管理 OAuth、账号、额度与模型目录
路由 Client Key 绑定 Provider、全局模型映射、会话亲和与同 Provider 安全 fallback
透明边界 OpenAI 保持 Responses 语义透明;xAI 的协议适配只驻留在 providers/xai
延续 OpenAI native/replay continuation;xAI 使用客户端提交的完整历史
管理 Client Key、账号、模型目录、设置、观测、系统更新与 OAuth
计量 模型请求 Token、费用、延迟、账号与 Provider 归因

快速开始

需要 Docker Engine 与 Docker Compose Plugin。

1. 准备

git clone https://github.com/zyycn/codex-proxy-rs.git
cd codex-proxy-rs

mkdir -p .runtime/data .runtime/logs
install -d -m 0750 .runtime/postgres .runtime/redis
cp deploy/config.example.yaml deploy/config.yaml
sudo chown "$(id -u):10001" deploy/config.yaml
chmod 0640 deploy/config.yaml

分别生成 PostgreSQL 与 Redis 密码:

openssl rand -hex 24
openssl rand -hex 24

把两个结果写入 deploy/config.yaml,并单独设置管理员初始密码:

配置 约束
store.database.password 48 位十六进制
store.redis.password 48 位十六进制
admin.default_password 至少 12 位,不能包含 $

PostgreSQL、Redis 容器和应用通过同一份 config.yaml 使用这两个基础设施密码,不需要额外 导出环境变量。管理员密码只在首次创建管理员时生效。

Linux 需要允许容器组写入运行目录:

sudo chown -R "$(id -u):10001" .runtime/data .runtime/logs
chmod 0770 .runtime/data .runtime/logs

2. 启动

docker compose -f deploy/compose.yaml config --quiet
docker compose -f deploy/compose.yaml pull
docker compose -f deploy/compose.yaml up -d --no-build
curl -i http://127.0.0.1:8080/healthz

204 No Content 表示应用、PostgreSQL 与 Redis 均可用。管理端地址: http://127.0.0.1:8080。

3. 初始化

  1. 使用 admin@cpr.local 与初始密码登录。
  2. 在账号页选择对应 Provider:OpenAI 支持 OAuth、账号文件与 Agent Identity;xAI 支持 OAuth 和兼容账号文件导入。
  3. 按需配置客户端模型到上游模型的全局映射;未命中映射的模型名原样透传。
  4. 创建 sk_... Client Key,绑定 openai 或 xai,并设置模型范围、速率与并发限制。

Important

xAI 使用 OAuth session,不支持把 xAI API Key 作为上游 credential。

Note

admin.default_password 只在首次创建管理员时生效。

完整部署、权限和密码轮换规则见 deploy/README.md。

客户端接入

配置 值
Base URL http://127.0.0.1:8080/v1
API Key 管理端创建的 sk_...
鉴权 Authorization: Bearer <client-api-key>
curl http://127.0.0.1:8080/v1/models \
  -H 'Authorization: Bearer <client-api-key>'

curl http://127.0.0.1:8080/v1/responses \
  -H 'Authorization: Bearer <client-api-key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<model-id>",
    "input": "Reply with pong.",
    "stream": false
  }'
API 路由
路由 用途
POST /v1/responses JSON 响应或 SSE Responses 流
GET /v1/responses Responses WebSocket 升级
POST /v1/responses/review review 子代理请求
GET /v1/models 当前 Client Key 可用的模型列表
GET /v1/models/catalog Codex 客户端展示用模型目录
GET /v1/models/{model_id}/info Codex 客户端展示用模型详情
GET /v1/models/{model_id} OpenAI 兼容模型详情

所有 /v1/* 路由都需要客户端 API Key。

完整的客户端与管理端路由、鉴权和 mutation 规则见 接口文档。

运维

# 升级
docker compose -f deploy/compose.yaml pull codex-proxy-rs
docker compose -f deploy/compose.yaml up -d --no-build

# 日志
docker compose -f deploy/compose.yaml logs -f codex-proxy-rs

# 从源码构建
docker compose -f deploy/compose.yaml build codex-proxy-rs
docker compose -f deploy/compose.yaml up -d

Important

.runtime/ 保存 PostgreSQL、Redis、日志、OpenAI 会话锚点和自更新状态。删除该目录会永久清除 运行状态。

Warning

跨大版本不是原地升级:数据库 schema 与配置只在同一大版本内兼容,内置一键自更新 会拒绝跨大版本目标(3.0 之前的旧版没有这道门禁,不要用旧版界面的一键更新跨大版本)。 升级到新的大版本需要全新部署(全新 .runtime/ 数据目录),并重新导入或重新授权 Provider 账号与客户端 Key。

Compose 默认只绑定 127.0.0.1。公网接入应使用 HTTPS 反向代理,转发 WebSocket upgrade 与真实客户端 IP;不要暴露 PostgreSQL 或 Redis。

维护与发布

发布仓库版本必须从干净、已同步上游的发布分支运行:

release/publish <version>

脚本会更新 release/version.yaml、创建约定提交与带注释的 v<version> tag,并原子推送分支和 tag。 不要手工修改版本后单独打 tag。

文档

S
Description
基于 Rust 的低风控、高性能、自托管多账号透明代理网关
Readme Apache-2.0
44 MiB
Languages
Rust 90%
Vue 5.7%
TypeScript 3.7%
PLpgSQL 0.4%
Ruby 0.1%