# Collabora IP链路部署与排障 ## 本次目标 将文档预览/编辑链路统一收口到 `http://172.16.0.59:5173`,避免 `nas.7bm.co` 与内网 IP 混用导致: - Collabora iframe 打不开 - `chrome-error://chromewebdata/` - `refused to connect` / `拒绝连接` - WOPI 已经 200,但浏览器侧仍然失败 ## 最终生效配置 ### 1. 前端环境变量 文件:`legal-platform-frontend/.env` 关键项: ```env API_BACKEND_TARGET=http://172.16.0.59:8096 APP_URL=http://172.16.0.59:5173 DOCUMENT_URL=http://172.16.0.59:8096/docauditai/ COLLABORA_URL=http://172.16.0.59:5173 ``` 说明: - `APP_URL` 决定 WOPI 回调地址 `WOPISrc` - `COLLABORA_URL` 决定 iframe 中加载的 `cool.html` - 如果这里仍然写域名,最终会重新生成域名链路 ### 2. nginx 代理 文件:`deploy/collabora-proxy/conf.d/collabora.conf` 必须代理这些路径: - `/wopi/` - `/browser/` - `/cool/` - `/coolws/` - `/hosting/` - `/loleaflet/` - `/` 关键点: - Collabora 相关 `Host` / `X-Forwarded-Host` 统一写成 `172.16.0.59:5173` - `proxy_redirect` 统一改写到 `http://172.16.0.59:5173/` - `/coolws/` 不能漏,否则 websocket 子通道会 404 ### 3. Collabora 白名单与 CSP 文件:`/home/wren-dev/Porject/collabora-backup/coolwsd-config/coolwsd.xml` 关键项: ```xml frame-ancestors http://172.16.0.59:5173; ``` ```xml http://172\.16\.0\.59:5173 ``` 说明: - 不再保留 `nas.7bm.co`,避免域名/IP 混用 - 不再使用带端口正则的 alias,之前会触发 `Bad URI syntax` / `Invalid regular expression` ### 4. Compose 参数 文件:`/home/wren-dev/Porject/collabora-backup/docker-compose.yml` 当前使用: ```yaml extra_params=--o:ssl.enable=false --o:ssl.termination=false --o:logging.level=warning --o:security.seccomp=false ``` 说明: - 已移除旧的 `--o:net.frame_ancestors=http://*` - 该参数会污染最终 CSP,导致浏览器报 `frame-ancestors` 违规 ## 本次修复过的问题 ### 问题 1:登录跳转到了 `localhost:5193` 现象: - 访问 `5173` 后,响应头返回 `Location: http://localhost:5193/login?...` 原因: - 代理层转发头不完整 - Next 在开发环境下生成了错误绝对跳转 处理: - 补 `X-Forwarded-Host` / `X-Forwarded-Port` - 补 `proxy_redirect` ### 问题 2:`/coolws/` 没代理 现象: - `WOPI` 已通 - Collabora 页面仍起不来 原因: - `coolws/newchild` 被打到 Next,返回 404 处理: - 为 `/coolws/` 增加代理到 `127.0.0.1:9980` ### 问题 3:allowed host 正则写坏 现象: - Collabora 日志出现: - `Invalid regular expression for allowed host` - `Bad URI syntax` 原因: - 使用了复杂 alias 正则: - `http://172\.16\.0\.[0-9]{1,3}(:[0-9]{1,5})?` 处理: - 改为显式 host,不再用该正则 ### 问题 4:浏览器控制台报 CSP / frame-ancestors 错误 现象: - `Framing 'http://172.16.0.59:5173/' violates Content Security Policy directive...` - `chrome-error://chromewebdata/` 原因: - Compose 里的旧 `net.frame_ancestors=http://*` - `coolwsd.xml` 里的 CSP 与实际 host 混用 - 旧标签页中还混有 `nas.7bm.co` 处理: - 删除旧 `net.frame_ancestors` - `content_security_policy` 只允许 `http://172.16.0.59:5173` - 重建容器而不是简单 restart ## 重启方式 ### 前后端 ```bash ./leaudit.sh restart ``` ### Collabora ```bash cd /home/wren-dev/Porject/collabora-backup docker-compose up -d --force-recreate collabora ``` ### 代理 ```bash docker restart leaudit-collabora-proxy ``` ## 验证命令 ### 前端入口 ```bash curl -I http://172.16.0.59:5173/ ``` 期望: - 跳转到 `http://172.16.0.59:5173/login?...` ### Collabora 发现接口 ```bash curl -I http://172.16.0.59:5173/hosting/discovery ``` 期望: - `200 OK` ### Collabora 页面入口 ```bash curl -I http://172.16.0.59:5173/browser/dist/cool.html ``` 期望: - `200 OK` - `Content-Security-Policy` 里只出现 `172.16.0.59:5173` ### WOPI 文件接口 由页面实际触发,日志里应看到: - `GET /wopi/files/... 200` ## 浏览器测试要求 为避免旧的 `nas.7bm.co` 页面上下文污染: 1. 关闭旧标签页 2. 打开无痕窗口 3. 直接访问 `http://172.16.0.59:5173/login` 4. 登录后进入文档页 5. 不要从 `nas.7bm.co` 页面里跳转到 IP 页面 ## 已做的前端小收口 文件:`legal-platform-frontend/lib/services/collabora.config.server.ts` 处理: - 移除了 `ui_defaults` 中的 `SavedUIState=false` 原因: - Collabora 会打印:`unknown UI default's component SavedUIState` - 该项不是必须,去掉后能减少无关告警 ## 后续建议 - 如果后面要回切域名方案,不要与 IP 方案混用 - 需要整套一起回切:前端 `.env`、nginx、Collabora host/CSP 同步改回 - 如果当前 IP 方案稳定,可单独保留一份 docker 与 nginx 配置快照