Smail/docs/单数据库云端测试报告.md
smail 2cb8241c9d
Some checks are pending
Security Checks / security (push) Waiting to run
补充云端单数据库部署最终核验记录
2026-09-20 22:19:27 +08:00

6.8 KiB
Raw Blame History

单数据库云端测试报告

范围与结论

测试日期:2026 年 9 月 20 日。

本次要求是每套部署在 SQLite、MySQL、PostgreSQL 中三选一,业务数据与配置历史共用同一个数据库,不再附带独立 SQLite 状态库。域名和账户仅作为本次测试参数,不作为产品默认值或验收条件。

  • [✓] 首次启动不提前创建数据库,远程数据库不可用时不回退 SQLite。
  • [✓] 配置历史使用所选数据库中的 config_records,配置提交恢复使用文件事务日志。
  • [✓] 旧双库历史导入、故障阶段恢复、冲突校验与重复启动回归。
  • [✓] 云端三种真实数据库的第 1~24 版迁移、历史读写、保留策略与重新打开检查。
  • [✓] 最新程序编译部署、清理后首次初始化、配置保存、服务重启与浏览器会话恢复。
  • [✓] 专用测试数据库、账号和远程测试目录清理;其他项目保持运行。

本地自动化验证

最终执行 node test/run.mjs all -p 1 ./...,退出码为 0。该入口同时执行前端、部署和带测试覆盖层的后端测试;单独执行普通 Go 测试不能替代此入口。

证据位于本地忽略目录 test-log/cloud-clean-20260920:

  • single-database-release-final.log:最终全量测试。
  • single-database-final-targeted.log:配置、迁移及路径保护定向测试。
  • live-three-database.log:SQLite、MySQL、PostgreSQL 实机测试均为通过。
  • build-latest.log:前后端与部署工具构建。

通用测试中未提供外部环境的用例仍按自身条件跳过,不能把跳过当成实机通过。三种数据库的实机结论仅来自独立的云端测试日志。

清理与真实初始化

按本次授权只清理 Smail 测试环境,没有额外备份,没有停止共享数据库或其他项目。保留原有证书材料,清空并复用 /opt/smail/data/smail.db,文件 inode 清理前后均为 1185535。旧 smail-state.db 已移除。

部署构建版本为 single-db-20260920。真实桌面浏览器通过独立 Chrome MCP 完成数据库、管理员、域名、DNS 与证书初始化。首次配置入口通过 SSH 隧道访问;正式登录与刷新访问真实域名,不使用浏览器强制域名解析。

初始化完成后使用正常配置接口将本次 Nginx 反向代理的公网 HTTPS 端口设置为 443,内部 HTTPS 端口保持 8002。第一次初始化自动跳转曾指向内部端口;设置公网端口后,正式入口不再依赖该端口。

配置保存后 config_records 出现一条历史记录。服务重启后检查结果:

  • PRAGMA integrity_check 返回 ok。
  • 业务表、用户、会话、邮件和配置历史位于同一个 smail.db。
  • 运行目录中只有一个数据库文件,没有再次生成 smail-state.db。
  • 历史记录保留,浏览器刷新后仍显示已登录的超级管理员。

证据:clean-deploy.log、live-final-runtime.log、live-restart-mail.log。

域名、证书与邮件边界

本次主域和后台域配置正确。公共 DNS 查询确认根域、后台及随机子域均指向测试服务器;现有 MX、SPF、DKIM、DMARC 保留,没有为了匹配向导示例覆盖既有邮件路由。DKIM 公钥与初始化页面展示值一致。

证书 SAN 包含根域和泛域,TLS 主机名与信任链校验通过。Nginx 上游证书校验保持启用,项目证书同步服务执行成功,监视单元已恢复。

本机系统 DNS 曾返回代理使用的地址,命令行 HTTPS 握手失败;独立浏览器通过正常域名成功打开并登录。二者属于不同访问路径,不能据此宣称所有本机网络客户端均已通过。

邮件冒烟测试验证了本机 SMTP 接收、邮件与用户关联落库、后台列表展示,以及 SMTP TLS、IMAP TLS、POP3 TLS 的证书验证和协议欢迎响应。测试邮件最终状态为“已删除”,不在收件箱;本次未单独审计该分类策略原因,也没有放宽安全策略来制造成功结果。

本次没有验证外部收件服务的最终到达,也没有执行三种数据库各自完整的浏览器初始化、完整真实跨库切换链或 IMAP/POP3 身份认证收信,不将上述内容列为已通过。

清理与其他项目

本轮专用 MySQL、PostgreSQL 测试数据库和账号已删除,查询确认均不存在;远程 /opt/smail-single-db-test 已移除。没有清理正式测试部署的唯一业务数据库。

核对后 Scert、FDM、MySQL、PostgreSQL、Nginx 主进程 PID 与清理前一致,均处于运行状态。Smail 服务及证书同步监视单元正常。

证据:test-resource-cleanup.log。原有 云端全项目测试报告.md 的未提交修改未覆盖,本报告单独记录本轮范围。

旧部署升级说明

旧双库部署必须停服升级。导入并验证成功后,旧状态文件保留为不再打开的迁移原件 data/migration-history/smail-state.retired,不是第二个运行数据库。全新部署不生成该原件。本次未针对旧进程并发运行进行升级测试,不能跳过停服要求。

最终核验补充

同一轮测试接续核验,没有重复清库,也没有新建备份。

  • RAM 控制面确认启用的 * 类型 A 记录指向测试服务器;两台权威 DNS 均返回一致结果,邮件所需记录仍在。记录已经满足要求,本轮核验没有重复修改 DNS。
  • 从运行 DKIM 私钥导出的公钥与权威 DNS 中 default._domainkey 公钥逐字节一致。
  • 根域 HTTPS、后台 HTTPS、SMTP TLS 465、SMTP STARTTLS 587、IMAP TLS 993、POP3 TLS 995、POP3 STLS 110 均完成信任链与主机名验证,七个入口的叶证书 SHA256 完全相同,SAN 同时包含根域和泛域。
  • 云端三个二进制的 SHA256 与本轮 out/backend/*_linux_amd64 构建一致;当前源码指纹与构建时封存值一致。旧 out/package 不是本轮上传来源,不能混用其旧包作核验。
  • Smail 仍仅打开 data/smail.db,完整性检查通过,历史记录保留,其他项目主进程未改变。

前述测试邮件分类原因已查明:数据库记录为 SPF 未通过、DKIM 未通过、状态 3。测试从回环地址未经认证投递,却使用本地域名作为发件人;backend/listen/smtp_server/read_content.go 的收件防伪造分支对“本地域名且 SPF 未通过”设置状态 3,与实测一致。无需为让该测试进入收件箱而关闭防伪造保护;这不是数据库迁移丢失邮件,仍不构成正常外部投递验收。

补充证据位于同一本地忽略目录:dns-control-plane-final.log、authoritative-dns-final.log、dkim-final-match.log、completion-audit.log 和 final-database-check.log。本轮指定的云端测试部署、统一证书、DNS 保留及单数据库目标完成;这里不将测试参数或上述结果扩大为整个项目所有业务的最终验收。