跳转到主要内容

版本 1.5.0

概述​

1.5.0 版本引入了多项新功能,包括可选的每日摘要电子邮件通知、用于外部 API 访问且支持 IP 允许列表的作用域 API 密钥、按用户划分的服务器访问控制,和在仪表板上显示的 Duplicati 版本徽章。通知电子邮件现已采用 Markdown 格式。cron 服务默认绑定到 localhost。此外,数据库架构在启动过程中会升级到 4.3 版本。


新功能​

每日摘要​

  • 每天一封状态邮件:设置 → 每日摘要(默认关闭)会在您在浏览器时区中选择的时间,发送包含所有已知备份作业的单个本地化快照。计划时间以 UTC 格式存储。全新安装的默认值为 UTC 时间 01:00。cron 任务在该时间每天运行一次。
  • 暂停的内容:当每日摘要开启时,不会向默认电子邮件收件人发送备份和逾期电子邮件。备份通知中的其他电子邮件接收目标仍会接收匹配事件,且针对各个作业的 NTFY 仍会继续运行。这些按作业配置的设置会保持存储状态,并在该模式关闭时恢复。
  • 收件人和仪表板链接:可选的覆盖收件人可将摘要发送至电子邮件设置地址以外的位置。可选的公共仪表板 URL(或 DUPLISTATUS_PUBLIC_URL 环境变量)用于填充电子邮件中的 {duplistatus_link}。

