diff --git a/README.md b/README.md index 00315a417..814bcf4d0 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,33 @@
- Codex Proxy RS + Codex Proxy RS # Codex Proxy RS -**基于 Rust 的高性能 Codex 多账号网关代理** +OpenAI Responses 多账号网关。 [![CI](https://github.com/zyycn/codex-proxy-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/zyycn/codex-proxy-rs/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/zyycn/codex-proxy-rs?display_name=tag&sort=semver)](https://github.com/zyycn/codex-proxy-rs/releases) -[![Rust 1.97](https://img.shields.io/badge/Rust-1.97-000?logo=rust&logoColor=white)](https://www.rust-lang.org/) -[![Vue 3.5](https://img.shields.io/badge/Vue-3.5-42b883?logo=vuedotjs&logoColor=white)](https://vuejs.org/) -[![Vite 8](https://img.shields.io/badge/Vite-8-646cff?logo=vite&logoColor=white)](https://vite.dev/) [![GHCR](https://img.shields.io/badge/GHCR-codex--proxy--rs-2496ED?logo=docker&logoColor=white)](https://github.com/zyycn/codex-proxy-rs/pkgs/container/codex-proxy-rs) -[![MIT](https://img.shields.io/badge/License-MIT-blue.svg)](#开源许可) +[![MIT](https://img.shields.io/badge/License-MIT-blue.svg)](#许可) -[快速开始](#快速开始) · [首次使用](#首次使用) · [客户端接入](#客户端接入) · [常见问题](#常见问题) · [部署文档](deploy/README.md) +[部署](deploy/README.md) · [架构](docs/architecture.md) · [发布](https://github.com/zyycn/codex-proxy-rs/releases)
-> [!NOTE] -> 当前兼容 OpenAI Responses API,不提供 `/v1/chat/completions`。 +## 边界 -## 功能 +- OpenAI Responses:HTTP、SSE、官方 WebSocket。 +- 多账号调度、故障切换、额度与身份隔离。 +- 会话级 WebSocket 池与共享 HTTP/2 后备。 +- PostgreSQL 持久化,Redis 运行态协调。 +- Vue 管理端:账号、客户端 Key、用量、费用、延迟与错误。 -- 支持 Responses HTTP、SSE 和官方 WebSocket 请求。 -- 提供智能调度、额度重置优先、轮询和粘滞四种账号策略。 -- 某个账号遇到额度、认证、模型或传输错误时,继续尝试其他账号。 -- 在网页中管理账号、客户端 Key、模型别名和运行参数。 -- 按请求、模型、账号或客户端 Key 查看 Token、费用、缓存、TTFT、延迟和错误。 -- 支持账号 OAuth、Token 导入以及 CPR、Sub2API、CLIProxyAPI JSON 导入。 -- 可直接生成 Codex CLI 配置,或通过 deeplink 导入 CCSwitch。 +不提供 `/v1/chat/completions`。 -## 快速开始 +## 部署 -Docker Compose 是最简单的启动方式。开始前请安装 Docker Engine 和 Docker Compose Plugin。 - -### 1. 准备配置 +要求 Docker Engine 与 Docker Compose Plugin。 ```bash git clone https://github.com/zyycn/codex-proxy-rs.git @@ -48,74 +40,62 @@ sudo chown "$(id -u):10001" deploy/config.yaml chmod 0640 deploy/config.yaml ``` -分别执行三次以下命令生成密码: +分别生成 PostgreSQL、Redis 和管理员密码: ```bash openssl rand -hex 24 ``` -把结果填入 `deploy/config.yaml` 的 `database.password`、`redis.password` 和 -`admin.default_password`。PostgreSQL 与 Redis 密码必须是 48 位十六进制字符;管理员密码 -至少 12 位且不能包含 `$`。 +写入 `deploy/config.yaml`: -> [!IMPORTANT] -> 应用容器以非 root 用户 `10001:10001` 运行。Linux Bind Mount 会保留宿主机权限,因此需要允许容器用户组读取配置并写入数据和日志目录: -> -> ```bash -> sudo chown -R "$(id -u):10001" .runtime/data .runtime/logs -> chmod 0770 .runtime/data .runtime/logs -> ``` -> -> 配置文件通过 Compose `configs` 只读挂载;普通 Compose 会保留宿主机权限,因此由 -> 当前用户持有、仅向容器组开放读取权限。 -> macOS 和 Windows 的 Docker Desktop 通常也不需要调整数据目录权限。 +- `x-cpr.database.password` +- `x-cpr.redis.password` +- `x-cpr.admin.default_password` -### 2. 启动服务 +前两个值必须是 48 位十六进制字符。管理员密码至少 12 位,且不能包含 `$`。 + +Linux 需要开放容器组写权限: + +```bash +sudo chown -R "$(id -u):10001" .runtime/data .runtime/logs +chmod 0770 .runtime/data .runtime/logs +``` + +启动: ```bash 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 -``` - -启动后检查: - -```bash -docker compose -f deploy/compose.yaml ps curl -i http://127.0.0.1:8080/healthz ``` -`/healthz` 返回 `204 No Content` 即表示服务正常。管理端地址为 。 +`204 No Content` 表示应用、PostgreSQL 与 Redis 均可用。管理端位于 +`http://127.0.0.1:8080`。 -## 首次使用 +完整部署与密码轮换规则见 [deploy/README.md](deploy/README.md)。 -1. 使用 `admin@cpr.local` 和 `x-cpr.admin.default_password` 中设置的密码登录。 -2. 打开“账号”,用 OAuth、Access/Refresh Token 或 JSON 文件添加账号。 -3. 点一次连接测试,能看到模型和额度即可。 -4. 打开“API 密钥”,创建一个 `sk_...` 客户端 Key。 -5. 点击“使用密钥”复制 Codex CLI 配置,或一键导入 CCSwitch。 +## 初始化 -> [!TIP] -> `admin.default_password` 只用于首次创建管理员。已有管理员后修改该字段不会重置登录密码。 +1. 使用 `admin@cpr.local` 与配置中的初始密码登录。 +2. 添加 Codex 账号并执行连接测试。 +3. 创建 `sk_...` 客户端 Key。 +4. 复制 Codex CLI 配置,或导入 CCSwitch。 -## 客户端接入 +`admin.default_password` 只在首次创建管理员时生效。 + +## 客户端 | 配置 | 值 | | -------- | ---------------------------------------- | | Base URL | `http://127.0.0.1:8080/v1` | -| API Key | 管理端创建的 `sk_...` 客户端 Key | +| API Key | 管理端创建的 `sk_...` | | 鉴权 | `Authorization: Bearer ` | -先查询当前可用模型: - ```bash curl http://127.0.0.1:8080/v1/models \ -H 'Authorization: Bearer ' -``` -发送一个非流式 Responses 请求: - -```bash curl http://127.0.0.1:8080/v1/responses \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ @@ -126,90 +106,36 @@ curl http://127.0.0.1:8080/v1/responses \ }' ``` -
-查看全部客户端 API 路由 - -| 路由 | 说明 | -| -------------------------------- | ------------------------------- | -| `POST /v1/responses` | Responses 非流式或 SSE 流式请求 | -| `GET /v1/responses` | 官方 Responses WebSocket | -| `POST /v1/responses/review` | Review 请求 | -| `GET /v1/models` | OpenAI 格式的模型列表 | -| `GET /v1/models/catalog` | 完整模型目录 | -| `GET /v1/models/{model_id}` | 模型详情 | -| `GET /v1/models/{model_id}/info` | 模型运行信息 | +| 路由 | 用途 | +| --------------------------- | ------------------- | +| `POST /v1/responses` | JSON 或 SSE | +| `GET /v1/responses` | Responses WebSocket | +| `POST /v1/responses/review` | Review | +| `GET /v1/models` | 模型列表 | +| `GET /v1/models/catalog` | 模型目录 | 所有 `/v1/*` 路由都需要客户端 API Key。 -
- -## 管理端 - -| 页面 | 内容 | -| -------- | ---------------------------------------------------------------------- | -| 概览 | 查看服务状态、请求趋势、Token、账号池容量、请求健康和最近调用 | -| 账号 | 添加、导入、导出、测试、启停账号,以及刷新 Token 和额度 | -| API 密钥 | 创建、复制、启停或删除 Key,生成 Codex CLI 配置并导入 CCSwitch | -| 使用统计 | 按时间、模型、账号和客户端 Key 查看用量、费用、缓存、延迟和错误 | -| 系统设置 | 配置模型别名、调度策略、单账号并发、请求间隔、刷新参数和管理员 API Key | -| 系统更新 | 查看版本和发布说明;Release 版本可以在线更新并重启 | - -## 常用操作 - -### 升级 +## 运维 ```bash +# 升级 docker compose -f deploy/compose.yaml pull codex-proxy-rs docker compose -f deploy/compose.yaml up -d --no-build -``` -### 查看日志 - -```bash +# 日志 docker compose -f deploy/compose.yaml logs -f codex-proxy-rs -``` -### 从当前源码构建 - -```bash +# 从源码构建 docker compose -f deploy/compose.yaml build codex-proxy-rs docker compose -f deploy/compose.yaml up -d ``` -> [!WARNING] -> PostgreSQL、Redis、应用数据和文件日志都保存在仓库根目录 `.runtime/`。普通 -> `docker compose down` 不会删除这些绑定目录;删除 `.runtime/` 才会清除数据。升级前请备份 -> 整个目录,数据库备份中包含客户端凭据,应按敏感数据保管。 +运行状态保存在 `.runtime/`。删除该目录会清除数据库、Redis、身份密钥和日志。 -## 常见问题 +Compose 默认只绑定 `127.0.0.1`。公网接入应使用 HTTPS 反向代理,并转发 WebSocket +upgrade 与真实客户端 IP;不要暴露 PostgreSQL 或 Redis。 -### `/healthz` 返回 `503` +## 许可 -检查 PostgreSQL 和 Redis 容器是否健康: - -```bash -docker compose -f deploy/compose.yaml ps -docker compose -f deploy/compose.yaml logs postgres redis -``` - -### 容器反复重启 - -检查 `deploy/config.yaml` 的三个密码是否填写完整,以及 `.runtime/data`、`.runtime/logs` -的权限是否正确。 - -### 需要从其他设备访问 - -Compose 默认仅绑定 `127.0.0.1`。请在服务前配置 HTTPS 反向代理,并正确转发 WebSocket 升级和真实客户端 IP 请求头。不要直接暴露 PostgreSQL 或 Redis。 - -## 相关链接 - -- [发布版本](https://github.com/zyycn/codex-proxy-rs/releases) -- [容器镜像](https://github.com/zyycn/codex-proxy-rs/pkgs/container/codex-proxy-rs) -- [详细部署说明](deploy/README.md) -- [架构说明](docs/architecture.md) - -Docker 镜像支持 Linux amd64/arm64。Release 压缩包另有 macOS arm64 和 Windows amd64 版本。 - -## 开源许可 - -Codex Proxy RS 基于 [MIT License](https://opensource.org/license/mit) 开源。 +[MIT](LICENSE) diff --git a/skills/codex-proxy-rs/SKILL.md b/skills/codex-proxy-rs/SKILL.md index 07eedd413..2efc6bb72 100644 --- a/skills/codex-proxy-rs/SKILL.md +++ b/skills/codex-proxy-rs/SKILL.md @@ -1,51 +1,58 @@ --- name: codex-proxy-rs -description: Codex Proxy RS 仓库开发指南。Use when working on its Rust/Axum backend, Vue frontend, PostgreSQL/Redis storage, account-pool scheduling, Responses proxy and recovery, telemetry, Docker deployment, CI/release, configuration, debugging, or documentation. +description: Codex Proxy RS 仓库开发指南。Use when changing or auditing its Rust backend, Vue frontend, PostgreSQL/Redis state, account scheduling, Responses transport and recovery, telemetry, Docker deployment, CI, release, configuration, or project documentation. --- # Codex Proxy RS -使用此 skill 处理 Codex Proxy RS 的开发、审计、验证和发布工作。 +## 事实来源 -## 开始前 +1. 以当前源码、配置和测试为准。 +2. 非简单改动读取 `references/repo-guide.md`。 +3. 涉及目录、生命周期、存储或后台任务时读取 `docs/architecture.md`。 +4. skill 或文档与实现冲突时,在同一改动中修正。 -1. 确认当前仓库根目录是 `codex-proxy-rs`。 -2. 存在 `.codegraph/` 时,优先用 CodeGraph 定位调用链,再回到源码和测试验证。 -3. 非简单改动先阅读 `references/repo-guide.md`。 -4. 涉及目录边界、请求链路、存储归属或后台任务时,同时阅读 `docs/architecture.md`。 -5. 始终以当前源码、配置和测试为准;发现 skill 与代码不一致时,在同一改动中修正 skill。 -6. 保持改动紧贴用户请求,不擅自改变目录、部署或发布契约。 +存在 `.codegraph/` 时可先定位调用链;结论必须回到源码和测试验证。 -## 任务分流 +## 边界 -- 后端:遵循 `backend/src` 当前领域边界;测试统一放在 `backend/tests`,禁止写入 `backend/src`。 -- 存储:PostgreSQL 是权威持久化,Redis 保存运行态数据,本地数据目录保存身份密钥和更新状态。 -- 前端:使用 Vue 3 `