关于Halo备份接口

Halo后台自带一个备份功能,但是只能手动点击备份,而且过期时间只能是7天。每次备份我还需要进入后台手点一次,不够方便。于是我便想着有没有自动备份的方法。

关于鉴权

按照官方文档的方法,可以在后台创建一个令牌或者使用Basic Auth(已弃用)来调取这些api

推荐在权限选项卡只授予备份与恢复管理的权限即可

抓取备份接口

创建备份的接口

登录Halo后台,找到备份选项卡,打开开发者工具,切换到Network,然后点击创建备份按钮,不难发现Halo的创建备份接口,使用刚才创建的令牌调用的方法如下

requests.post(url=f'{domain}/apis/migration.halo.run/v1alpha1/backups',
                  data='''
                    {
                        "apiVersion": "migration.halo.run/v1alpha1",
                        "kind": "Backup",
                        "metadata": {
                            "generateName": "backup-",
                            "name": ""
                        },
                        "spec": {
                            "expiresAt": "%s"
                        }
                    }
                  ''' % time,
                  headers={'content-type': 'application/json', 'Authorization': f'Bearer {token}'}, timeout=10)

其中expiresAt是到期时间,可以自定义成任意时间。

发起请求后,响应如下

{
    "spec": {
        "expiresAt": "2026-05-10T00:55:24.649Z"
    },
    "status": {
        "phase": "PENDING"
    },
    "apiVersion": "migration.halo.run/v1alpha1",
    "kind": "Backup",
    "metadata": {
        "generateName": "backup-",
        "name": "backup-xxxxxxxx",
        "creationTimestamp": "2026-05-03T00:55:24.713046547Z",
        "version": 0
    }
}

获取备份列表的接口(用于检查备份使用创建完成)

在创建备份之后,Halo会循环调用这个接口来检查备份是否完成创建

可以带上page=和size=的query传参来指定页数

requests.get(url=f'{domain}/apis/migration.halo.run/v1alpha1/backups',
             headers={'Authorization': f'Bearer {token}'}, timeout=10)

响应内容如下

{
    "page": 1,
    "size": 1000,
    "total": 1,
    "items": [
        {
            "apiVersion": "migration.halo.run/v1alpha1",
            "kind": "Backup",
            "metadata": {
                "creationTimestamp": "2026-04-30T16:00:03.095244445Z",
                "deletionTimestamp": "2026-05-03T01:16:55.256572135Z",
                "finalizers": [],
                "generateName": "backup-",
                "name": "backup-xxxxxxxx",
                "version": 5
            },
            "spec": {
                "expiresAt": "2026-05-03T16:00:02.215Z"
            },
            "status": {
                "completionTimestamp": "2026-04-30T16:00:05.691189748Z",
                "filename": "20260501000003-backup-xxxxxxxx.zip",
                "phase": "SUCCEEDED",
                "size": 37447268,
                "startTimestamp": "2026-04-30T16:00:03.138506007Z"
            }
        }
    ],
    "first": true,
    "hasNext": false,
    "hasPrevious": false,
    "last": true,
    "totalPages": 1
}

其中phase代表当前备份状态,如果是正在备份则会显示为RUNNING,完成了就是SUCCEEDED

下载备份

携带Authorization发起GET请求

{domain}/apis/console.api.migration.halo.run/v1alpha1/backups/{name}/files/{filename}

删除备份

携带Authorization发起DELETE请求

{domain}/apis/migration.halo.run/v1alpha1/backups/{name}