快速开始
5 分钟在本机起一个 Lite 模式网关,调通一次 OpenAI 请求。
前置条件
- Docker / Docker Compose, 或者 Rust 1.85+。
- 至少一个上游 API Key(OpenAI 或 Anthropic)。
1. 准备环境变量
cp .env.example .env
打开 .env,生成并填入两个必需 secret:
# 生成 admin root token
openssl rand -hex 32
# 生成加密用 master key
openssl rand -base64 32
填入 .env:
GATEWAY_ROOT_TOKEN=<上面 hex 输出>
GATEWAY_MASTER_KEY=<上面 base64 输出>
OPENAI_API_KEY=sk-...
⚠️
GATEWAY_MASTER_KEY用于加密落库的供应商凭证。丢了就无法解密历史数据,务必备份。
2. 启动网关
方式 A:Docker Compose (Lite)
docker compose -f docker-compose.lite.yml up --build
数据持久化到本地 ./data/gateway.db(SQLite)。
方式 B:Docker Compose (Standard)
会同时起 Postgres 和 Redis:
docker compose up --build
方式 C:本地 cargo
cargo run --release --bin gateway -- --config config/lite.yaml
启动后日志里能看到:
{"level":"INFO","fields":{"message":"gateway listening","addr":"0.0.0.0:8080","profile":"lite"}}
3. 创建一个 Gateway API Key
用 root token 调 Admin API:
curl -X POST http://localhost:8080/admin/keys \
-H "Authorization: Bearer $GATEWAY_ROOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"my-app","env":"live","scopes":["proxy"]}'
响应里的 secret 字段(形如 sk-gw-live-xxxxx)只显示这一次,务必保存。
4. 调一次模型
把 Gateway Key 当成上游 API Key 用,路径前加 /v1/{namespace}(namespace 通常就是 provider 名,除非你显式解耦):
curl http://localhost:8080/v1/openai/v1/chat/completions \
-H "Authorization: Bearer sk-gw-live-xxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role":"user","content":"hello"}]
}'
网关会:
- 用 Argon2/BLAKE3 哈希验证 Gateway Key。
- 检查限流、预算。
- 用
OPENAI_API_KEY转发到https://api.openai.com/v1/chat/completions。 - 计算成本、落库一条请求日志,更新指标。
- 把上游响应原样返回。
5. 创建一个 Admin 账号(可选)
如果想用账号密码而不是 root token 登录 UI,先创建一个 admin。lite.yaml 默认已经开启 admin.password_login: true。
curl -X POST http://localhost:8080/admin/admins \
-H "Authorization: Bearer $GATEWAY_ROOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
约束:
username非空,password≥ 6 位。
成功返回 {"id":"...","username":"admin"}。验证登录:
curl -X POST http://localhost:8080/admin/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
响应里的 token 字段是 12 小时有效的 JWT,后续所有 /admin/* 请求都可以用它替代 root token。
6. 看一眼内置 UI
浏览器打开 http://localhost:8080/ui/,用刚才创建的账号密码登录(或粘贴 root token),可以看到 Key、日志、Cost 聚合。