给 restic 套个 Web 外壳:Backrest 让我不用再手写 cron 和 restore 命令

我家那台 NAS 上跑的东西越来越多,照片、音乐、各种配置文件,备份这事儿一直是我心里的一根刺。之前折腾过 Kopia,带界面的去重备份确实省心。但命令行党里还有个更老牌的选择——restic,它快、稳、支持的后端多到离谱,就是没有界面,全靠敲命令和写 cron。今天聊的 Backrest,就是给 restic 套了个能远程访问的 Web 外壳,把”建仓库、排计划、浏览快照、恢复文件”全收进一个面板里。

是什么:restic 的 Web 编排器

Backrest 本身不是备份引擎,它站在 restic 肩膀上。restic 才是真正干活的——加密、去重、增量快照、跨后端存储,这些都是 restic 的活。Backrest 用 Go 写了一个轻量单二进制(不到 20MB),第一次启动会自动下载并管理一个它测试过版本的 restic,然后在外面套一层 Web UI 和调度逻辑。

也就是说,你得到的体验是:打开浏览器就能建仓库、加备份计划、看实时进度条、从快照里翻文件恢复;背后实际跑的还是 restic 那套成熟可靠的命令。需要更底层的控制时,你照样可以直接拿 restic CLI 去操作同一个仓库,Backrest 还能识别并导入你在外面手动做的备份。

Backrest 概览面板

为什么值得看一眼

restic 的痛点很明确:没有原生 GUI,排计划和做维护(prune/check/forget)都得自己写脚本。Backrest 刚好补上这块。它做的几件事对我来说很实用:

  • 远程访问:默认监听 9898,扔在 NAS 上,桌面浏览器直接开,不用 SSH 进去敲命令。
  • Cron 调度:每个备份计划能单独设调度表达式,还能配独立的保留策略(比如每天保留 30 天、每周保留 6 个月)。
  • 仓库健康操作自动化:forget 每次备份后跑,prune 默认每 7 天跑一次,不用自己记着维护。
  • 快照浏览与恢复:Web 里直接翻某个时间点的快照、勾选文件恢复,比记 restic 的 restore 参数轻松太多。
  • 通知和钩子:备份开始/完成/出错能推到 Discord、Slack、Shoutrrr、Gotify、Healthchecks;还能在备份前后跑自定义 shell 命令。

支持的后端就是 restic 那一整套:本地、SFTP、S3、B2、Azure、GCS,以及所有 rclone remote。这点比 Kopia 那种自带 server 的模式灵活——你本来就有一堆 rclone 配置的话,直接复用就行。

怎么跑起来

最简单是 Docker,官方镜像在 ghcr.io/garethgeorge/backrest:latest(也同步在 Docker Hub),自带 rclone 和常用 Unix 工具。一个最小 compose 大概是:

services:
  backrest:
    image: ghcr.io/garethgeorge/backrest:latest
    container_name: backrest
    volumes:
      - ./backrest/data:/data
      - ./backrest/config:/config
      - ./backrest/cache:/cache
      - /path/to/backup/data:/userdata
    environment:
      - BACKREST_DATA=/data
      - BACKREST_CONFIG=/config/config.json
      - XDG_CACHE_HOME=/cache
    ports:
      - "9898:9898"
    restart: unless-stopped

把要备份的目录挂到 /userdata 下,起来后开 http://NAS地址:9898,首次会让你建用户名和密码,建好仓库、加个计划就能用。macOS 上也能走 Homebrew tap(brew tap garethgeorge/homebrew-backrest-tap),或者下 Darwin 包用 launchd 常驻;Windows 有带托盘图标的安装包。

Backrest 添加备份计划

几个真坑

我把官方文档和 release note 过了一遍,结合 restic 生态的共性,几个值得提前知道的点:

  • 默认只绑 localhost。Docker 镜像默认 0.0.0.0:9898,但二进制安装默认是 127.0.0.1:9898。想在别的机器访问,得改 BACKREST_PORT 环境变量——而且一旦暴露到局域网,记得前面套一层带认证的代理,别裸奔。
  • 它管的是 restic 的版本。Backrest 会锁定一个它测试过的 restic 版本来保证稳定性。你如果想用系统里已有的 restic,得设 BACKREST_RESTIC_COMMAND 指过去,否则它会自作主张下载自己的。
  • prune 是重操作。默认每 7 天跑一次,大仓库会吃 CPU 和 IO,别排在你 NAS 正忙的时间点。保留策略配错的话,可能把你还想留的快照 forget 掉。
  • 备份责任还在你。Backrest 不替你验证”恢复真的能用”。restic 有 check 命令,但 Backrest 的自动健康操作默认侧重 forget/prune,定期做一次恢复演练比什么都重要。
  • 近期版本的 silent bug。v1.14.0/1.14.1 修复过”计划保留策略被静默跳过””repo ID 变更后快照文件下载失败”这类问题。所以别用太老的版本,但也别急着吃第一口新版——这类编排层的 bug 影响的是”你以为备份了其实没按策略留”。
Backrest 浏览快照恢复文件

和 Kopia 怎么选

我之前写过 Kopia,它自带 server、自带去重引擎、有自己的一套策略模型,是”一体化”选手。Backrest 是”restic + 界面”的”组合”选手。简单说:

  • 如果你已经在用 restic,或者有一堆 rclone remote 想直接复用,Backrest 几乎是零摩擦接入,还能导入你现有的仓库。
  • 如果你从零开始、想要一个自带后端和 server 的闭环,Kopia 更省事,不用先理解 restic 的那套概念。
  • 两者都支持浏览器远程访问、都支持通知和计划——这部分体验接近。

小结

Backrest 最新到 v1.14.1(2026-07-12 发的补丁版),顺手把 restic 升到了 v0.19.1,还重做了概览面板、加了托盘备份状态指示。它解决的是 restic 用户最实际的痛点:别再手写 cron 和 restore 命令了。我这种 NAS 上已经攒了一堆 rclone 配置的人,最看重它”复用现有后端 + 远程面板”这两点。备份这事儿没有银弹,但把一个靠谱的引擎包进好用的壳里,至少让我这种懒人更愿意坚持下来。

发表评论