配置
配置全部通过环境变量读取。从 .env.example 开始:
cp .env.example .env
.env.example 中的每个变量都在本页有文档,分组与文件一致。表中默认值即
.env.example 中的值;"未设置"表示默认为空,对应功能在填入前保持关闭。
真实部署必改项
将 Manor AI 暴露到本地评估之外前,务必修改:
| 变量 | 用途 |
|---|---|
JWT_SECRET_KEY | 签名用户会话。使用足够长的随机值。 |
DATABASE_URL | 异步 PostgreSQL 连接串。 |
DATABASE_URL_SYNC | Alembic 使用的同步 PostgreSQL 连接串。 |
REDIS_URL | Redis 缓存与 broker 地址。 |
MINIO_ACCESS_KEY / MINIO_SECRET_KEY | 对象存储凭据。 |
PUBLIC_BASE_URL | Webhook 与生成媒体回调使用的公网 URL。 |
APP_URL | 浏览器访问的 Web URL。 |
部署模式与默认模型
| 变量 | 默认值 | 说明 |
|---|---|---|
DEPLOYMENT_MODE | oss | oss 即自托管模式。所有自托管部署保持 oss 不变。 |
LLM_MODEL | anthropic/claude-sonnet-4 | 默认模型 id。用户和实体可在设置中覆盖。 |
自托管 Manor AI 采用 BYOK(自带密钥):模型调用只使用在设置中配置的 提供商凭据。不要把模型 API 密钥写进镜像或源码仓库。
数据库
| 变量 | 默认值 | 说明 |
|---|---|---|
DATABASE_URL | postgresql+asyncpg://manor:manor_secret@postgres:5432/manor | API 与 worker 使用的异步 SQLAlchemy URL。 |
DATABASE_URL_SYNC | postgresql://manor:manor_secret@postgres:5432/manor | Alembic 迁移使用的同步 URL,须与 DATABASE_URL 指向同一数据库。 |
DATABASE_POOL_SIZE | 5 | 每个 API 进程保持的连接数。 |
DATABASE_MAX_OVERFLOW | 2 | 突发负载下允许超出池大小的额外连接数。 |
DATABASE_POOL_TIMEOUT | 10 | 等待空闲连接的秒数,超时报错。 |
DATABASE_POOL_RECYCLE | 1800 | 池中连接的回收周期(秒)。 |
连接池默认值按单机部署设定。若调高 API_WORKERS,注意每个 worker 进程有
独立连接池:总连接数 ≈ API_WORKERS × (DATABASE_POOL_SIZE + DATABASE_MAX_OVERFLOW) 再加 Celery worker。总和须低于 PostgreSQL 的
max_connections。
Redis
| 变量 | 默认值 | 说明 |
|---|---|---|
REDIS_URL | redis://redis:6379/0 | 缓存、Celery broker、限流后端与在线状态存储。 |
REDIS_MAXMEMORY | 0 | Redis 服务内存上限。0 为不限制;共享主机建议设置如 512mb 的上限。 |
REDIS_MAXMEMORY_POLICY | noeviction | 达到上限后的淘汰策略。若能接受缓存淘汰,可将有限的 REDIS_MAXMEMORY 搭配 allkeys-lru。 |
同一 Redis 实例的 /1 库存放 JuiceFS 元数据(见
存储);若指向外部 Redis,请保持 /0 与
/1 分离。
API 服务调优
单机应急控制项。默认值保守、适合评估;调高前先测量 CPU、p95 延迟和数据库 连接数。
| 变量 | 默认值 | 说明 |
|---|---|---|
API_WORKERS | 1 | Uvicorn worker 进程数。 |
API_LIMIT_CONCURRENCY | 120 | 单 worker 并发连接上限,超出即拒绝请求。 |
API_BACKLOG | 256 | 等待连接的 socket backlog。 |
API_TIMEOUT_KEEP_ALIVE | 5 | Keep-alive 超时(秒)。 |
限流
所有限流器默认关闭(便于本地评估)。任何面向真实用户的共享部署都应启用。
| 变量 | 默认值 | 说明 |
|---|---|---|
RATE_LIMIT_ENABLED | false | 通用 API 限流总开关。 |
API_RATE_LIMIT_REQUESTS | 200 | 每窗口每客户端允许的请求数。 |
API_RATE_LIMIT_WINDOW_SECONDS | 60 | 通用限流窗口长度。 |
CHAT_RATE_LIMIT_ENABLED | false | 聊天路由(成本最高)的独立限流器。 |
CHAT_RATE_LIMIT_REQUESTS | 30 | 每窗口允许的聊天请求数。 |
CHAT_RATE_LIMIT_WINDOW_SECONDS | 60 | 聊天限流窗口长度。 |
REDIS_RATE_LIMIT_ENABLED | false | 将限流状态存入 Redis,使限额在所有 API worker 间共享(而非按进程独立)。API_WORKERS > 1 时务必启用。 |
降级模式
部署过载时的紧急刹车。DEGRADED_MODE=true 时,高成本路由返回 503
(code=degraded_mode),健康检查、配置、登录和基础读取保持可用。
| 变量 | 默认值 | 说明 |
|---|---|---|
DEGRADED_MODE | false | 总开关。 |
DEGRADED_DISABLE_CHAT_STREAM | true | 降级期间禁用流式聊天。 |
DEGRADED_DISABLE_SANDBOX | true | 降级期间禁用沙箱执行。 |
DEGRADED_DISABLE_MEDIA_GENERATION | true | 降级期间禁用图像/视频生成。 |
DEGRADED_DISABLE_LARGE_UPLOADS | true | 降级期间拒绝大文件上传。 |
四个 DEGRADED_DISABLE_* 开关仅在 DEGRADED_MODE=true 时生效,用于选择
刹车覆盖哪些能力。