Smail/docs/配置管理接入修复验收.md
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

4.4 KiB

配置管理接入修复验收

本次需求

修复配置管理标题被挤成两行,以及旧版配置无法接入在线配置管理的问题。保留现有数据库、账号和证书,不以隐藏错误代替修复。

任务与结果

  • [✓] 标题与说明改为上下排列,标题独立显示一行。
  • [✓] 修正配置管理器根目录,避免重复拼接 config/config。
  • [✓] 为旧业务启动提供分区配置只读兼容快照,保留当前 SQLite 数据库引用。
  • [✓] 禁止旧版写入接口覆盖分区根文件。
  • [✓] 停机备份、预演迁移、真实配置迁移及新后端重启。
  • [✓] 脱敏备份列表使用配置读取权限,回滚预览、票据及执行仍要求近期认证。
  • [✓] 备份与审计错误局部显示,不阻挡成功加载的配置编辑区。
  • [✓] 修复卡片最小内容宽度造成的右侧导航遮挡,确认文字允许换行。
  • [✓] 前端测试、生产构建及后端全量测试通过。
  • [✓] 浏览器刷新保持登录,五个配置分区均可读取,卡片不与右侧导航重叠。

原因

旧配置尚未迁移,管理器不能启用;原启动代码又把配置目录当成服务根目录传入加载器,重复拼接路径。只生成分区文件仍不足以修复,旧业务还需要正确读取新的数据库与证书引用。

迁移后发现另一个独立问题:备份列表读取使用了高风险回滚权限,现有会话的近期认证过期时返回 403 / RECENT_AUTH_REQUIRED。前端又把附属请求失败提升为整页不可用。

现在只有脱敏代次列表读取改用 config.read,普通用户仍被拒绝。回滚的三个操作均有自动测试确认近期认证要求没有放松。

本机配置与备份

  • 当前读取:backend/config/config.json,已经是分区根配置,代次为 1。
  • 当前数据库仍为 backend/config/smail_temp.db,未清空、重建或重置账号。
  • 停机配置目录备份已归档至:test-log/archive/artifacts/config-migration-backup-20260905-175927/config。
  • 原始配置迁移备份位于 backend/config/migration-backups/,并保留 backend/config/config.json.legacy。
  • 以上目录含真实配置或凭据,仅限本机保管,不能提交或对外分享。

后续开发启动

必须重新编译当前源码再启动,不能继续运行迁移前遗留的旧后端二进制:

Set-Location D:\Desktop\Smail
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/build.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service backend

编译前先停止同名运行进程;同时只能有一个后端占用服务端口。目录整理后的运行文件为 out/backend/smail-dev.exe,启动脚本显式指定配置根目录 backend/。前端开发地址为 http://127.0.0.1:15173。

开发参数只停用本机管理员重置通道,不改用另一份数据库,不放宽线上接口鉴权。正式部署需移除此参数,保留 Windows 命名管道或 Linux 本机套接字保护。

其他旧部署的显式迁移

以下命令只适用于尚未迁移的旧部署,本机已迁移完成,不应重复执行:

Set-Location D:\Desktop\Smail
& .\out\backend\smail-config.exe --root D:\Desktop\Smail\backend
# 先停止后端并备份配置目录,再执行以下命令。
& .\out\backend\smail-config.exe --root D:\Desktop\Smail\backend --apply

默认命令仅做旧字段检查,不是完整迁移预演;完整校验及备份迁移发生在 --apply。命令本身不检测运行中的后端,停机必须由部署人员确认。

验收边界

  • 本次浏览器通过现有登录会话及 Vite 代理访问最新后端,验证的是配置读取和桌面布局;生产前端产物也已构建并复制到后端嵌入目录。
  • 未在真实账号库执行保存配置、回滚、数据库迁移或重置初始化,避免改变现有业务数据。
  • 不代表所有旧版设置写入接口均已迁移;旧写接口对分区根文件会明确拒绝,不能绕过保护。
  • 当前真实迁移只验收 SQLite 与现有证书引用。MySQL、PostgreSQL、自动 DNS 证书及正式 Linux/Windows 部署未做本次端到端验收。
  • 前端构建仍有大于 500 kB 的包体积警告,不影响本次构建成功,未在本任务内扩大重构范围。
  • 浏览器截图已直接复审;工具限制了指定磁盘路径的截图写入,不声称截图已保存至项目目录。