From a08bf908c9e9db5f6216ae1d52f9173bbd5e2298 Mon Sep 17 00:00:00 2001 From: admin <572701190@qq.com> Date: Mon, 25 May 2026 10:30:35 +0800 Subject: [PATCH] =?UTF-8?q?2026-05-25-10-21-17=20=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E5=B9=B6=E9=AA=8C=E8=AF=81=20ReVoxelSeg=20DICOM=20=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebSite/server.ts | 6 ++- WebSite/vite.config.ts | 1 + 工程分析/实现方案-2026-05-25-10-21-17.md | 58 ++++++++++++++++++++++++ 工程分析/测试方案-2026-05-25-10-21-17.md | 48 ++++++++++++++++++++ 工程分析/经验记录.md | 18 ++++++++ 工程分析/需求分析-2026-05-25-10-21-17.md | 45 ++++++++++++++++++ 6 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 工程分析/实现方案-2026-05-25-10-21-17.md create mode 100644 工程分析/测试方案-2026-05-25-10-21-17.md create mode 100644 工程分析/需求分析-2026-05-25-10-21-17.md diff --git a/WebSite/server.ts b/WebSite/server.ts index 7774bcf..d7ed622 100644 --- a/WebSite/server.ts +++ b/WebSite/server.ts @@ -3917,7 +3917,11 @@ async function startServer() { }); } else { const vite = await createViteServer({ - server: { middlewareMode: true, hmr: { port: 24679 } }, + server: { + middlewareMode: true, + hmr: { port: 24679 }, + allowedHosts: ['revoxel.huijutec.cn'], + }, appType: 'spa', }); app.use(vite.middlewares); diff --git a/WebSite/vite.config.ts b/WebSite/vite.config.ts index 0506f1b..d80c1bf 100644 --- a/WebSite/vite.config.ts +++ b/WebSite/vite.config.ts @@ -19,6 +19,7 @@ export default defineConfig(({mode}) => { // HMR is disabled in AI Studio via DISABLE_HMR env var. // Do not modify—file watching is disabled to prevent flickering during agent edits. hmr: process.env.DISABLE_HMR !== 'true', + allowedHosts: ['revoxel.huijutec.cn'], }, }; }); diff --git a/工程分析/实现方案-2026-05-25-10-21-17.md b/工程分析/实现方案-2026-05-25-10-21-17.md new file mode 100644 index 0000000..081fe22 --- /dev/null +++ b/工程分析/实现方案-2026-05-25-10-21-17.md @@ -0,0 +1,58 @@ +# 实现方案-2026-05-25-10-21-17 + +## 实现方案文档路径 + +`工程分析/实现方案-2026-05-25-10-21-17.md` + +## 修改目标 + +完成一次无源码变更的重新部署,恢复并验证 `https://revoxel.huijutec.cn/` 服务。 + +## 涉及路径 + +- `WebSite/` +- `WebSite/server.ts` +- `WebSite/vite.config.ts` +- `工程分析/需求分析-2026-05-25-10-21-17.md` +- `工程分析/实现方案-2026-05-25-10-21-17.md` +- `工程分析/测试方案-2026-05-25-10-21-17.md` +- `工程分析/经验记录.md` + +## 技术路线 + +1. 检查工作区状态、`WebSite` 脚本和当前 `tmux`/端口占用情况。 +2. 在 `WebSite` 执行 `npm run build`,确认生产构建通过。 +3. 若公网首页被 Vite host 检查拦截,将 `revoxel.huijutec.cn` 加入 Vite `allowedHosts`。 +4. 使用 `tmux` 会话 `revoxelseg-dicom` 启动或重启: + `npm run serve -- --host 0.0.0.0 --port 4000` +5. 通过本机和公网地址验证服务。 +6. 追加经验记录,提交本次工程分析文档和明确属于本次部署修复的配置变更。 + +## 执行步骤 + +- 执行前再次确认已读 `工程分析/经验记录.md`。 +- 若存在旧 `tmux` 服务,向会话发送 `Ctrl-C` 后重新启动。 +- 若不存在旧会话,创建 `tmux new-session -d -s revoxelseg-dicom`。 +- 使用 `curl` 验证: + - `http://127.0.0.1:4000/api/health` + - `http://127.0.0.1:4000/` + - `https://revoxel.huijutec.cn/` + +## 兼容性与回滚方案 + +- 若新服务启动失败,可保留构建日志并重新启动旧服务命令。 +- 若公网不可达但本机正常,需要继续排查 FRP、NPM 反向代理和域名链路。 +- 本次不改源码,回滚主要是停止新启动的 `tmux` 服务或恢复旧进程。 + +## 预计文件变更 + +- 新增本次三件套文档。 +- 追加 `工程分析/经验记录.md`。 +- `WebSite/server.ts` 和 `WebSite/vite.config.ts` 可能追加公网域名 allowedHosts。 +- `WebSite/dist/` 可能因构建更新,但不作为本次文档备份 commit 的目标。 + +## 提交与部署策略 + +- 先完成构建、部署与验证。 +- 暂存本次工程分析文档、经验记录和 allowedHosts 配置修复。 +- commit message 使用:`2026-05-25-10-21-17 部署并验证 ReVoxelSeg DICOM 服务`。 diff --git a/工程分析/测试方案-2026-05-25-10-21-17.md b/工程分析/测试方案-2026-05-25-10-21-17.md new file mode 100644 index 0000000..01363fc --- /dev/null +++ b/工程分析/测试方案-2026-05-25-10-21-17.md @@ -0,0 +1,48 @@ +# 测试方案-2026-05-25-10-21-17 + +## 测试方案文档路径 + +`工程分析/测试方案-2026-05-25-10-21-17.md` + +## 静态检查 + +- 检查 `WebSite/package.json` 中构建和服务脚本存在。 +- 检查 `tmux` 会话与 `4000` 端口状态,避免重复服务冲突。 + +## 构建检查 + +- 在 `WebSite` 执行 `npm run build`。 +- 通过 Vite/TypeScript 构建输出确认无构建错误。 + +## 关键业务场景验证 + +- 验证 `/api/health` 返回健康状态。 +- 验证本机首页返回 HTML。 +- 验证公网域名 `https://revoxel.huijutec.cn/` 返回成功 HTTP 状态。 +- 若公网首页曾返回 Vite allowedHosts 403,需要重新验证首页不再出现 host 拦截文本。 + +## 医学影像数据相关边界验证 + +- 本次不修改 DICOM/STL 解析、分割映射、导出和位姿算法。 +- 部署验证只确认服务可访问,不重新生成医学数据或导出结果。 + +## 部署验证 + +- 服务命令:`npm run serve -- --host 0.0.0.0 --port 4000`。 +- 运行载体:`tmux` 会话 `revoxelseg-dicom`。 +- 验证地址: + - `http://127.0.0.1:4000/api/health` + - `http://127.0.0.1:4000/` + - `https://revoxel.huijutec.cn/` + +## Git/Gitea 备份验证 + +- 仅提交本次文档和经验记录。 +- commit message 包含 `2026-05-25-10-21-17`。 +- 提交前检查 `git status --short`,只混入本次 allowedHosts 配置修复和文档,避免混入无关源码或运行态产物。 + +## 风险与回归关注点 + +- 如果公网域名失败但本机成功,应归类为代理/隧道链路问题。 +- 如果构建失败,应停止部署并汇报具体错误。 +- 如果端口被非本项目进程占用,应先确认占用来源再处理。 diff --git a/工程分析/经验记录.md b/工程分析/经验记录.md index 23d99ba..ecf2b23 100644 --- a/工程分析/经验记录.md +++ b/工程分析/经验记录.md @@ -1887,3 +1887,21 @@ C. 解决问题方案 D. 后续如何避免问题 自动优化类页面应优先提供可视化验证,而不是只展示候选表格。高精度 STL preview 继续使用 JSON 时,必须关注响应大小、压缩和代理限制;若后续仍遇到大模型传输问题,应考虑二进制 preview、分块流式加载或按切片局部计算,而不是继续扩大单次 JSON。 + +## 2026-05-25-10-21-17 公网部署需要同时验证首页和 API + +A. 具体问题 + +用户要求重新部署 `https://revoxel.huijutec.cn/`。本机 `4000` 服务启动后,公网 `/api/health` 返回 200,但公网首页返回 403:`Blocked request. This host ("revoxel.huijutec.cn") is not allowed.` + +B. 产生问题原因 + +当前约定的 `npm run serve` 默认未设置 `NODE_ENV=production`,Express 会挂载 Vite middleware,而不是只走 `dist/` 静态文件。Vite 6 会校验 Host,请求从公网域名进入时不在 `server.allowedHosts` 中,因此首页被 Vite 拦截;API 路由位于 Vite 中间件之前,所以 `/api/health` 仍然正常。 + +C. 解决问题方案 + +在 `WebSite/server.ts` 的 `createViteServer` 配置和 `WebSite/vite.config.ts` 中加入 `allowedHosts: ['revoxel.huijutec.cn']`,重新执行 `npm run build`,再用 `tmux` 会话 `revoxelseg-dicom` 启动 `npm run serve -- --host 0.0.0.0 --port 4000`。验证本机首页、本机 `/api/health`、公网首页和公网 `/api/health` 均返回 200。 + +D. 后续如何避免问题 + +部署验证不能只看 API 健康检查,还要同时验证首页 HTML,因为 Vite host 检查、静态资源路径和反代规则可能只影响页面入口。只要继续用 Vite middleware 方式提供公网访问,就要把公网域名写入 `allowedHosts`;如果后续改为 `NODE_ENV=production` 纯静态部署,也需要单独验证静态资源和 API 是否都通过同一反代链路。 diff --git a/工程分析/需求分析-2026-05-25-10-21-17.md b/工程分析/需求分析-2026-05-25-10-21-17.md new file mode 100644 index 0000000..8b47b91 --- /dev/null +++ b/工程分析/需求分析-2026-05-25-10-21-17.md @@ -0,0 +1,45 @@ +# 需求分析-2026-05-25-10-21-17 + +## 开始时间 + +2026-05-25-10-21-17 + +## 原始需求摘要 + +用户要求部署 `https://revoxel.huijutec.cn/` 对应的 ReVoxelSeg DICOM 项目,确保线上地址恢复可访问。 + +## 业务目标 + +- 使用当前项目约定方式构建并启动 `WebSite` 一体服务。 +- 优先沿用 `tmux` 会话 `revoxelseg-dicom`,将服务暴露在本机 `4000` 端口。 +- 验证本机健康检查、本机页面和公网域名访问状态。 + +## 输入与输出 + +- 输入:当前工作区代码、`WebSite/package.json` 脚本、已有 `tmux` 会话和网络转发链路。 +- 输出:重新部署后的本机服务与公网访问验证结果。 + +## 影响范围 + +- 运行态影响:`WebSite/dist/` 构建产物、`tmux` 中运行的 Node 服务。 +- 文档影响:本次需求分析、实现方案、测试方案和经验记录追加。 +- 不涉及源码逻辑修改、医学数据修改、Docker 镜像改动。 + +## 关键约束 + +- 必须先执行 `工程分析/代码编纂工作流.md`。 +- 部署优先使用 `cd WebSite && npm run build && npm run serve -- --host 0.0.0.0 --port 4000`。 +- 长期运行优先沿用 `tmux` 会话 `revoxelseg-dicom`。 +- 文档备份 commit message 必须包含 `2026-05-25-10-21-17`。 + +## 风险点 + +- 若 4000 端口已有进程占用,需要先识别并避免多服务冲突。 +- 若公网反代或 FRP 链路异常,本机服务可正常但 `https://revoxel.huijutec.cn/` 仍可能不可达。 +- 若构建失败,需要先定位依赖或 TypeScript/Vite 问题,不能强行重启旧包当成新部署。 + +## 默认假设 + +- 当前代码状态即为用户希望部署的版本。 +- 无需修改源码或 Docker 配置。 +- 若已有 `revoxelseg-dicom` 会话存在,可重用该会话并重启其中服务。