.env.example 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. # 管理员令牌(请务必更改此值以确保安全性)
  2. ADMIN_TOKEN=change-me
  3. # API 域名(分域部署时配置,Web UI 与 API 使用不同域名时需要设置)
  4. # 用于 usage-doc 页面生成正确的客户端配置示例
  5. # 单域名部署无需设置,留空则自动使用当前站点域名
  6. # NEXT_PUBLIC_API_BASE_URL=https://api.example.com
  7. # 自动迁移控制(生产环境默认开启)
  8. # 设置为 false 可禁用自动迁移
  9. AUTO_MIGRATE=true
  10. # 数据库连接字符串(仅用于本地开发或非 Docker Compose 部署)
  11. DSN="postgres://user:password@host:port/db_name"
  12. # API Key Vacuum Filter(真空过滤器)
  13. # - true (默认):启用。用于在访问 DB 前“负向短路”无效 key,降低 DB 压力、抵御爆破
  14. # - false:禁用(例如:需要排查问题或节省内存时)
  15. ENABLE_API_KEY_VACUUM_FILTER="true"
  16. # PostgreSQL 连接池配置(postgres.js)
  17. # 说明:
  18. # - 这些值是“每个应用进程”的连接池上限;k8s 多副本时需要按副本数分摊
  19. # - 默认值:生产环境 20,开发环境 10(可按需覆盖)
  20. DB_POOL_MAX=20
  21. DB_POOL_IDLE_TIMEOUT=20 # 空闲连接回收(秒)
  22. DB_POOL_CONNECT_TIMEOUT=10 # 建立连接超时(秒)
  23. # message_request 写入模式
  24. # - async:异步批量写入(默认,降低 DB 写放大与连接占用)
  25. # - sync:同步写入(兼容旧行为,但高并发下会增加请求尾部阻塞)
  26. MESSAGE_REQUEST_WRITE_MODE=async
  27. # message_request 异步批量参数(可选)
  28. MESSAGE_REQUEST_ASYNC_FLUSH_INTERVAL_MS=250
  29. MESSAGE_REQUEST_ASYNC_BATCH_SIZE=200
  30. MESSAGE_REQUEST_ASYNC_MAX_PENDING=5000
  31. # 数据库配置(Docker Compose 部署时使用)
  32. DB_USER=postgres
  33. DB_PASSWORD=your-secure-password_change-me
  34. DB_NAME=claude_code_hub
  35. # 应用配置
  36. APP_PORT=23000
  37. APP_URL= # 应用访问地址(留空自动检测,生产环境建议显式配置)
  38. # 示例:https://your-domain.com 或 http://192.168.1.100:23000
  39. # API 测试配置
  40. # API 测试请求超时时间(毫秒),范围 5000-120000。未设置时默认 15000。
  41. API_TEST_TIMEOUT_MS=15000
  42. # Cookie 安全策略
  43. # 功能说明:控制是否强制 HTTPS Cookie(设置 cookie 的 secure 属性)
  44. # - true (默认):仅允许 HTTPS 传输 Cookie,浏览器会自动放行 localhost 的 HTTP
  45. # - false:允许 HTTP 传输 Cookie(会降低安全性,仅推荐用于内网部署)
  46. # 警告:若设置为 true 且使用远程 HTTP 访问,浏览器将拒绝设置 Cookie 导致无法登录
  47. ENABLE_SECURE_COOKIES=true
  48. # Redis 配置(用于限流和 Session 追踪)
  49. # 功能说明:
  50. # - 限流功能:金额限制(5小时/周/月)+ Session 并发限制
  51. # - Session 追踪:5 分钟上下文缓存优化(避免频繁切换供应商)
  52. # - Fail Open 策略:Redis 不可用时自动降级,不影响服务可用性
  53. ENABLE_RATE_LIMIT=true # 是否启用限流功能(默认:true)
  54. REDIS_URL=redis://localhost:6379 # Redis 连接地址(Docker 部署使用 redis://redis:6379,支持 rediss:// TLS)
  55. REDIS_TLS_REJECT_UNAUTHORIZED=true # 是否验证 Redis TLS 证书(默认:true)
  56. # 设置为 false 可跳过证书验证,用于自签证书或共享证书场景
  57. # 仅在 rediss:// 协议时生效
  58. # API Key 鉴权缓存(Vacuum Filter -> Redis -> DB)
  59. # 说明:需要 ENABLE_RATE_LIMIT=true 且配置 REDIS_URL 才会启用 Redis 缓存;否则自动回落到 DB。
  60. API_KEY_AUTH_CACHE_TTL_SECONDS="60" # 鉴权缓存 TTL(秒,默认 60,最大 3600)
  61. ENABLE_API_KEY_REDIS_CACHE="true" # 是否启用 API Key Redis 缓存(默认:true)
  62. # Session 配置
  63. SESSION_TTL=300 # Session 过期时间(秒,默认 300 = 5 分钟)
  64. STORE_SESSION_MESSAGES=false # 会话消息存储模式(默认:false)
  65. # - false:存储请求/响应体但对 message 内容脱敏 [REDACTED]
  66. # - true:原样存储 message 内容(注意隐私和存储空间影响)
  67. # 警告:启用后会增加 Redis/DB 存储空间,且包含敏感信息
  68. STORE_SESSION_RESPONSE_BODY=true # 是否在 Redis 中存储会话响应体(默认:true)
  69. # - true:存储(SSE/JSON),用于调试/定位问题(Redis 临时缓存)
  70. # - false:不存储响应体(注意:不影响本次请求处理;仅影响后续查看 response body)
  71. # 说明:该开关不影响内部统计读取响应体(tokens/费用统计、SSE 假 200 检测仍会进行)
  72. # Dashboard 配置
  73. DASHBOARD_LOGS_POLL_INTERVAL_MS=5000 # 日志页自动刷新轮询间隔(毫秒,默认 5000,范围 250-60000)
  74. # 熔断器配置
  75. # 功能说明:控制网络错误是否计入熔断器失败计数
  76. # - false (默认):网络错误(DNS 解析失败、连接超时、代理连接失败等)不计入熔断器,仅供应商错误(4xx/5xx HTTP 响应)计入
  77. # - true:所有错误(包括网络错误)都计入熔断器失败计数
  78. # 使用场景:
  79. # - 默认关闭:适用于网络不稳定环境(如使用代理),避免因临时网络抖动触发熔断器
  80. # - 启用:适用于网络稳定环境,连续网络错误也应触发熔断保护,避免持续请求不可达的供应商
  81. ENABLE_CIRCUIT_BREAKER_ON_NETWORK_ERRORS=false
  82. # 端点级别熔断器
  83. # 功能说明:控制是否启用端点级别的熔断器
  84. # - false (默认):禁用端点熔断器,所有启用的端点均可使用
  85. # - true:启用端点熔断器,连续失败的端点会被临时屏蔽(默认 3 次失败后熔断 5 分钟)
  86. ENABLE_ENDPOINT_CIRCUIT_BREAKER=false
  87. # 供应商缓存配置
  88. # 功能说明:控制是否启用供应商进程级缓存
  89. # - true (默认):启用缓存,30s TTL + Redis Pub/Sub 跨实例即时失效,提升供应商查询性能
  90. # - false:禁用缓存,每次请求直接查询数据库(适用于调试或单机低并发场景)
  91. ENABLE_PROVIDER_CACHE=true
  92. # Fetch 连接超时配置
  93. # 功能说明:控制 TCP 连接建立超时时间(包括 DNS 查询、TCP 握手、TLS 握手)
  94. # - 默认值:30000 毫秒(30 秒)
  95. # - 取值范围:建议 5000-120000 毫秒(5-120 秒)
  96. # 使用场景:
  97. # - 缩短此值可快速切换到备用供应商,当供应商被攻击或无响应时
  98. # - 增加此值适用于网络不稳定环境,避免因网络抖动导致连接失败
  99. FETCH_CONNECT_TIMEOUT=30000
  100. # Fetch 响应头超时配置
  101. # 功能说明:控制等待响应头的超时时间(通常可近似理解为“等待首字节/首包”的上限)
  102. # - 默认值:600000 毫秒(600 秒)
  103. # - 取值范围:建议 10000-600000 毫秒(10-600 秒)
  104. # 使用场景:
  105. # - 需要支持长时间首字节等待(例如某些模型/代理的排队或冷启动)时,可适当增大
  106. # - 希望更快失败并切换供应商时,可适当减小
  107. FETCH_HEADERS_TIMEOUT=600000
  108. # Fetch 响应体超时配置
  109. # 功能说明:控制请求/响应体传输超时(undici 会监控 body 数据接收间隔,超时则中断请求)
  110. # - 默认值:600000 毫秒(600 秒)
  111. # - 取值范围:建议 10000-600000 毫秒(10-600 秒)
  112. # 使用场景:
  113. # - 流式响应或长推理模型:建议保留较大值,避免被 undici 默认 300s 先行终止
  114. # - 希望快速失败并切换供应商:可适当减小
  115. FETCH_BODY_TIMEOUT=600000
  116. MAX_RETRY_ATTEMPTS_DEFAULT=2 # 单供应商最大尝试次数(含首次调用),范围 1-10,留空使用默认值 2
  117. # Langfuse Observability (optional, auto-enabled when keys are set)
  118. # 功能说明:企业级 LLM 可观测性集成,自动追踪所有代理请求的完整生命周期
  119. # - 配置 PUBLIC_KEY 和 SECRET_KEY 后自动启用
  120. # - 支持 Langfuse Cloud 和自托管实例
  121. LANGFUSE_PUBLIC_KEY= # Langfuse project public key (pk-lf-...)
  122. LANGFUSE_SECRET_KEY= # Langfuse project secret key (sk-lf-...)
  123. LANGFUSE_BASE_URL=https://cloud.langfuse.com # Langfuse server URL (self-hosted or cloud)
  124. LANGFUSE_SAMPLE_RATE=1.0 # Trace sampling rate (0.0-1.0, default: 1.0 = 100%)
  125. LANGFUSE_DEBUG=false # Enable Langfuse debug logging
  126. # 智能探测配置
  127. # 功能说明:当熔断器处于 OPEN 状态时,定期探测供应商以实现更快恢复
  128. # - ENABLE_SMART_PROBING:是否启用智能探测(默认:false)
  129. # - PROBE_INTERVAL_MS:探测周期间隔(毫秒,默认:30000 = 30秒)
  130. # - PROBE_TIMEOUT_MS:单次探测超时时间(毫秒,默认:5000 = 5秒)
  131. # 工作原理:
  132. # - 定期检查处于 OPEN 状态的熔断器
  133. # - 使用轻量级测试请求探测供应商
  134. # - 探测成功则提前将熔断器转为 HALF_OPEN 状态
  135. ENABLE_SMART_PROBING=false
  136. PROBE_INTERVAL_MS=30000
  137. PROBE_TIMEOUT_MS=5000
  138. # Provider Endpoint Probing (always enabled)
  139. # Probes all enabled endpoints based on dynamic intervals and refreshes endpoint selection ranking.
  140. # Note: No ENABLE switch, enabled by default; tune via parameters below.
  141. #
  142. # Dynamic Interval Rules (in priority order):
  143. # 1. Timeout Override (10s): If endpoint's lastProbeErrorType === "timeout" and not recovered (lastProbeOk !== true)
  144. # 2. Single-Vendor (10min): If vendor has only 1 enabled endpoint
  145. # 3. Base Interval (default): All other endpoints
  146. #
  147. # ENDPOINT_PROBE_INTERVAL_MS controls the base interval. Single-vendor and timeout intervals are fixed.
  148. ENDPOINT_PROBE_INTERVAL_MS=60000
  149. # When no endpoints are due, scheduler will still poll DB periodically to pick up config changes.
  150. # Default: min(ENDPOINT_PROBE_INTERVAL_MS, 30000)
  151. ENDPOINT_PROBE_IDLE_DB_POLL_INTERVAL_MS=30000
  152. ENDPOINT_PROBE_TIMEOUT_MS=5000
  153. ENDPOINT_PROBE_CONCURRENCY=10
  154. ENDPOINT_PROBE_CYCLE_JITTER_MS=1000
  155. ENDPOINT_PROBE_LOCK_TTL_MS=30000
  156. # Probe method: TCP (default, no HTTP request / no access log), HEAD, GET
  157. ENDPOINT_PROBE_METHOD=TCP
  158. # 探测日志保留与清理
  159. # - 所有探测结果(成功/失败)均记录到历史表
  160. # - 自动清理任务每 24 小时运行,删除过期记录
  161. ENDPOINT_PROBE_LOG_RETENTION_DAYS=1
  162. ENDPOINT_PROBE_LOG_CLEANUP_BATCH_SIZE=10000