docs: add portal configuration and verification (#11)

ila
2026-08-21 00:40:51 +08:00
parent f9f5d67d06
commit 989febfbe0
+16
@@ -37,6 +37,13 @@
| `CHORUS_SESSION_KEY` | portal 会话,必须与主密钥分离 |
| `CHORUS_STORAGE_ROOT` | 受保护生成物目录 |
| `CHORUS_ENV` | `development/test/production`,生产强制安全开关 |
| `CHORUS_SESSION_TTL_MINUTES` | 会话有效分钟数;生产必填 |
| `CHORUS_LOGIN_ATTEMPTS` / `CHORUS_LOGIN_WINDOW_SECONDS` | 单远端地址登录窗口限制;生产必填 |
| `CHORUS_MAX_PROMPT_BYTES` | prompt UTF-8 字节上限;生产必填 |
| `CHORUS_MAX_IMAGES` | 单任务图片数量上限;生产必填 |
| `CHORUS_MAX_IMAGE_BYTES` / `CHORUS_MAX_UPLOAD_BYTES` | 单图/整次 multipart 字节上限;生产必填 |
| `CHORUS_MAX_IMAGE_PIXELS` | 单图解码像素上限;生产必填 |
| `CHORUS_HISTORY_LIMIT` | 单次历史查询上限;生产必填 |
| `GITEA_TOKEN` | Wiki/工单操作,不影响产品服务 |
## 第一次运行
@@ -136,6 +143,8 @@ go run ./cmd/chorus-mock-provider
生产安全 Client 始终拒绝回环/私网 Provider URL。自动化端到端测试使用构造公共域名解析和受控 `DialContext` 把请求送到进程内 mock,不应为了让 portal 直连本机 mock 而放宽 SSRF 规则。
种子密码从 #11 起保存为 `bcrypt:v1:<hash>`。已有无版本构造哈希不会被登录兼容;使用同一构造邮箱和本次选择的密码重新运行 `go run ./cmd/chorus-seed`,会更新密码哈希而不新增用户。开发/测试未提供 session key 时进程随机生成临时 key,重启后会话失效;生产必须显式提供至少 32 字节且与 Provider 主密钥分离的 key。
### 5. 启动 portal(MVP-0)
```powershell
@@ -188,6 +197,13 @@ $env:CHORUS_TEST_DSN = $null
```
- Provider:全部 retryable 类别使用 mock,不消耗真实额度。
- Portal:真实 MySQL 8 覆盖登录/退出、session/CSRF 轮换、用户作用域幂等、pending 提交、上传边界、任务与文件跨用户授权、终态和 HTMX 401;测试结束 generation/input/output 和构造用户必须为 0。
```powershell
$env:CHORUS_TEST_DSN = $env:CHORUS_DSN
go test -v -count=1 ./portal/handler/... ./portal/service/... ./portal/session/... ./portal/auth/...
$env:CHORUS_TEST_DSN = $null
```
- SSRF:IPv4/IPv6 私网、DNS rebinding、redirect 链、环境代理、结果 URL。
- 安全:密码/session/CSRF、登录节流、跨用户任务与文件、错误脱敏、密钥轮换。
- 浏览器:HTMX 动态状态、终态停止、认证过期、网络错误;375/768/1024,无主区域横向滚动,键盘和 reduced-motion。