菜单
本页目录

Halo 备份插件提议

Motivation

目前,我们在 Halo 2.8 中支持了整站备份、备份下载和备份恢复功能。这些功能已经满足了大部分用户的需求,但是有部分用户可能对站点的数据有更高的要求,需要定时备份、备份至第三方存储等需求。

Goals

  • 定时备份
  • 备份至第三方存储
  • 加密/解密备份文件

Non-Goals

  • 能直接指定备份进行恢复。

Use Cases

  • 定时备份,并将备份文件上传至对象存储中。

Requirements

  • Halo 版本:2.8 及以上

Draft

我们计划创建两个模型,一个模型用于控制备份(Backup)资源,一个用于同步备份文件至第三方存储(BackupSyncer)。

CronBackup

备份计划。可同时创建多个备份。它主要负责定义备份的时间间隔(根据时区),历史记录限制,存储策略及组(主要用于同步)。

当任务时间达到是,CronBackup 将会主动创建 Backup,并同时创建 Synchronization 用于同步备份。

apiVersion: migration.halo.run/v1alpha1
kind: CronBackup
metadata:
  name: cron-backup
spec:
  cron: "0 0 * * ?" # required. backup at every midnight
  timezone: GMT+8 # optional. 主要用于解析 cron 的时区
  historyLimit: 10 # optional. 最大保存多少 trigger
  storagePolicyName: my-s3 # required.
  storageGroupName: backups # optional.
status:
  lastTriggerAt: "2023.08.07T12:37:30"

Synchronization

主要用于同步备份文件到其他存储。

apiVersion: migration.halo.run/v1alpha1
kind: Synchronization
metadata:
  name: backup-synchronization
spec:
  cronBackupName: cron-backup
  backupName: a-backup
  storagePolicyName: my-s3 # required. 来源于 CronBackup.spec.storagePolicyName
  storageGroupName: backups # optional. 来源于 CronBackup.spec.storageGroupName 
status:
  startTimestamp: 2023.08.09T18:00:00
  completionTimestamp: 2023.08.09T18:00:00
  lastProbBackupPhase: pending | running | failed | succeeded
  phase: pending | syncing | failed | succeeded
  failureReason: FILE_NOT_FOUND
  failureMessage: The backup file was not found or deleted.