代理网关
适用于Claude和Gemini模型的OpenAI兼容代理网关,通过Ploinky容器部署,并通过Cloudflare隧道公开。
网关
| 网关 | 型号 | 后端 | 端口 |
|---|---|---|---|
| 基罗关口 | 克劳德十四行诗4.5、克劳德十四行诗4、克劳德·海库4.5 | AWS Kiro CLI | 8000 |
| 反重力网关 | 双子座2.5 Pro/Flash,克劳德(通过反重力) | 谷歌云代码 | 8001 |
建筑
Cloudflare Tunnel
Internet ──► kiro.axiologic.dev ────────────────────────► VPS:8000 ──► kiro-gateway ──► AWS/Kiro
──► antigravity.axiologic.dev ─────────────────► VPS:8001 ──► antigravity-gw ──► Google Cloud Code快速开始
先决条件
- 具有SSH访问权限的VPS(Debian/Ubuntu,1+vCPU,1+GB RAM)
- 具有域的Cloudflare帐户
- Cloudflare隧道令牌
1.配置部署
cd proxies/deploy
cp setEnv.sh.example setEnv.sh
nano setEnv.sh # Fill in your values2.部署到VPS
chmod +x deploy.sh
./deploy.sh3.配置Cloudflare隧道路由
在Cloudflare仪表板>零信任>网络>隧道>您的隧道中:
| 子域 | 域 | 服务 |
|---|---|---|
| kiro | yourdomain.com | http://localhost:8000 |
| 反重力 | yourdomain.com | http://localhost:8001 |
4.对网关进行身份验证
访问浏览器中的登录页面:
- https://kiro.yourdomain.com-点击“使用AWS登录”
- https://antigravity.yourdomain.com-点击Google OAuth的“添加帐户”
5.测试
# Get your API key
cat deploy/.api_key
# Test Kiro
curl -H "Authorization: Bearer YOUR_API_KEY" https://kiro.yourdomain.com/v1/models
# Test Antigravity
curl -H "Authorization: Bearer YOUR_API_KEY" https://antigravity.yourdomain.com/v1/models目录结构
proxies/
├── kiro-gateway/ # Claude via AWS Kiro
│ ├── manifest.json # Ploinky container config
│ ├── install.sh # Container setup script
│ ├── startup.sh # Container startup script
│ ├── landing.py # Web UI + API proxy
│ └── cli.sh # Interactive CLI access
│
├── antigravity-gateway/ # Gemini/Claude via Antigravity
│ ├── manifest.json # Ploinky container config
│ ├── install.sh # Container setup script
│ ├── startup.sh # Container startup script
│ └── cli.sh # Interactive CLI access
│
├── antigravity-claude-proxy/ # Forked proxy source code
│ └── ... # (cloned during install)
│
├── deploy/ # Deployment scripts
│ ├── deploy.sh # Main deployment script
│ ├── auth-gateways.sh # Authentication helper
│ ├── setEnv.sh.example # Environment template
│ └── README.md # Deployment docs
│
└── README.md # This fileAPI使用
这两个网关都公开了与OpenAI兼容的端点:
端点
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /v1/models | 列出可用型号 |
| POST | /v1/聊天/完成 | 聊天完成(支持流媒体) |
认证
Authorization: Bearer YOUR_API_KEY示例请求
curl -X POST https://kiro.yourdomain.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello!"}],
"max_tokens": 100
}'使用OpenCode
添加到 ~/.config/opencode/opencode.json:
{
"model": "kiro/claude-sonnet-4",
"provider": {
"kiro": {
"npm": "@ai-sdk/openai-compatible",
"name": "Kiro Gateway",
"options": {
"baseURL": "https://kiro.yourdomain.com/v1",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"models": {
"claude-sonnet-4.5": { "name": "Claude Sonnet 4.5" },
"claude-sonnet-4": { "name": "Claude Sonnet 4" },
"claude-haiku-4.5": { "name": "Claude Haiku 4.5" }
}
},
"antigravity": {
"npm": "@ai-sdk/openai-compatible",
"name": "Antigravity Gateway",
"options": {
"baseURL": "https://antigravity.yourdomain.com/v1",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"models": {
"gemini-2.5-pro": { "name": "Gemini 2.5 Pro" },
"gemini-2.5-flash": { "name": "Gemini 2.5 Flash" }
}
}
}
}坚持
凭据和数据存储在 /shared (安装自 workspace/shared/):
| 文件 | 描述 |
|---|---|
/shared/proxy_api_key | 用于网关身份验证的API密钥 |
/shared/kiro-cli/ | Kiro CLI凭据(重新启动后仍然有效) |
/shared/antigravity/ | 反重力账户数据 |
服务器管理
SSH到VPS
ssh -i ~/your_key.pem admin@your-vps-ip
cd ~/proxy-gateway/workspace检查状态
ploinky status查看日志
podman logs ploinky_proxies_kiro-gateway_workspace_*
podman logs ploinky_proxies_antigravity-gateway_workspace_*重新启动网关
ploinky stop kiro-gateway antigravity-gateway
ploinky start kiro-gateway antigravity-gateway重新生成API密钥
# On VPS
cd ~/proxy-gateway/workspace
NEW_KEY=$(openssl rand -hex 32)
ploinky var PROXY_API_KEY=$NEW_KEY
echo "$NEW_KEY" > shared/proxy_api_key
# Restart to apply
ploinky stop && ploinky clean && ploinky start kiro-gateway antigravity-gateway
# Update local opencode.json with new key故障排除
网关显示“未经身份验证”
访问登录页面并完成OAuth流程:
- Kiro:AWS SSO设备流(点击按钮,输入代码)
- 反重力:谷歌OAuth(手动回调-复制本地主机URL)
“没有可用帐户”错误
网关需要帐户身份验证。访问登录页面。
重新启动后凭据丢失
确保 /shared 正确安装。检查:
podman exec ls -la /shared/API返回401
检查API密钥匹配项:
# On VPS
cat ~/proxy-gateway/workspace/shared/proxy_api_key
# Compare with your local config安全说明
- API密钥为256位随机(64个十六进制字符)
- 所有流量均通过Cloudflare隧道加密(无直接端口暴露)
- OAuth令牌仅存储在VPS上
- 永不承诺
setEnv.sh或.api_key转git
许可证
麻省理工学院
