# openteam 服务配置示例 —— 复制为 .env 后修改 # 所有项均可用环境变量 OT_ 覆盖(点号转下划线,如 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 # /v1 请求体上限(MB):超限按客户端协议返回 413 OT_PROXY_MAX_BODY_MB=32 # 故障转移给"第二个及以后的渠道"留的时间预算(0=不限)。 # 首个渠道不受它约束——长回答本就要跑几分钟,但不能让坏渠道把客户端拖到 N×timeout。 OT_PROXY_FAILOVER_BUDGET=30s # 流式空闲多久补一行 SSE 注释心跳(0=关闭)。挂在 nginx/Cloudflare 后面时, # 上游长时间不出字(长思考)会被对端的空闲超时掐掉,心跳用来续住这条流。 OT_PROXY_STREAM_HEARTBEAT=15s # 渠道健康检查 OT_PROXY_HEALTH_INTERVAL=60s OT_PROXY_HEALTH_FAIL_THRESHOLD=2 # 调试:记录管理员的原始请求与响应到请求明细(默认关闭;流式记录全部事件) OT_PROXY_LOG_RAW=false # 限流(内存计数,Redis 后置):用户级每秒请求数上限(0=不限制) OT_RATELIMIT_USER_RPS=20 # 认证端点限速(每分钟,0=不限制):登录是密码爆破面,注册是批量建号面 OT_RATELIMIT_LOGIN_IP_PER_MIN=30 OT_RATELIMIT_LOGIN_USER_PER_MIN=10 OT_RATELIMIT_REGISTER_IP_PER_MIN=5 # 跨域白名单(逗号分隔 origin)。留空 = 不输出任何 CORS 头: # 网关自托管 web/dist 时前后端同源、vite dev 走 proxy,都不需要跨域。 # 只有把 web/ 单独部署到别的域名时才需要配。 OT_CORS_ALLOW_ORIGINS= # 反向代理(CIDR 或 IP,逗号分隔)。配置后 gin 才信任 X-Forwarded-For 取客户端 IP, # 上面的认证限速依赖它;直连部署留空(此时按连接源地址计数,伪造头无效)。 OT_SERVER_TRUSTED_PROXIES= # 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