feat: 门户页卡片可配置 + 升级前域名校验 + 清理明文门户口令
按用户选择实施三件事:
1) 门户页服务卡片可配置(不再写死真实域名)
- portal/index.html 卡片区加 <!--NAVI_CARDS_START/END--> 标记,内置卡片改为通用示例
- renderPortalPage 支持数据卷 <data>/portal/cards.html 覆盖标记区间(清空即回落内置)
- 新增 GET/POST /api/portal-cards 读写该片段
- 测试:覆盖替换成功、空白片段回落内置
- 仓库内真实域名由此清零
2) 升级前必须提供跨子域单点登录变量(防止"去掉写死默认值"造成 SSO 静默失效)
- zd-host.sh 在切换前检查 PORTAL_COOKIE_DOMAIN:缺失且未传 NAVI_COOKIE_DOMAIN
时直接拒绝升级(退出码 2)并给出正确命令;PORTAL_HOME_URL 可用 NAVI_HOME_URL 补
- README 新增「升级已有部署前必须确认的两个变量」含失败表现与正确命令
3) 清理明文门户口令
- 迁移旧容器 env 时丢弃 PORTAL_PASSWORD(docker inspect 可见 = 泄露面)
- 升级后写入强随机口令并通过接口生效,部署日志只打印一次;失败不阻断升级并提示后台可改
This commit is contained in:
25
README.md
25
README.md
@ -390,6 +390,31 @@ NAVI_SSH_PASS='<密码>' bash deploy/zd-host.sh v50
|
||||
- 「从现有 nginx 配置导入」可把旧 portal-nginx 的配置整段贴进来,解析出全部域名→后端初稿
|
||||
(含认证状态、免认证路径、SSE、备案注入、自签证书、auth/portal 类型);**解析只读,确认后才保存**
|
||||
|
||||
### 升级已有部署前必须确认的两个变量
|
||||
|
||||
`deploy/zd-host.sh` 会在切换前检查:旧容器 env 里没有 `PORTAL_COOKIE_DOMAIN` 且你没传
|
||||
`NAVI_COOKIE_DOMAIN` 时**直接拒绝升级**(退出码 2),因为新版本已移除代码里的写死默认值,
|
||||
直接升级会让会话 cookie 退化为 host-only —— 表现为"在登录页登录成功,跳到别的子域却又是未登录"。
|
||||
|
||||
```bash
|
||||
NAVI_COOKIE_DOMAIN=.example.com NAVI_HOME_URL=https://example.com/ \
|
||||
NAVI_HOST=user@host NAVI_SSH_PASS='<密码>' bash deploy/zd-host.sh v54
|
||||
```
|
||||
|
||||
同一脚本还会**丢弃旧容器 env 里的明文 `PORTAL_PASSWORD`**(`docker inspect` 可见,属泄露面),
|
||||
并在升级后写入一个强随机门户口令、在部署日志里**只打印一次**;实际生效的本来就是数据卷里的
|
||||
加盐哈希,因此丢掉 env 不影响登录。想自己设口令:后台「统一登录账号」。
|
||||
|
||||
### 门户页服务卡片(可配置,不写死域名)
|
||||
|
||||
门户页的卡片区带 `<!--NAVI_CARDS_START-->` / `<!--NAVI_CARDS_END-->` 标记,两种改法:
|
||||
|
||||
1. **数据卷片段**(推荐,改完刷新即生效,无需重建镜像):把卡片 HTML 写到
|
||||
`<数据卷>/portal/cards.html`,内容会替换标记之间的部分;清空该文件即回到内置卡片。
|
||||
2. **接口**:`GET/POST /api/portal-cards`,body `{"html":"…"}`(POST 需后台令牌,空串表示重置)。
|
||||
|
||||
整页替换(含版式)仍可用 `<数据卷>/portal/index.html`。仓库内置的卡片是通用示例,不含任何真实域名。
|
||||
|
||||
### 跨子域单点登录需要的两个环境变量
|
||||
|
||||
登录 cookie 不再内置任何域名,**默认下发 host-only cookie**(登录站点自身可用)。
|
||||
|
||||
Reference in New Issue
Block a user