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.