# ==================== 必须配置(启动前) ==================== # 以下配置项必须在项目启动前设置 # 应用端口(默认 8084) APP_PORT=8084 # 对外访问地址,用于一键安装、CC Switch 导入、支付回调等需要生成公网 URL 的场景。 # 生产环境建议显式配置为不带内部端口的公网域名,例如 https://aether.example.com # AETHER_PUBLIC_BASE_URL=https://aether.example.com # Docker Compose 镜像(默认正式版 latest;提前测试可改 rc/beta;也可固定具体版本) # 示例: # APP_IMAGE=ghcr.io/fawney19/aether:latest # APP_IMAGE=ghcr.io/fawney19/aether:rc # APP_IMAGE=ghcr.io/fawney19/aether:beta # APP_IMAGE=ghcr.io/fawney19/aether:0.7.0-rc.1 # API Key 前缀(默认 sk) API_KEY_PREFIX=sk # Rust 日志过滤(默认 aether_gateway=info) # 示例: aether_gateway=debug,sqlx=warn RUST_LOG=aether_gateway=info # CORS 配置(跨域带 Cookie 时不要写 *,必须显式列出前端源) # 示例: http://localhost:5173,https://app.example.com # CORS_ORIGINS=http://localhost:5173 # CORS_ALLOW_CREDENTIALS=true # 登录刷新 Cookie 对同源浏览器请求和可信反代自动适配 HTTP/HTTPS。 # HTTP 自动使用兼容的 SameSite=Lax(显式 Strict 保留);HTTPS 保留原有 SameSite 配置。 # 无法确认访问协议时保留安全默认值;HTTPS 反代请正确传递 X-Forwarded-Proto。 # AUTH_REFRESH_COOKIE_SECURE 可显式覆盖自动判断,公网部署仍建议使用 HTTPS。 # 如果前后端跨站并依赖登录刷新 Cookie,必须使用 HTTPS,并配合: # AUTH_REFRESH_COOKIE_SAMESITE=None # AUTH_REFRESH_COOKIE_SECURE=true # 数据库配置(仅支持 PostgreSQL) DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_NAME=aether DB_PASSWORD= # Redis 配置 REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD= # JWT密钥(使用 ./generate_keys.sh 生成) # 用于用户登录 token 签名,更换后所有用户需重新登录 JWT_SECRET_KEY=change-this-to-a-secure-random-string # 独立加密密钥(用于加密 Provider API Key 等敏感数据) # 注意:更换此密钥后需要在管理面板重新配置所有 Provider API Key ENCRYPTION_KEY=change-this-to-another-secure-random-string # S3 备份的独立加密密钥(推荐)。未配置时为兼容旧部署,会回退到 ENCRYPTION_KEY。 # 密钥轮换前必须保留旧值,离线恢复工具需要它解密历史备份。 # AETHER_BACKUP_ENCRYPTION_KEY=change-this-to-a-dedicated-secure-random-string # 启动自举管理员(仅在当前库里还没有活动管理员时生效) # 首次启动前必须设置 ADMIN_PASSWORD;install.sh 首次生成配置时会提示输入。 ADMIN_EMAIL=admin@example.com ADMIN_USERNAME=admin123456 # ADMIN_PASSWORD= # ==================== 可选配置(有默认值) ==================== # 可信反向代理 IP/CIDR,只有这些来源发送的 X-Real-IP / X-Forwarded-For 会被采用。 # 默认仅信任本机回环代理:127.0.0.0/8,::1/128。 # Docker/Nginx 位于独立容器时,请按实际容器网络设置,例如:172.16.0.0/12。 # AETHER_TRUSTED_PROXY_CIDRS=127.0.0.0/8,::1/128,172.16.0.0/12 # VS Code Codex 云端协同(仅在叠加 aether-vscodex/docker-compose.aether.yml 时需要) # 内部 token 至少 24 字节,建议使用:openssl rand -base64 32 # AETHER_VSCODEX_INTERNAL_TOKEN=replace-with-a-long-random-secret # AETHER_VSCODEX_PUBLIC_WS_URL=wss://aether.example.com/api/vscodex/ws # AETHER_VSCODEX_ALLOWED_ORIGINS=https://aether.example.com # 启动时的数据库准备策略:auto(默认)或 verify-only # AETHER_GATEWAY_DATABASE_MODE=auto # PostgreSQL 连接池配置(默认每核 4 条、总池至少 32 条且最多 100 条;多实例部署应显式分配每实例预算) # AETHER_GATEWAY_DATA_POSTGRES_MIN_CONNECTIONS=12 # AETHER_GATEWAY_DATA_POSTGRES_MAX_CONNECTIONS=80 # 普通 PostgreSQL 连接默认语句超时 30 秒、锁等待超时 3 秒;0 显式关闭。 # 这是单条 SQL 的期限,不是整个事务总期限;迁移和历史 backfill 使用独立连接放宽。 # AETHER_GATEWAY_DATA_POSTGRES_STATEMENT_TIMEOUT_MS=30000 # AETHER_GATEWAY_DATA_POSTGRES_LOCK_TIMEOUT_MS=3000 # AETHER_GATEWAY_MAX_IN_FLIGHT_REQUESTS=2048 # 所有监听分片共用的入站 TCP 连接上限,包含握手、空闲 keep-alive 和升级后的 WebSocket。 # 未设置或 0 时按请求上限 + WebSocket 上限推导,最大 65536;显式配置也受 FD 余量限制。 # 已知 FD soft limit 时最多 max(1, (FD - 256) / 2),不是整个进程的 FD/内存保证。 # 满额的新连接在 HTTP 解析前关闭,不排队创建任务,也不会返回 HTTP 429/503。 # AETHER_GATEWAY_MAX_HTTP_CONNECTIONS=4096 # 停机先等待 HTTP 请求,再排空本地用量写入;以下期限单位为毫秒。 # 进程管理器的强杀期限应覆盖两阶段之和,再预留至少 10 秒收尾。 # AETHER_GATEWAY_HTTP_SHUTDOWN_TIMEOUT_MS=30000 # AETHER_GATEWAY_USAGE_SHUTDOWN_TIMEOUT_MS=30000 # 每客户端、每 origin 的上游空闲连接缓存;不限制活动请求或流持续时间。 # AETHER_GATEWAY_UPSTREAM_POOL_MAX_IDLE_PER_HOST=32 # AETHER_GATEWAY_UPSTREAM_POOL_IDLE_TIMEOUT_MS=15000 # AETHER_GATEWAY_REQUEST_BODY_BUFFER_BUDGET_MB=256 # 请求体按实际缓冲增长申请额度,解压同时计入输入和输出;额度不足返回 503。 # 请求体完整读取总超时默认 120000 毫秒;非零值限制在 1000-600000,显式 0 关闭。 # AETHER_GATEWAY_REQUEST_BODY_READ_TIMEOUT_MS=120000 # 上游流首包后空闲超时默认 300000 毫秒;执行配置 read_ms 优先,显式 0 关闭。 # AETHER_GATEWAY_UPSTREAM_STREAM_IDLE_TIMEOUT_MS=300000 # 流式响应诊断捕获共享预算默认 128 MiB,包含 provider/client 分配;不足时截断审计副本。 # 显式 0 关闭此类捕获;不限制协议解析、终态编码和 usage 队列的总内存。 # AETHER_GATEWAY_STREAM_CAPTURE_MEMORY_BUDGET_BYTES=134217728 # usage 诊断正文共享预算,按 JSON 堆内存估算,默认 128 MiB。 # 覆盖终态队列 seed、Redis 解码事件、数据库写入 DTO 及正文副本;额度随正文释放。 # 不足或显式 0 时先保留计费事实再舍弃正文;已有清空/禁用状态保留,其余标为截断。 # 不包含原始 Redis 批次、解码临时分配、序列化和压缩结果、协议观察缓冲或进程总内存。 # AETHER_USAGE_EVENT_CAPTURE_MEMORY_BUDGET_BYTES=134217728 # 新 usage 队列消息的完整 JSON payload 上限,默认 1 MiB;显式 0 非法。 # 超限先保留计费事实并舍弃诊断字段;仍超限或无法保留计费语义则拒绝入队,终态尝试受限落库,失败即明确失败。 # 不限制存量 Redis 消息、整个读取批次、DLQ 或进程总内存。 # usage_runtime_queue_payload_* 降级/拒绝计数包含入队和重试预校验的编码尝试,不代表唯一事件数。 # AETHER_GATEWAY_USAGE_QUEUE_PAYLOAD_MAX_BYTES=1048576 # usage worker 读取/重领共用的逻辑 payload 预留:全进程默认 128 MiB,单批目标 8 MiB。 # 按当前消息上限推导 COUNT,默认最多 8 条;预留覆盖整批处理和确认,额度不足等待。 # 当前消息上限不能超过总预留额度;单批目标不足一条时仍读一条。0 或非法值回退默认。 # 历史/其他生产者的大消息继续处理并计数,不是 RESP、实际堆内存或 DLQ 的硬上限。 # AETHER_USAGE_QUEUE_READ_PAYLOAD_BUDGET_BYTES=134217728 # AETHER_USAGE_QUEUE_READ_BATCH_PAYLOAD_BYTES=8388608 # DLQ 原文和最坏 JSON 编码独立预留默认 64 MiB,后台编码及写入最多同时 4 个任务。 # 入场前一次预留,额度占满或单条超预算立即失败并保留 pending 原消息,后续重领。 # 编码失败不阻塞同批其余正常消息;批次仍报告失败,只有成功项会被确认。 # JSON 按字符串最多 6 倍转义保守估算;不截原账务字段,不包含 Redis 命令/连接副本或 RSS。 # 0/非法值回退默认;bytes 最大约 4 GiB,jobs 最大 128。超大存量可能需调高额度后恢复。 # AETHER_USAGE_DLQ_ENCODING_BUDGET_BYTES=67108864 # AETHER_USAGE_DLQ_ENCODING_MAX_JOBS=4 # 内置 Redis 死信转移要求 Redis 7+ 及 EVAL/TYPE/XPENDING/XADD/XACK/XDEL 权限。 # stream 与 DLQ 不能同名;Cluster 还要求两键同 slot,现有默认键未自动迁移。 # 单请求解压后 Payload 上限(MiB),默认 256;显式 0 仍受 256 MiB 硬上限保护。 # AETHER_MAX_REQUEST_BODY_MB=256 # AETHER_GATEWAY_SECURITY_CACHE_TTL_MS=1000 # AETHER_MAX_REDACTED_SYNC_RESPONSE_BODY_MB=64 # AETHER_MAX_INTERNAL_BUFFERED_BODY_MB=64 # AETHER_TUNNEL_NODE_STATUS_QUEUE_CAPACITY=1024 # Tunnel relay 使用的独立 HMAC 密钥。启用 HTTP tunnel relay 或多网关 owner 转发时必须配置, # 所有网关实例必须使用同一个至少 32 字节的随机值;不要复用 JWT 或数据加密密钥。 # AETHER_TUNNEL_RELAY_AUTH_SECRET= # 旧版 /api/internal/gateway/* 控制面默认关闭。确需独立服务调用时,配置至少 32 字节的 # 独立 HMAC 密钥;不要复用 JWT、数据加密或 tunnel relay 密钥。多节点必须使用相同值和共享 Redis。 # AETHER_INTERNAL_GATEWAY_AUTH_SECRET= # 远程 relay 地址必须使用 HTTPS;HTTP 仅允许 localhost 或回环 IP。 # AETHER_TUNNEL_RELAY_BASE_URL=https://gateway-a.example.com # 跨网关 relay 解析到受控私有地址时才显式开启;默认关闭以防止被篡改的 attachment # 记录诱导网关向内网转发 relay 凭据。该开关不放宽普通 provider 的目标地址策略。 # AETHER_TUNNEL_RELAY_ALLOW_PRIVATE_TARGETS=false # 更推荐按 relay 主机名精确放行私网部署(逗号分隔,大小写不敏感);不支持通配符/后缀。 # AETHER_TUNNEL_RELAY_PRIVATE_HOST_ALLOWLIST=gateway-a.internal,gateway-b.internal # Bark 自建服务默认仅允许公网 HTTPS。确需明文 HTTP 或内网目标时分别显式开启: # AETHER_BARK_ALLOW_HTTP=false # AETHER_BARK_ALLOW_PRIVATE_TARGETS=false # 普通 Provider 反代(包括 Provider OAuth)不按 DNS 地址过滤上游,兼容任意 # Fake-IP 域名及内网 DNS。仅信任管理员配置的上游;没有严格 DNS 过滤开关。 # URL 协议、字面 IP、TLS 证书,以及隧道中继和登录 OAuth 的校验仍保留。 # 可选 Provider OAuth 客户端。Gemini CLI 和 Antigravity 默认使用内置 native-app # 客户端凭据;自定义 client ID 时必须同时配置对应的 client secret。 # 显式配置的 client secret 优先于默认值。 # AETHER_GEMINI_CLI_OAUTH_CLIENT_ID= # AETHER_GEMINI_CLI_OAUTH_CLIENT_SECRET= # AETHER_ANTIGRAVITY_OAUTH_CLIENT_ID= # AETHER_ANTIGRAVITY_OAUTH_CLIENT_SECRET= # PostgreSQL 容器调优:docker-compose.yml 已内置通用默认值,通常不用配置。 # 只有在 Postgres 独占大内存、或压测显示 DB 缓存/排序/维护任务成为瓶颈时再覆盖。 # 内置默认:shared_buffers=1GB, effective_cache_size=3GB, shm_size=512mb, # work_mem=16MB, maintenance_work_mem=256MB。 # POSTGRES_SHARED_BUFFERS=8GB # POSTGRES_EFFECTIVE_CACHE_SIZE=24GB # POSTGRES_SHM_SIZE=2gb # POSTGRES_WORK_MEM=16MB # POSTGRES_MAINTENANCE_WORK_MEM=1GB