docs(deploy): 共享域名模式部署工件

模板:共享域名 server 块注释示例(kefu.example.com 占位,WS 升级头
落 regex location ^/t/[a-z0-9-]+/ws/——路径模式 WS 真实路径带 /t 前缀);
XFF 追加式语义注记(登录限流取末段,勿改覆盖式);--root-path 禁用
边界(root_path 前移 raw_path,路径前缀解析永不命中)。

手册:§3.6 共享域名模式(概念/零 DNS 接入流程/地址形态表/无尾斜杠
404 语义/部署注记三条);§6.5 加租户补共享域名零反代路径;1Panel
注记补 ws.conf regex 形态。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-19 19:44:46 +08:00
parent e1eae007b4
commit 9315dba228
2 changed files with 112 additions and 5 deletions
+45
View File
@@ -210,6 +210,49 @@ curl -s -i --http1.1 -H "Connection: Upgrade" -H "Upgrade: websocket" \
https://chat2.agent.hnxinyouhe.com/ws/chat | head -1 # 期待 HTTP/1.1 101
```
### 3.6 共享域名模式(单域名多租户,可选)
> 设计出处:spec `docs/superpowers/specs/2026-10-19-shared-domain-routing-design.md`。
**概念**:一个共享域名(如 `kefu.hnxinyouhe.com`)承载任意多租户——租户标识
在 URL 路径前缀 `/t/<租户slug>/` 中,与 §3.1 "每租户一域名"的 Host 模式
**共存**,解析优先级:**路径前缀 > Host**(`/t/<slug>/...` 命中即剥前缀按
slug 解析租户;不带前缀的请求照走 Host 解析——共享域名自身不是租户域名,
根路径 404 属预期)。
**接入流程(零 DNS 操作)**:
1. 平台设置(仅超管)配 `shared_widget_domain` = 共享域名(运营填一次);
2. 建租户——域名可整组留空(纯路径模式租户,创建向导支持跳过域名);
3. 配置中心 → 品牌与外观 → 嵌入代码 → 复制「共享域名形态」→ 贴到目标网站。
**地址形态**:
| 项 | 形态 |
|---|---|
| 聊天页 | `https://<共享域名>/t/<slug>/` |
| 挂件脚本 | `https://<共享域名>/t/<slug>/static/widget.js`(脚本地址即租户标识,无需新参数) |
| `data-site` 参数 | 照常可用;缺省取租户首个站点 |
**无尾斜杠语义**:`/t/<slug>`(无 `/`)→ **404**——仅带尾斜杠形态才剥离
前缀(spec §3 防歧义设计,不做 308 重定向);嵌入代码生成的就是带斜杠正确
形态,勿手工"修正"。
**部署注记**:
- 共享域名 = **一条反代**(1Panel 一站),§3.2 三件事同款:透传 Host 头、
WS 升级头单套、`client_max_body_size 5m`;WS 超时 3600s 同既有。模板
`deploy/openresty-all-kefu.conf.template` 有现成注释示例块(`kefu.example.com`
占位)。**WS 位置差异**:路径模式 WS 的真实路径是 `/t/<slug>/ws/chat`——
升级头必须落在 regex location `~ ^/t/[a-z0-9-]+/ws/`(照抄模板共享域名块;
1Panel 同样放 `proxy/ws.conf`),只配 `location /ws/` 匹配不到它(症状:
聊天页能开、WS 连不上)。
- **uvicorn 不得加 `--root-path`**:路径前缀解析在 raw_path 上做,root_path
会前移 raw_path → `/t/` 前缀永不命中,全站退化为 Host 解析 404(同模板注记)。
- **登录限流取 XFF 末段**(`app/platform/routes/auth_routes.py` `_client_ip`)
——依赖反代 `$proxy_add_x_forwarded_for` 的**追加**语义(客户端自带在前、
真实来源追加在尾);勿改成 `X-Forwarded-For $remote_addr` 覆盖式(同模板注记)。
## 4. 存量迁移(老 jc / auto 项目 → 本平台)
**前提**:老项目与本项目同机(47.254.176.10);若跨机,先把导出文件 scp 到
@@ -411,6 +454,8 @@ curl -s http://127.0.0.1:8018/health
**加租户 = 后台建租户 + 1Panel 反代加一条,不起容器**:
后台"租户管理 → 创建向导"(消费出厂档案/空档案)→ 站点绑定新域名 → 1Panel
为新域名建站反代 `127.0.0.1:8018`(§3 同款三件事)→ 完成。同一容器自动承载。
已启用共享域名(§3.6)时更省:新租户零域名、零 DNS、零反代操作——直接按
`/t/<slug>/` 形态取嵌入代码即完成接入。
### 6.6 bootstrap 复跑