- 超时:NewGateway 里 gw_timeout*time.Second 把已是 Duration 的值二次换算, int64 溢出后无论 OT_PROXY_TIMEOUT 填多少都等于没有超时,渠道 timeout_ms 也从没被读过。现在非流式用 context deadline 约束整段时长,流式只约束首包 (Transport.ResponseHeaderTimeout),正文不限时长,长回答不会被砍。 - 断连:上游请求改用 NewRequestWithContext 绑定客户端 context,客户端断开即 取消上游并记 canceled,不再空转生成继续付费;PATCH 已写 200 头后不再往 响应里追加错误体。 - 白名单:APIKey.AllowedModels 以前只存不用,现在 Auth 注入 context 并参与 判定(用户黑名单 > 密钥白名单 > 用户白名单 > 全局)。 - 选路:模型已有渠道绑定时只用绑定渠道,都不可用直接 503 no_channel,不再 把请求发给不认识它的渠道;新增运行期健康(连续 3 次网络错误/超时/429/5xx 进 30s 冷却,成功清零),与 60s 一次的 /models 探测互补。 - 密钥 API:PATCH 回显更新后的完整对象;限额填 0 统一视为不限制(原来 token 配额存 0 会让密钥第一次请求就被 429 打死,而请求配额存 0 又等于 不限制,两个字段语义相反);前端编辑框总是提交白名单,清空能真的取消。 测试:新增 proxy 链路集成测试(超时生效、流式不被截断、断连取消并记账、 密钥白名单 403、连续 429 后候选剔除)与 channel 用例(绑定模型不退全局、 冷却阈值与到期恢复、成功清零)。
56 lines
1.8 KiB
Bash
56 lines
1.8 KiB
Bash
# openteam 服务配置示例 —— 复制为 .env 后修改
|
||
# 所有项均可用环境变量 OT_<KEY> 覆盖(点号转下划线,如 db.driver → OT_DB_DRIVER)
|
||
|
||
# 运行环境 development | production
|
||
OT_ENV=development
|
||
OT_PORT=8080
|
||
|
||
# 数据库(开发默认 SQLite;生产切 postgres)
|
||
OT_DB_DRIVER=sqlite
|
||
OT_DB_DSN=data/openteam.db
|
||
# OT_DB_DRIVER=postgres
|
||
# OT_DB_DSN=host=localhost user=openteam password=openteam dbname=openteam port=5432 sslmode=disable
|
||
|
||
# JWT(生产必须更换为随机长字符串)
|
||
OT_JWT_SECRET=change-me-to-a-long-random-string
|
||
OT_JWT_ACCESS_TTL=2h
|
||
OT_JWT_REFRESH_TTL=168h
|
||
OT_JWT_COOKIE_SECURE=false
|
||
|
||
# 注册策略:open(开放)| invite(邀请码)
|
||
OT_AUTH_REGISTRATION_MODE=open
|
||
|
||
# 渠道密钥加密主密钥(生产必须设置,32 字节以上)
|
||
OT_MASTER_KEY=change-me-master-key
|
||
|
||
# 默认上游渠道(首次启动自动创建 OpenAI 渠道)
|
||
OT_PROXY_UPSTREAM_KEY=
|
||
OT_PROXY_UPSTREAM_BASE_URL=https://api.openai.com
|
||
OT_PROXY_DEFAULT_MODEL=gpt-4o-mini
|
||
# 上游超时兜底值(渠道 timeout_ms 优先):
|
||
# 非流式 = 整段请求上限;流式 = 只约束首包,正文不限时长
|
||
OT_PROXY_TIMEOUT=300s
|
||
|
||
# 渠道健康检查
|
||
OT_PROXY_HEALTH_INTERVAL=60s
|
||
OT_PROXY_HEALTH_FAIL_THRESHOLD=2
|
||
|
||
# 调试:记录管理员的原始请求与响应到请求明细(默认关闭;流式记录全部事件)
|
||
OT_PROXY_LOG_RAW=false
|
||
|
||
# 限流(内存计数,Redis 后置):用户级每秒请求数上限(0=不限制)
|
||
OT_RATELIMIT_USER_RPS=20
|
||
|
||
# Passkey(WebAuthn):RPID 为域名,RPOrigin 为前端来源(需 HTTPS 或 localhost)
|
||
OT_WEBAUTHN_RP_ID=localhost
|
||
OT_WEBAUTHN_RP_ORIGIN=http://localhost:5173
|
||
OT_WEBAUTHN_RP_NAME=openteam
|
||
|
||
# 初始管理员(仅首次创建生效)
|
||
OT_ADMIN_USERNAME=admin
|
||
OT_ADMIN_EMAIL=admin@localhost
|
||
OT_ADMIN_PASSWORD=admin123
|
||
|
||
# 记录原始请求日志
|
||
OT_PROXY_LOG_RAW=false
|