diff --git a/Deployment-and-Operations.-.md b/Deployment-and-Operations.-.md index cb874eb..512517a 100644 --- a/Deployment-and-Operations.-.md +++ b/Deployment-and-Operations.-.md @@ -46,7 +46,11 @@ portal → /var/lib/chorus/storage(或后续对象存储适配) | `CHORUS_SESSION_KEY` | portal 会话 | 是 | | `CHORUS_STORAGE_ROOT` | 生成物目录 | 否 | | 上游/存储超时、lease、worker 数 | 执行与优雅退出 | 否 | -| 上传和限流阈值 | 数量、大小、MIME、像素、请求频率 | 否 | +| `CHORUS_SESSION_TTL_MINUTES` | 服务端内存会话有效期 | 否 | +| `CHORUS_LOGIN_ATTEMPTS` / `CHORUS_LOGIN_WINDOW_SECONDS` | 登录节流窗口 | 否 | +| `CHORUS_MAX_PROMPT_BYTES` | prompt 字节上限 | 否 | +| `CHORUS_MAX_IMAGES` / `CHORUS_MAX_IMAGE_BYTES` / `CHORUS_MAX_UPLOAD_BYTES` / `CHORUS_MAX_IMAGE_PIXELS` | 上传边界 | 否 | +| `CHORUS_HISTORY_LIMIT` | 历史查询上限 | 否 | | 保留期与磁盘告警 | 清理和容量保护 | 否 | 生产启动必须校验必需配置、密钥长度/key_id、目录权限、超时与 lease 关系;缺失或不安全时 fail closed。`CHORUS_ENV=production` 下若检测到 AutoMigrate 或 dev-tools 注册必须拒绝启动。 @@ -97,6 +101,13 @@ journalctl -u chorus-portal -n 100 --no-pager MVP-1 同样检查 admin 8081。外部检查经 TLS/nginx 访问,不把内部端口暴露公网。 +## portal 会话与请求边界 + +MVP-0 的终端用户会话保存在单个 portal 进程内存中,Cookie 只携带签名后的不透明 session ID。部署必须保持单实例;portal 重启或切换版本会让全部终端用户重新登录。不要在负载均衡后启动多个 portal 实例,除非先建立新的共享会话设计和工单。 + +生产 Cookie 必须为 Secure/HttpOnly/SameSite=Lax。反向代理不得记录 Cookie 或 CSRF header;请求日志和 GORM SQL 使用参数化输出。JSON 正文、multipart 总量、单图字节/像素/数量和历史查询都有显式生产配置,缺少任一阈值时启动失败。 + +上传先在应用层校验,再在 generation 事务回调中保存带 owner/generation metadata 的文件。事务失败只清理本请求保存的 key;存储根目录不能作为 nginx/static 目录暴露。 ## worker 优雅退出 - 收到 TERM 后先停止认领新任务;