logo
icon

OneCLI

开源 AI 代理凭证网关与保险库。一次性存储 API 密钥,代理发出 HTTP 请求时自动注入 — 代理永远不会看到真实密钥。

template cover
部署次数1
发布者glasschan
创建于2026-08-01
标签
AISecurityVaultCredentialsAI AgentsGateway

模版内的服务

OneCLI — AI 代理的密钥保险库(由 SEAFOODHOLDHAND 创建)

OneCLI 是开源的凭证网关,位于你的 AI 代理与外部服务之间。将真实 API 密钥存储在 OneCLI 的加密保险库中,给代理一个 placeholder(如 FAKE_KEY),OneCLI 网关会在请求时自动替换为真实凭证 — 代理永远不会看到真实密钥。

此模板一键部署完整的 OneCLI 实例。

架构

[Zeabur LB] → OneCLI 应用(单一 image,两个进程)
                  ├─ :10254  → Next.js 网页控制台(UI + API)
                  └─ :10255  → Rust 网关(凭证注入代理)
[PostgreSQL]  → OneCLI 数据库(代理、密钥、审计日志)

OneCLI app image(ghcr.io/onecli/onecli:latest)包含:

  • Next.js 网页控制台(port 10254,UI、代理管理、密钥管理)
  • Rust 网关(port 10255,透明的凭证注入代理)
  • Prisma migrations 在容器启动时自动执行
  • 自动生成 SECRET_ENCRYPTION_KEY 持久化到 /app/data/(AES-256-GCM)

⚠️ 存储真实凭证之前请先看 — 安全性

默认情况下,此模板以单用户 / 本地模式部署:控制台无需登录就会直接打开。 任何知道你控制台域名的人都可以看到并管理其中存储的所有 API 密钥。OneCLI 是一个凭证保险库 — 这样默认暴露在公共互联网是不安全的。

存储任何真实密钥之前,请做以下其中一项:

  1. 用 Google OAuth 锁定控制台 — 在 Zeabur Dashboard 的 onecli 服务下,同时设置 NEXTAUTH_SECRET + GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET(三个都要,然后重启)。见下面"部署后配置"。
  2. 或者将控制台放在私有 / 非公开域名(例如只能通过 VPN 或私有网络访问),这样只有你能打开。

网关域名(代理发送请求的地方)永远是公开的 — 这没问题,网关会用每个代理的 access token 验证每次调用。有风险的只是默认本地模式下的控制台域名

工作原理

  1. 在浏览器打开 https://your-domain.zeabur.app
  2. 直接进入控制台(单用户模式无需登录)
  3. 创建第一个代理并获取 access token
  4. 将真实 API 密钥加入保险库
  5. 将你的 AI 代理的 HTTP client 指向网关 URL
你的代理 → [FAKE_KEY] → OneCLI 网关 → [REAL_KEY] → 外部 API(OpenAI、GitHub 等)
                                        ↓
                                    审计日志 + 速率限制

功能

  • 透明凭证注入 — 代理正常发 HTTP 请求,网关处理认证
  • AES-256-GCM 加密存储 — 密钥仅在请求时解密
  • 主机与路径匹配 — 将密钥路由到特定 API endpoint
  • 多代理支持 — 每个代理有自己 scoped 的 access token
  • Rust 网关 — 快速、内存安全的 HTTP 代理(支持 MITM)
  • 两种认证模式 — 单用户(无需登录)或 Google OAuth(多用户团队)
  • Vault 集成 — 连接 Bitwarden 按需注入凭证
  • 完整审计日志 — 查看每个代理做了什么

首次登录

部署完成后(首次启动 + migrations 需要 2-3 分钟):

  1. 在浏览器打开 https://your-domain.zeabur.app
  2. 直接进入控制台(单用户模式无需登录)
  3. 创建第一个代理并获取 access token
  4. 将密钥加入保险库
  5. 将你的 AI 代理的 HTTP client 指向网关 URL

配置你的 AI 代理

获取代理 token 和至少一个密钥后:

# 示例:将 OpenAI 请求通过 OneCLI 网关
curl https://your-gateway-domain.zeabur.app/v1/chat/completions \
  -H "Authorization: Bearer <your-agent-access-token>" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4","messages":[{"role":"user","content":"Hello!"}]}'

在你的代理代码中,使用 placeholder(如 FAKE_OPENAI_KEY),OneCLI 会自动替换为真实密钥。

部署后配置(可选)

你可以在 Zeabur Dashboard 的 onecli 服务下自定义环境变量:

启用 Google OAuth(多用户模式):

  • NEXTAUTH_SECRET → 你的 NextAuth 密钥
  • GOOGLE_CLIENT_ID → 你的 Google OAuth client ID
  • GOOGLE_CLIENT_SECRET → 你的 Google OAuth client secret

自定义网关端口:

  • GATEWAY_PORT → 默认 10255

备注

  • 加密密钥(SECRET_ENCRYPTION_KEY)首次启动时自动生成并存储到 /app/data/不要丢失这个 volume — 没了它,所有存储的密钥都不可恢复。
  • Rust 网关使用 HTTPS 拦截(MITM)来注入凭证。你的代理必须信任 OneCLI 的 CA 证书(或者在开发环境使用 --insecure-skip-verify)。
  • 数据库 migrations 通过 entrypoint script 自动执行。
  • All-in-one image 约 500MB(Next.js + Rust 网关),比单独部署小。

了解更多:https://github.com/onecli/onecli

如在部署期间遇到任何问题,请通过 GitHub issues 告知: https://github.com/glasschan/seafoodholdhand-zeabur-templates