一个用 Rust 编写的 Anthropic Claude API 兼容代理服务,将 Anthropic API 请求转换为 Kiro API 请求。
本项目仅供研究使用, Use at your own risk, 使用本项目所导致的任何后果由使用人承担, 与本项目无关。 本项目与 AWS/KIRO/Anthropic/Claude 等官方无关, 本项目不代表官方立场。
因 TLS 默认从 native-tls 切换至 rustls,你可能需要专门安装证书后才能配置 HTTP 代理。可通过 config.json 的 tlsBackend 切回 native-tls。
如果遇到请求报错, 尤其是无法刷新 token, 或者是直接返回 error request, 请尝试切换 tls 后端为 native-tls, 一般即可解决。
Write Failed/会话卡死: 如果遇到持续的 Write File / Write Failed 并导致会话不可用,通常与输出过长被截断有关,可尝试调低输出相关 token 上限。
- Anthropic API 兼容: 完整支持 Anthropic Claude API 格式
- 流式响应: 支持 SSE (Server-Sent Events) 流式输出
- Token 自动刷新: 自动管理和刷新 OAuth Token
- 多凭据支持: 支持配置多个凭据,按优先级自动故障转移
- 负载均衡: 支持
priority(按优先级)和balanced(均衡分配)两种模式 - 智能重试: 单凭据最多重试 3 次,单请求最多重试 9 次
- 数据库持久化: 运行配置、凭据、凭据运行态、usage 记录和模型价格使用 PgSQL;会话绑定、冷却、限流、并发 lease、刷新锁和余额缓存使用 Redis
- Thinking 模式: 支持 Claude 的 extended thinking 功能
- 工具调用: 完整支持 function calling / tool use
- WebSearch: 内置 WebSearch 工具转换逻辑
- 多模型支持: 支持 Sonnet、Opus、Haiku 系列模型
- Admin 管理: 可选的 Web 管理界面和 API,支持凭据管理、余额查询等
- 多级 Region 配置: 支持全局和凭据级别的 Auth Region / API Region 配置
- 凭据级代理: 支持为每个凭据单独配置 HTTP/SOCKS5 代理,优先级:凭据代理 > 全局代理 > 无代理
PS: 如果不想编辑可以直接前往 Release 下载二进制文件
前置步骤:编译前需要先构建前端 Admin UI(用于嵌入到二进制中):
pnpm --dir admin-ui install && pnpm --dir admin-ui build pnpm --dir admin-ui-daisy install && pnpm --dir admin-ui-daisy build
cargo build --release创建 config.json:
{
"postgres": {
"url": "postgres://kiro_rs:kiro_rs_dev_password@127.0.0.1:25432/kiro_rs"
},
"redis": {
"url": "redis://127.0.0.1:26379/0"
},
"host": "127.0.0.1",
"port": 8990,
"apiKey": "sk-kiro-rs-qazWSXedcRFV123456",
"region": "us-east-1"
}PS: 如果你需要 Web 管理面板, 请注意配置
adminApiKeyPgSQL 和 Redis 为必需依赖。首次启动时会把config.json和credentials.json导入 PgSQL;之后运行配置、凭据状态、Token 刷新结果、失败计数、预热状态、统计和 usage 记录都以数据库为准。会话粘性、临时冷却、本地限流、并发占用和跨实例 Token 刷新锁以 Redis 为准。
创建 credentials.json(从 Kiro IDE 等中获取凭证信息):
PS: 可以前往 Web 管理面板配置跳过本步骤 如果你对凭据地域有疑惑, 请查看 Region 配置
Social 认证:
{
"refreshToken": "你的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social"
}IdC 认证:
{
"refreshToken": "你的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "idc",
"clientId": "你的clientId",
"clientSecret": "你的clientSecret"
}./target/release/kiro-rs或指定配置文件路径:
./target/release/kiro-rs -c /path/to/config.json --credentials /path/to/credentials.jsoncurl http://127.0.0.1:8990/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: sk-kiro-rs-qazWSXedcRFV123456" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"stream": true,
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'完整部署请使用不会覆盖旧文件的 docker-compose.database.yml,它包含当前服务、PgSQL 和 Redis:
docker compose -f docker-compose.database.yml up -d需要将首次导入用的 config.json 和 credentials.json 挂载到容器中,具体参见 docker-compose.database.yml。
使用已发布镜像部署:
docker compose -f docker-compose.deploy.yml up -d部署版默认使用 ghcr.io/2ue/kiro-rs:latest,可通过环境变量固定版本:
KIRO_RS_VERSION=0.0.5 docker compose -f docker-compose.deploy.yml up -d如需改用 Docker Hub 镜像,可通过 KIRO_RS_IMAGE 覆盖镜像仓库。
容器端口固定为 8990,请确保挂载的 config/config.json 中 host 配置为 0.0.0.0,否则宿主机端口映射后可能无法访问服务。
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
host |
string | 127.0.0.1 |
服务监听地址 |
port |
number | 8080 |
服务监听端口 |
apiKey |
string | - | 自定义 API Key(用于客户端认证,必配) |
region |
string | us-east-1 |
AWS 区域 |
authRegion |
string | - | Auth Region(用于 Token 刷新),未配置时回退到 region |
apiRegion |
string | - | API Region(用于 API 请求),未配置时回退到 region |
kiroVersion |
string | 0.11.107 |
Kiro 版本号 |
machineId |
string | - | 自定义机器码(64位十六进制),不定义则自动生成 |
systemVersion |
string | 随机 | 系统版本标识 |
nodeVersion |
string | 22.22.0 |
Node.js 版本标识 |
tlsBackend |
string | rustls |
TLS 后端:rustls 或 native-tls |
countTokensApiUrl |
string | - | 外部 count_tokens API 地址 |
countTokensApiKey |
string | - | 外部 count_tokens API 密钥 |
countTokensAuthType |
string | x-api-key |
外部 API 认证类型:x-api-key 或 bearer |
proxyUrl |
string | - | HTTP/SOCKS5 代理地址 |
proxyUsername |
string | - | 代理用户名 |
proxyPassword |
string | - | 代理密码 |
adminApiKey |
string | - | Admin API 密钥,配置后启用凭据管理 API 和 Web 管理界面 |
postgres.url |
string | 必填 | PgSQL 连接地址。服务启动必须能连接;首次启动可从配置文件导入运行配置和凭据 |
postgres.maxConnections |
number | 10 |
PgSQL 连接池最大连接数 |
postgres.migrateOnStart |
boolean | true |
启动时是否自动创建/升级数据库表 |
redis.url |
string | 必填 | Redis 连接地址,用于会话绑定、临时冷却、本地限流、并发 lease、跨实例 Token 刷新锁和余额缓存 |
redis.keyPrefix |
string | kiro_rs:local |
Redis key 前缀,用于和同一个 Redis 中的其他业务隔离 |
loadBalancingMode |
string | priority |
负载均衡模式:priority(按优先级)或 balanced(均衡分配) |
credentialRpm |
number/null | null |
单凭据本地 RPM 限速;null 或 0 表示关闭。开启后会优先分流到其他可用凭据 |
credentialMaxConcurrentRequests |
number | 0 |
单凭据最大并发请求数;0 表示不限制。开启后同一凭据达到并发上限时,新请求会优先换其他可用凭据 |
credentialTransientCooldownSecs |
number | 10 |
上游 408/429/5xx 且没有 Retry-After 时的凭据临时冷却秒数;只有存在其他可用凭据时才冷却当前凭据 |
credentialMaxCooldownSecs |
number | 300 |
单凭据临时冷却上限,用于限制 Retry-After 的影响范围 |
credentialDispatchMaxWaitSecs |
number | 120 |
单个请求等待凭据可调度的最长秒数;0 表示不限制。超时后返回本地调度限流错误,避免请求长期挂起 |
credentialInFlightLeaseMaxSecs |
number | 900 |
单个并发占用超过多久未活跃时自动释放;0 表示关闭。用于兜底异常路径导致的并发槽长期占用 |
credentialWarmupRequests |
number | 3 |
新增凭据默认预热次数;预热只通过真实业务请求成功递减,不伪造 success_count |
credentialWarmupSelectionPercent |
number | 5 |
balanced 模式下预热凭据参与真实业务请求调度的概率百分比 |
compression.enabled |
boolean | false |
是否启用上游请求压缩;默认关闭 |
compression.whitespaceCompression |
boolean | true |
启用 compression 后是否只做 JSON whitespace 压缩;默认只开启该低风险压缩 |
payloadGuardEnabled |
boolean | true |
是否启用发送 Kiro 上游前的最终 payload 防护 |
payloadGuardMaxBytes |
number | 460800 |
Kiro 上游请求 JSON body 最大字节数,按最终发送的 JSON 字节数计算;0 表示不限制大小但仍执行 payload 协议修复 |
payloadGuardTrimHistory |
boolean | true |
payload 超限时是否允许裁剪最旧历史;关闭后只做协议修复,仍超限会直接返回客户端错误 |
compatProfile |
string | claude-code |
兼容 profile:claude-code 优先真实 Claude Code CLI 可用性;anthropic-strict 减少代理改写和调试特征;debug 等同 claude-code 但默认暴露代理 warning |
extractThinking |
boolean | true |
非流式响应的 thinking 块提取。启用后 <thinking> 标签会被解析为独立的 thinking 内容块 |
promptCacheTargetReadRatio |
number | 0.98 |
/v1/messages、/cc/v1/messages、/ha/v1/messages、/na/v1/messages high-cache 的目标 cache read 中心比例;/na 默认只保留真实上游 cache usage,不用本地模拟补足 cache usage |
promptCacheTokenScale |
number | 1.6 |
/v1/messages、/cc/v1/messages、/ha/v1/messages、/na/v1/messages high-cache 模拟专用的 total input 放大倍数,只影响本地模拟 cache usage |
promptCacheMaxSimulatedInputTokens |
number | 300000 |
/v1/messages、/cc/v1/messages、/ha/v1/messages、/na/v1/messages high-cache 模拟 total input 的上限;触顶时会做确定性 soft-cap 抖动 |
promptCacheCapJitterMinTokens |
number | 12000 |
high-cache 触顶 soft-cap 的最小扣减 token |
promptCacheCapJitterMaxTokens |
number | 24000 |
high-cache 触顶 soft-cap 的最大扣减 token |
promptCacheScaleMinInputTokens |
number | 20000 |
基础输入达到该门槛后才启用 high-cache token scale,避免短测试请求被放大 |
reportedUsage.default |
object | input/output 原始值,cache read/write 保留计算值 | 控制所有路径的默认 usage 上报方式,只影响响应和后台 usage record,不影响 reader 计算、本地缓存 tracker 或上游请求 |
reportedUsage.pathOverrides |
object | /na、/cc、/ha |
按路径前缀独立覆盖默认 usage 上报策略,最长前缀优先;例如 /cc 会匹配 /cc/v1/messages,/ha 和 /na 不会继承 /cc 的 writer 配置 |
usageRecordLimit |
number | 5000 |
内存中保留的最近 usage 记录数量;完整 usage 记录写入 PgSQL |
highCacheThreshold |
number | 10000 |
Admin 统计高缓存请求的 cache read 阈值 |
defaultEndpoint |
string | ide |
默认 Kiro 端点。凭据未显式指定 endpoint 时使用。当前支持:ide |
exposeProxyWarnings |
boolean | false |
是否通过 x-kiro-rs-warnings 暴露代理侧兜底改写。anthropic-strict 下会强制关闭 |
最小配置示例:
{
"postgres": {
"url": "postgres://kiro_rs:kiro_rs_dev_password@127.0.0.1:25432/kiro_rs"
},
"redis": {
"url": "redis://127.0.0.1:26379/0"
},
"host": "127.0.0.1",
"port": 8990,
"apiKey": "sk-kiro-rs-qazWSXedcRFV123456",
"adminApiKey": "sk-admin-your-secret-key",
"payloadGuardEnabled": true,
"payloadGuardMaxBytes": 460800,
"payloadGuardTrimHistory": true
}未写出的字段会使用内置默认值。首次启动导入 PgSQL 后,也可以在后台配置页热更新调度、payload 防护、高缓存模拟和路径级 usage 上报策略。
缓存模式由路径固定选择:
/v1/messages:high-cache。即使请求没有显式cache_control,也会按稳定前缀建立本地缓存;如果上游 metadata 返回的 cache read/write 都是 0,会用本地缓存 usage 补足 cache 字段。/cc/v1/messages:high-cache,与/v1/messages使用同一套底层缓存模拟;默认只通过reportedUsage.pathOverrides["/cc"]改写下游 input 和 cache write 上报。/ha/v1/messages:high-cache,与/v1/messages使用同一套底层缓存模拟;默认只通过reportedUsage.pathOverrides["/ha"]改写下游 input 上报。后续如果要改 writer,需要单独改/ha覆盖项。/na/v1/messages:high-cache 路由;reportedUsage.pathOverrides["/na"]默认关闭本地模拟 cache usage 补足,只保留真实上游 cache usage。
路径级 usage 上报策略支持这些字段:
input:控制input_tokens。使用sample-max时会采样到maxTokens以内;moveDeltaToCacheRead为 true 时,减少的 input 差值会加入cache_read_input_tokens。output:控制output_tokens。默认建议raw,也就是直接使用上游返回的原始输出。cacheRead:控制cache_read_input_tokens。默认建议preserve。cacheCreation:控制cache_creation_input_tokens。/cc默认使用sample-target,targetTokens为3000,normalMaxMultiplier为1.2。
支持单对象格式(向后兼容)或数组格式(多凭据)。
| 字段 | 类型 | 描述 |
|---|---|---|
id |
number | 凭据唯一 ID(可选,仅用于 Admin API 管理;手写文件可不填) |
accessToken |
string | OAuth 访问令牌(可选,可自动刷新) |
refreshToken |
string | OAuth 刷新令牌 |
profileArn |
string | AWS Profile ARN(可选,登录时返回) |
expiresAt |
string | Token 过期时间 (RFC3339) |
authMethod |
string | 认证方式:social 或 idc |
clientId |
string | IdC 登录的客户端 ID(IdC 认证必填) |
clientSecret |
string | IdC 登录的客户端密钥(IdC 认证必填) |
priority |
number | 凭据优先级,数字越小越优先,默认为 0 |
region |
string | 凭据级 Auth Region, 兼容字段 |
authRegion |
string | 凭据级 Auth Region,用于 Token 刷新, 未配置时回退到 region |
apiRegion |
string | 凭据级 API Region,用于 API 请求 |
machineId |
string | 凭据级机器码(64位十六进制) |
email |
string | 用户邮箱(可选,从 API 获取) |
proxyUrl |
string | 凭据级代理 URL(可选,特殊值 direct 表示不使用代理) |
proxyUsername |
string | 凭据级代理用户名(可选) |
proxyPassword |
string | 凭据级代理密码(可选) |
endpoint |
string | 凭据级端点名称(可选,未配置时使用 config.defaultEndpoint) |
说明:
- IdC / Builder-ID / IAM 在本项目里属于同一种登录方式,配置时统一使用
authMethod: "idc" - 为兼容旧配置,
builder-id/iam仍可被识别,但会按idc处理
{
"accessToken": "请求token,一般有效期一小时,可选",
"refreshToken": "刷新token,一般有效期7-30天不等",
"profileArn": "arn:aws:codewhisperer:us-east-1:111112222233:profile/QWER1QAZSDFGH",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social",
"clientId": "IdC 登录需要",
"clientSecret": "IdC 登录需要"
}[
{
"refreshToken": "第一个凭据的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social",
"priority": 0
},
{
"refreshToken": "第二个凭据的刷新token",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "idc",
"clientId": "xxxxxxxxx",
"clientSecret": "xxxxxxxxx",
"region": "us-east-2",
"priority": 1,
"proxyUrl": "socks5://proxy.example.com:1080",
"proxyUsername": "user",
"proxyPassword": "pass"
},
{
"refreshToken": "第三个凭据(显式不走代理)",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social",
"priority": 2,
"proxyUrl": "direct"
}
]多凭据特性:
- 按
priority字段排序,数字越小优先级越高(默认为 0) - 单凭据最多重试 3 次,单请求最多重试 9 次
- 自动故障转移到下一个可用凭据
- 多凭据格式下 Token 刷新后自动回写到源文件
支持多级 Region 配置,分别控制 Token 刷新和 API 请求使用的区域。
Auth Region(Token 刷新)优先级:
凭据.authRegion > 凭据.region > config.authRegion > config.region
API Region(API 请求)优先级:
凭据.apiRegion > config.apiRegion > config.region
支持全局代理和凭据级代理,凭据级代理会覆盖该凭据产生的所有出站连接(API 请求、Token 刷新、额度查询)。
代理优先级:凭据.proxyUrl > config.proxyUrl > 无代理
凭据 proxyUrl 值 |
行为 |
|---|---|
具体 URL(如 http://proxy:8080、socks5://proxy:1080) |
使用凭据指定的代理 |
direct |
显式不使用代理(即使全局配置了代理) |
| 未配置(留空) | 回退到全局代理配置 |
凭据级代理示例:
[
{
"refreshToken": "凭据A:使用自己的代理",
"authMethod": "social",
"proxyUrl": "socks5://proxy-a.example.com:1080",
"proxyUsername": "user_a",
"proxyPassword": "pass_a"
},
{
"refreshToken": "凭据B:显式不走代理(直连)",
"authMethod": "social",
"proxyUrl": "direct"
},
{
"refreshToken": "凭据C:使用全局代理(或直连,取决于 config.json)",
"authMethod": "social"
}
]客户端请求本服务时,支持两种认证方式:
-
x-api-key Header
x-api-key: sk-your-api-key -
Authorization Bearer
Authorization: Bearer sk-your-api-key
服务运行时主要使用配置文件和启动参数。以下环境变量可选:
RUST_LOG=debug ./target/release/kiro-rs| 变量 | 默认值 | 说明 |
|---|---|---|
RUST_LOG |
info |
日志级别,例如 debug / info |
KIRO_API_KEY |
- | 自动导入一个最高优先级的 Kiro API Key 凭据并写入 PgSQL,可用于不准备 credentials.json 的场景 |
KIRO_RS_IMAGE |
ghcr.io/2ue/kiro-rs |
docker-compose.deploy.yml 使用的镜像仓库 |
KIRO_RS_VERSION |
latest |
docker-compose.deploy.yml 使用的镜像 tag |
KIRO_RS_PORT |
8990 |
Docker 部署时映射到宿主机的端口 |
Admin UI 本地开发时还可以用 VITE_API_PROXY_TARGET 覆盖 Vite 代理后端地址,默认 http://localhost:8080。
| 端点 | 方法 | 描述 |
|---|---|---|
/v1/models |
GET | 获取可用模型列表 |
/v1/messages |
POST | 创建消息(对话,固定 high-cache 本地 usage 模拟) |
/v1/messages/count_tokens |
POST | 估算 Token 数量 |
| 端点 | 方法 | 描述 |
|---|---|---|
/na/v1/models |
GET | 获取可用模型列表 |
/na/v1/messages |
POST | 创建消息(对话;底层 high-cache 计算保持开启,默认只上报真实上游 cache usage) |
/na/v1/messages/count_tokens |
POST | 估算 Token 数量 |
| 端点 | 方法 | 描述 |
|---|---|---|
/cc/v1/models |
GET | 获取可用模型列表 |
/cc/v1/messages |
POST | 创建消息(缓冲模式,确保 input_tokens 准确) |
/cc/v1/messages/count_tokens |
POST | 估算 Token 数量(与 /v1 相同) |
/cc/v1/messages与/v1/messages的区别:
/v1/messages:实时流式返回,message_start中的input_tokens是估算值/cc/v1/messages:缓冲模式,等待上游流完成后,用从contextUsageEvent计算的准确input_tokens更正message_start,然后一次性返回所有事件- 等待期间会每 25 秒发送
ping事件保活
支持 Claude 的 extended thinking 功能:
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [...]
}完整支持 Anthropic 的 tool use 功能:
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "获取指定城市的天气",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
],
"messages": [...]
}| Anthropic 模型 | Kiro 模型 |
|---|---|
*sonnet* |
claude-sonnet-4.5 |
*opus*(含 4.5/4-5) |
claude-opus-4.5 |
*opus*(其他) |
claude-opus-4.6 |
*haiku* |
claude-haiku-4.5 |
当 config.json 配置了非空 adminApiKey 时,会启用:
-
Admin API(认证同 API Key)
GET /api/admin/credentials- 获取所有凭据状态POST /api/admin/credentials- 添加新凭据DELETE /api/admin/credentials/:id- 删除凭据POST /api/admin/credentials/:id/disabled- 设置凭据禁用状态POST /api/admin/credentials/:id/priority- 设置凭据优先级POST /api/admin/credentials/:id/warmup- 设置凭据预热次数POST /api/admin/credentials/:id/in-flight/clear- 清理凭据并发占用POST /api/admin/credentials/:id/reset- 重置失败计数POST /api/admin/credentials/:id/refresh- 强制刷新 TokenGET /api/admin/credentials/:id/balance- 获取凭据余额POST /api/admin/credentials/:id/test- 测试指定凭据的模型调用GET /api/admin/usage-records-paged- 分页查询 Usage 记录POST /api/admin/usage-records/clear- 软删除当前 Usage 展示记录GET /api/admin/model-pricing- 获取模型价格目录POST /api/admin/model-pricing/sync- 手动同步模型价格目录GET /api/admin/audit-logs- 分页查询后台审计日志
-
Admin UI
GET /console- 访问新版 Daisy 管理页面(需要在编译前构建admin-ui-daisy/dist)GET /admin- 访问旧版管理页面(需要在编译前构建admin-ui/dist)
- 凭证安全: 请妥善保管首次导入用的
credentials.json和 PgSQL 数据库,不要提交到版本控制 - Token 刷新: 服务会自动刷新过期的 Token,无需手动干预
- WebSearch 工具: 当
tools列表仅包含一个web_search工具时,会走内置 WebSearch 转换逻辑
kiro-rs/
├── src/
│ ├── main.rs # 程序入口
│ ├── http_client.rs # HTTP 客户端构建
│ ├── token.rs # Token 计算模块
│ ├── debug.rs # 调试工具
│ ├── test.rs # 测试
│ ├── model/ # 配置和参数模型
│ │ ├── config.rs # 应用配置
│ │ └── arg.rs # 命令行参数
│ ├── anthropic/ # Anthropic API 兼容层
│ │ ├── router.rs # 路由配置
│ │ ├── handlers.rs # 请求处理器
│ │ ├── middleware.rs # 认证中间件
│ │ ├── types.rs # 类型定义
│ │ ├── converter.rs # 协议转换器
│ │ ├── stream.rs # 流式响应处理
│ │ └── websearch.rs # WebSearch 工具处理
│ ├── kiro/ # Kiro API 客户端
│ │ ├── provider.rs # API 提供者
│ │ ├── token_manager.rs # Token 管理
│ │ ├── machine_id.rs # 设备指纹生成
│ │ ├── model/ # 数据模型
│ │ │ ├── credentials.rs # OAuth 凭证
│ │ │ ├── events/ # 响应事件类型
│ │ │ ├── requests/ # 请求类型
│ │ │ ├── common/ # 共享类型
│ │ │ ├── token_refresh.rs # Token 刷新模型
│ │ │ └── usage_limits.rs # 使用额度模型
│ │ └── parser/ # AWS Event Stream 解析器
│ │ ├── decoder.rs # 流式解码器
│ │ ├── frame.rs # 帧解析
│ │ ├── header.rs # 头部解析
│ │ ├── error.rs # 错误类型
│ │ └── crc.rs # CRC 校验
│ ├── admin/ # Admin API 模块
│ │ ├── router.rs # 路由配置
│ │ ├── handlers.rs # 请求处理器
│ │ ├── service.rs # 业务逻辑服务
│ │ ├── types.rs # 类型定义
│ │ ├── middleware.rs # 认证中间件
│ │ └── error.rs # 错误处理
│ ├── admin_ui/ # Admin UI 静态文件嵌入
│ │ └── router.rs # 静态文件路由
│ ├── storage/ # PgSQL 和 Redis 存储
│ │ ├── postgres.rs # PgSQL 表结构和读写
│ │ └── redis_cache.rs # Redis 缓存和调度运行态
│ └── common/ # 公共模块
│ └── auth.rs # 认证工具函数
├── admin-ui/ # 旧版 Admin UI 前端工程(构建产物会嵌入二进制)
├── admin-ui-daisy/ # 新版 Console UI 前端工程(构建产物会嵌入二进制)
├── tools/ # 辅助工具
├── Cargo.toml # 项目配置
├── config.example.json # 配置示例
├── docker-compose.yml # 旧版单服务 Docker Compose 配置
├── docker-compose.local-infra.yml # 本地 PgSQL/Redis 测试依赖
├── docker-compose.database.yml # 服务 + PgSQL + Redis 部署配置
└── Dockerfile # Docker 构建文件
- Web 框架: Axum 0.8
- 异步运行时: Tokio
- HTTP 客户端: Reqwest
- 序列化: Serde
- 日志: tracing
- 命令行: Clap
- 数据库: SQLx + PostgreSQL
- 缓存: Redis
MIT
本项目的实现离不开前辈的努力:
本项目部分逻辑参考了以上的项目, 再次由衷的感谢!