l3d.restic

Ansible 角色:restic

测试版: 此角色处于测试版状态。

license Ansible Galaxy

描述

Restic 是一个多功能的基于 Go 的备份解决方案,支持多种后端、去重和增量备份。

此角色在客户端上安装 restic,配置备份库,并可选择设置 systemd 定时器或 cron 作业来运行备份。此外,它还会设置可执行脚本以手动运行备份。

本项目大量借鉴了 donat-b/ansible-restichttps://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 后端的位置。目前支持 本地SFTPS3Azure BlobB2
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 是(除非 stdintrue 源目录或文件。
stdin 此备份是否是从 stdin 创建的?
stdin_cmd 否(如果 stdintrue 则为是) 生成 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 role to deploy restic and setup backups.

安装
ansible-galaxy install l3d.restic
许可证
mit
下载
247k
拥有者
Ansible roles provide a framework for fully independent, or interdependent collections of variables,tasks,files,templates &modules. Here we maintain some. enjoy