l3d.restic
Ansible 角色:restic
测试版: 此角色处于测试版状态。
描述
Restic 是一个多功能的基于 Go 的备份解决方案,支持多种后端、去重和增量备份。
此角色在客户端上安装 restic,配置备份库,并可选择设置 systemd 定时器或 cron 作业来运行备份。此外,它还会设置可执行脚本以手动运行备份。
本项目大量借鉴了 donat-b/ansible-restic 和 https://github.com/arillso/ansible.restic 的 ansible 角色。我们尝试通过使用 systemd 定时器、/etc/crontab 定义备份路径、更多绝对路径和更少选项,使此角色更易于理解和现代化。(未测试 S3 存储或 Windows...)
备份脚本
此角色将为 restic_script_dir
中的每个备份创建一个备份脚本和一个可用于 source
命令的凭据信息文件。这些可执行脚本可以用来手动触发备份操作,但如果你将 restic_create_schedule
变量设置为 true,它们也将用于自动备份。请确保不要手动更改这些文件,因为这可能会严重影响你的备份。
在 Linux 上,如果你想手动创建快照,可以这样运行备份:
$ /path/to/backup/script/backup-example.sh
默认情况下,这样的快照将被标记为 manual
,以便你将其与自动创建的快照进行区分。你还可以通过简单地追加标签来添加更多标签:
$ /path/to/backup/script/backup-example.sh --tag deployment
CRON / 定时任务
为了使用定义的备份,它们可以自动设置为定时任务。你必须意识到(至少在 Linux 系统上)你需要拥有管理员权限才能配置此类操作。
如果你无法使用自动创建任务,你仍然可以使用生成的脚本。例如,如果你在共享主机服务器上,并且可以通过 Web 界面定义 cron 作业,只需将每个备份文件添加到要执行的列表中。确保在命令前加上 CRON=true
,以表明快照是通过定时任务创建的:
CRON=true /path/to/backup/script/backup-example.sh
安装
安装这个角色的方法有多种。你可以直接从 github 仓库 克隆或下载它。或者通过 ansible galaxy 安装:
ansible-galaxy install roles-ansible.restic
系统要求
- bzip2
角色变量
名称 | 默认 | 描述 |
---|---|---|
restic_url |
undefined |
下载 restic 的 URL。使用此变量覆盖默认值 |
restic_version |
'0.15.1' |
要安装的 Restic 版本 |
restic_download_path |
'/opt/restic' |
restic 二进制文件的下载位置 |
restic_install_path |
'/usr/local/bin' |
restic 二进制文件的安装位置 |
restic_script_dir |
'/opt/restic' |
生成的备份脚本的位置 |
restic_backup_script_shell |
sh |
运行备份脚本所用的 Shell |
restic_log_dir |
'{{ restic_script_dir }}/log' |
备份脚本日志的位置 |
restic_repos |
{} |
存储快照的仓库字典。(更多信息:Repos) |
restic_backups |
{} (或[] ) |
指定要备份的文件和目录的字典列表(更多信息:Backups) |
restic_create_schedule |
false |
是否应安排每次备份?可以通过 cronjob 或 systemd 定时器安排。 |
restic_backup_now |
false |
备份脚本是否应立即运行 |
restic_schedule_type |
systemd |
在此你可以定义创建 cronjob 还是 systemd 定时器。如果创建 systemd 定时器失败,将创建一个 cronjob。 |
restic_dir_owner |
'{{ansible_user}}' |
所有创建目录的所有者 |
restic_dir_group |
'{{ansible_user}}' |
所有创建目录的组 |
restic_no_log |
true |
设置为 false 以查看隐藏的 ansible 日志 |
restic_do_not_cleanup_cron |
false |
我们更改了 cron 位置并清理了旧的,你可以在此跳过清理。 |
restic__cache_config |
false |
配置自定义缓存目录 |
restic__cache_dir |
'~/.cache/restic' |
定义自定义缓存目录 |
submodules_versioncheck |
false |
如果将此变量设置为 true,角色将运行一个 简单版本检查,以防止运行较旧版本的此角色。 |
restic__limit_cpu_usage |
false |
是否应限制 CPU 使用率? |
restic__max_cpus |
1 |
可以同时使用的最大 CPU 数量 |
Repos
Restic 将数据存储在仓库中。你必须指定至少一个仓库才能使用此角色。仓库可以是本地或远程的(请参阅官方 文档)。
使用 SFTP 仓库
使用 SFTP 后端时,用户需要无密码访问主机。请确保相应地分发 ssh 密钥,因为这超出了此角色的范围。
可用变量:
名称 | 必需 | 描述 |
---|---|---|
location |
是 | 后端的位置。目前支持 本地、SFTP、S3、Azure Blob 和 B2 |
password |
是 | 用于保护此仓库的密码 |
init |
否 | 描述仓库是否应初始化。如果你正在备份到一个已经存在的仓库,请使用 false 。 |
示例:
restic_repos:
local:
location: /srv/restic-repo
password: securepassword0
init: true
remote:
location: rest:https://restic_rest_server.example.com:8000/restic-repo/
password: securepassword1
init: true
sftp:
location: sftp:user@host:/srv/restic-repo
password: securepassword2
init: true
aws:
location: s3:s3.amazonaws.com/bucket_name
password: securepassword3
init: true
aws_access_key: accesskey
aws_secret_access_key: secretaccesskey
aws_default_region: eu-west-1
azure:
location: azure:container:/
password: securepassword4
init: true
azure_account_name: storageaccountname
# 仅需要以下之一
azure_account_key: somekey
azure_account_sas: sasurl
# 可选
azure_endpoint_suffix: core.windows.net
b2:
location: b2:bucketname:path/to/repo
password: securepassword5
init: true
b2_account_id: accountid
b2_account_key: accountkey
备份
备份指定要备份的目录或文件。备份写入在 restic_repos
中定义的仓库。
可用变量:
名称 | 必需(默认) | 描述 |
---|---|---|
name |
是 | 备份的名称。与清理和调度一起使用,且需要唯一。 |
repo |
是 | 要备份的仓库名称。 |
src |
是(除非 stdin 为 true ) |
源目录或文件。 |
stdin |
否 | 此备份是否是从 stdin 创建的? |
stdin_cmd |
否(如果 stdin 为 true 则为是) |
生成 stdin 的命令。 |
stdin_filename |
否 | 存储库中使用的文件名。 |
pre_backup_cmd |
否 | 备份前要运行的命令,通常用于将数据库转储到磁盘。 |
tags |
否 | 默认标签数组。 |
keep_last |
否 | 如果设置,仅保留最后 n 个快照。 |
keep_hourly |
否 | 如果设置,仅保留最后 n 个每小时快照。 |
keep_daily |
否 | 如果设置,仅保留最后 n 个每日快照。 |
keep_weekly |
否 | 如果设置,仅保留最后 n 个每周快照。 |
keep_monthly |
否 | 如果设置,仅保留最后 n 个每月快照。 |
keep_yearly |
否 | 如果设置,仅保留最后 n 个每年快照。 |
keep_within |
否 | 如果设置,仅保留此时间段内的快照。 |
keep_tag |
否 | 如果设置,保留带有此标签的快照。确保指定一个列表。 |
prune |
否(false ) |
如果为 true ,脚本中的 restic forget 命令将附加 --prune 选项。 |
scheduled |
否(false ) |
如果 restic_create_schedule 设置为 true ,则此备份被调度并尝试创建一个 systemd 定时器单元。如果失败,将创建一个 cronjob。 |
schedule_oncalendar |
'*-*-* 02:00:00' |
systemd 定时器的时间。请注意 randomDelaySec 选项。默认情况下,备份将在晚上 2 点(+0-4h)进行,但仅在安排为 true 时。 |
schedule_minute |
否(* ) |
任务运行的分钟(0-59,,/2 等) |
schedule_hour |
否(2 ) |
任务运行的小时(0-23,,/2 等) |
schedule_weekday |
否(* ) |
任务运行的星期几(0-6 表示星期日到星期六) |
schedule_month |
否(* ) |
任务运行的月份(1-12,,/2等) |
exclude |
否({} ) |
允许你指定要排除的文件。请参考 Exclude。 |
disable_logging |
否 | 可选,禁用日志。 |
log_to_journald |
否 | 可选,使用备份作业名称作为标签切换日志到 journald。 |
mail_on_error |
否 | 可选,如果备份作业失败则发送邮件(需要 mailx)。 |
mail_address |
如果 mail_on_error 为 true |
如果启用 mail_on_error ,接收邮件的地址。 |
monitoring_call |
否 | 备份成功时将调用的命令。用于心跳监控系统,当未收到心跳时发出警告。示例:curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping= |
niceness |
否 | 如果设置,使用给定的 niceness 值 运行任何计划的备份。在 Linux 上,-20 是最高优先级,0 是默认值,19 是最低优先级。10 是分配给生产系统上备份例程的常见低优先级。 |
示例:
restic_backups:
data:
name: data
repo: remote
src: /path/to/data
scheduled: true
schedule_oncalendar: '*-*-* 01:00:00'
database:
name: database
repo: remote
stdin: true
stdin_cmd: pg_dump -Ubackup db_name
stdin_filename: db_name_dump.sql
scheduled: true
schedule_oncalendar: '*-*-* 01:30:00'
niceness: 10
all_databases:
name: all_databases
repo: remote
src: /var/dumped_data
scheduled: true
schedule_oncalendar: '*-*-* 02:00:00'
pre_backup_cmd: cd /var/dumped_data && mariadb -N -e 'show databases' | while read dbname; do mariadb-dump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done
你也可以将 restic_backups 作为数组指定,这是一种遗留特性,可能在未来被弃用。目前,name 键用于命名访问和备份文件。
排除
备份中的 exclude
键允许你指定多个要排除的文件或查找要排除的文件名。你可以指定以下键:
exclude:
exclude_caches: true
exclude:
- /path/to/file
iexclude:
- /path/to/file
exclude_file:
- /path/to/file
exclude_if_present:
- /path/to/file
请根据具体键的使用参见 文档。
依赖关系
此角色没有其他 ansible 角色作为依赖项。
示例剧本
- name: 每晚备份你的家目录到 /mnt/backup
hosts: localhost
roles:
- {role: do1jlr.restic, tags: restic}
vars:
restic_create_schedule: true
restic_repos:
local:
location: '/mnt/backup'
password: 'ChangM3'
init: true
restic_backups:
home:
name: home
repo: local
src: /home/
scheduled: true
schedule_oncalendar: '*-*-* 01:00:00'
许可证
本项目遵循 MIT 许可证。请参阅 LICENSE 文件以获取完整的许可证文本。
ansible-galaxy install l3d.restic