外部 API 保护​

  • 限定作用域的 API 密钥(问题 #79):管理员可以创建 upload 和 read 密钥。它们是可选的且默认关闭,因此现有的 Duplicati 作业可以继续正常工作。密钥仅显示一次,后续通过指纹进行识别。当不强制要求密钥时,有效匹配的密钥会被接受并跟踪;无效、已禁用、已过期或作用域错误的密钥将被忽略,请求仍会继续处理。
  • IP 允许列表:独立的 CIDR 列表可以限制管理界面和外部API(/api/upload、/api/summary、/api/lastbackup*)。两个列表默认均关闭,且始终包含 127.0.0.1 和 ::1。仅当 TCP 对端是配置的受信任代理时,转发的客户端地址才会被信任。
  • 上传限制:/api/upload 具有可配置的请求正文大小上限(默认为 5 MB)以及按 IP 限制的速率。

访问与版本​

  • 按用户的服务器访问权限:设置 → 用户可以将非管理员账户限制为仅访问选定的服务器。默认仍为当前及未来的所有服务器。自定义列表会在仪表板、详情页、图表和设置列表中隐藏其他服务器。管理员始终可以查看所有服务器。
  • Duplicati 版本徽章:仪表板卡片和表格会显示每台服务器的 Duplicati 版本并与该发布通道的最新版本进行对比(stable、beta、experimental、canary)。当前版本使用浅淡文本显示;过期版本使用警告黄色显示。设置 → Duplicati 版本会显示缓存的通道发布版本,并允许管理员配置每天一次、每 12 小时或每 6 小时检查一次。
  • 投递失败:当电子邮件或 NTFY 投递失败时,管理员会在工具栏中看到一个按钮。该按钮会显示错误信息并提供跳转至对应设置页面的链接。
  • 每周数据库整理压缩:每周日 UTC 时间 04:00,cron 服务会移除已删除服务器的备份行记录、没有任何备份的服务器、残留的通知设置以及旧的每日摘要投递记录行,随后对 SQLite 执行 vacuum 操作。
  • 采用界面语言的相对时间(问题 #74):显示设置 → 格式区域包含一个可选复选框,以便在覆盖格式区域时,相对时间短语仍保留使用界面语言。

改进​

通知​

  • Markdown 电子邮件模板:成功、警告/错误、逾期和每日摘要的正文均为 Markdown 格式,并渲染为清理后的 HTML 和纯文本。未做修改的已存储默认设置将升级至新布局;自定义模板予以保留。NTFY 消息会发送 Markdown 内容并省略 GFM 表格表头行。
  • 语言跟随已登录用户:界面语言按账户存储在浏览器中,其机制与主题和显示设置相同。NEXT_LOCALE Cookie 仍用于控制登录页面和服务器端渲染。印地语区域代码现为 hi;现有的 hi-Latn Cookie 和书签仍可正常解析。

运维​

  • Cron 控制平面:Cron 服务默认绑定到 127.0.0.1(CRON_BIND_HOST)。若要绑定到其他位置,需要 CRON_SERVICE_SECRET。通过应用程序更改 cron 任务需要管理员会话路由。
  • 数据库恢复大小:“设置”→“数据库维护”支持最大 200 MB 的恢复上传。如果在前端配置了 Nginx,请将 client_max_body_size 设置为至少 256 MB,以防止代理提前截断文件。
  • 开发服务器:pnpm dev 会同时启动 Next.js(端口 8666)和 cron 服务(端口 8667)。按 CTRL-C 可同时停止两者。

错误修复​

  • 逾期告警不再在每次检查时重复发送:当另一个通知渠道已成功送达时,发送失败的渠道不会在下一次监控检查中再次发送逾期告警。在任一渠道发送成功后,均会记录单次、每日、每周或每月的窗口期。
  • 收集 Duplicati 2.4 上的日志:针对 Duplicati 2.4.0 及更高版本收集备份日志和同步计划时,不再出现 Could not find machine-id in system options 失败。配置的机器 ID 会从服务器设置中读取。
  • Docker 启动:生产环境 cron 进程在容器启动时不再立即退出,镜像构建在 overlay 文件系统上安装依赖项时也不再失败。
  • 首次登录:在全新实例上完成强制密码更改后,应用程序会打开仪表板。
  • 每日摘要计划:更改发送时间会创建一个新的触发项。即使在同一天执行了立即发送摘要或发送了其他电子邮件,该预定时间仍会正常发送。任务列表与仪表板保持一致(按每台服务器和备份名称显示最新报告)。

安全性​

探针、模板和依赖项​

  • 健康检查与 Ping:GET /api/health 不再列出 SQLite 数据表或运行仪表板查询。针对非环回客户端,/api/health 和 /api/ping 按 IP 进行了速率限制。启用任一 IP白名单 时,这些探针会接受环回地址以及来自管理员列表或外部列表的地址。
  • 电子邮件HTML:通知正文将解析为 Markdown(禁用原始 HTML),并在发送前进行清理净化。
  • 依赖项修复:nodemailer 现已升级至 10.0.9。通过更新 undici、svgo 和 image-size-next,已解决文档工作区的审计问题。

迁移说明​

从版本 1.4.2 升级​

升级至版本 1.5.0 时:

  1. 数据库迁移在启动时运行:架构 4.2 添加了每日摘要发送台账。架构 4.3 添加了基于用户的服务器访问权限。现有用户保留对每台服务器的访问权限。
  2. 新控制功能保持关闭:每日摘要、强制 API 密钥以及两个 IP白名单 默认处于关闭状态。现有的 Duplicati 上传 URL 将继续有效,直到您开启保护。
  3. 白名单始终包含环回地址:127.0.0.1 和 ::1 已合并到两个列表中,且无法在“设置”中移除。
  4. Cron 绑定到 localhost:除非设置了 CRON_BIND_HOST 和 CRON_SERVICE_SECRET,否则无法从其他主机访问 cron 端口。
  5. 默认通知模板:未修改的 Success、Warning、Overdue 和每日摘要模板将被替换为 Markdown 默认模板。自定义模板将保持原样。
  6. 依赖项:运行 pnpm install 以应用更新后的锁定文件和覆盖项。仍需要 Node.js 24 或更高版本。

支持​

获取帮助​

报告错误​

报告错误时,请包含以下信息:

  • 版本:1.5.0
  • 操作系统及版本
  • Docker/podman 版本
  • 容器类型(Docker 或 podman)
  • 错误消息和日志
  • 复现步骤

详细更新日志​

以上各节是本版本的要点说明。完整的更改列表请参阅 dev/CHANGELOG.md 中的 [1.5.0]。


许可证​

此项目根据 Apache 许可证 2.0 版 授权。

Copyright © 2026 Waldemar Scudeller Jr.