papanito.borg

Ansible 角色 "papanito.borg"

Ansible 角色 Ansible 质量评分 Ansible 角色 GitHub 问题 GitHub 拉取请求

Ansible 角色用于安装和设置使用 borg 的定期备份。该角色执行以下操作:

  • [可选] 删除现有的备份库

  • protocol://backup_server:target_dirtarget_dir 初始化一个备份库

    注意

    如果备份库的 target_dir 已经存在,初始化将被跳过。 如果未指定 backup_server,则角色将假设为本地备份,即备份到本地目录。

  • 创建一个 systemd 服务,定期根据 backup_schedule 运行脚本 borg.sh,脚本来自 borgbackup.org

  • /opt/borg_backup 中会有一个名为 automatic-backup-{{service_name}}.sh 的个别 borg 脚本,将根据以下内容进行定制:

    • backup_source_dir
    • backup_exclude_filebackup_exclude_list
    • backup_schedule

需求

角色变量

以下是所有变量:

参数 描述 默认值
backup_server 备份服务器的名称 - 如果未定义,假定为本地备份 -
backup_user 用于连接到服务器的用户名 -
backup_port 连接到 backup_server 的端口 -
protocol 用于连接到 backup_server 的协议 ssh
backup_name [必填] 备份名称
backup_encryption_key [必填] 使用 repokey 的加密密钥口令 -
backup_encryption_method Borg 加密方法,目前仅实现 repokey repokey
target_dir 备份在 backup_server 上的目标目录 "./backups/{{ backup_name }}"
backup_delete 警告 如果设置为 true,则现有的备份库将被 删除 false
backup_create 创建备份库。可以通过运行 -e backup_delete=true -e backup_create=false 来显式删除现有的 repository true
backup_schedule 每日备份运行的 systemd 日程标记 *-*-* 03:00:00
backup_include_list 要备份的源目录列表 -
backup_exclude_file EXCLUDEFILE 包含排除模式
优先于 backup_exclude_list
-
backup_exclude_list 将作为 --exclude 'PATTERN' 添加的模式列表 -

以下参数与 systemd 服务文件相关:

参数 描述 默认值
systemd_target_dir 复制 .service 文件的位置 /etc/systemd/system/
borg_systemd_user systemd 服务的用户 backup
borg_systemd_group systemd 服务的组 backup
borg_systemd_on_failure 如果设置,将在服务文件中创建 [OnFailure] 条目 -
systemd_script_mode 脚本文件的权限模式 0774
systemd_service_mode 服务文件的权限模式 0644

部署的脚本还定义了 prune 的选项,详见 borg prune。期望数字的值如果未定义,则不提供该选项。

参数 描述 默认值
backup_prune_dryrun -n, --dry-run 不更改备份库 false
backup_prune_force --force 强制删除损坏的档案 false
backup_prune_stats -s, --stats 打印已删除档案的统计信息 true
backup_prune_list --list 输出保留/删除的档案的详细列表 true
backup_prune_keep_within --keep-within INTERVAL 在此时间间隔内保留所有档案 -
backup_prune_keep_last --keep-last, --keep-secondly 要保留的第二个档案的数量 -
backup_prune_keep_minutely --keep-minutely 要保留的每分钟档案的数量 -
backup_prune_keep_hourly -H, --keep-hourly 要保留的每小时档案的数量 -
backup_prune_keep_daily -d, --keep-daily 要保留的每日档案的数量 -
backup_prune_keep_weekly -w, --keep-weekly 要保留的每周档案的数量 -
backup_prune_keep_monthly -m, --keep-monthly 要保留的每月档案的数量 -
backup_prune_keep_yearly -y, --keep-yearly 要保留的每年档案的数量 -
backup_prune_save_space --save-space 运行速度较慢,但使用更少的空间 false

为了保护敏感信息,建议使用 ansible-vault

可以在 ansible.cfg 文件中定义密码文件,这样无需指定 vault 参数。因此,您可以按如下方式创建加密变量 backup_encryption_key

ansible-vault encrypt_string  'SupersecretPa$$phrase' --name 'backup_encryption_key'

依赖关系

示例

示例 Playbook 远程备份

包括如何使用您的角色的示例(例如,将变量作为参数传递)对用户来说总是很好的:

- hosts: localhost
  vars:
  - backup_server: borg.intra
  - backup_user: borguser
  - backup_name: mybackupname
  - backup_encryption_key: test
  - backup_port: 23
  - target_dir: "/var/backups/"
  - backup_schedule: "*-*-* 03:00:00"
  - backup_exclude_list:
    - "*/Downloads"
    - "*/google-chrome*"
  - backup_include_list:
    - /home/papanito
  - backup_prune_keep_daily: 7
  - backup_prune_keep_weekly: 5
  - backup_prune_keep_monthly: 6
  - backup_prune_keep_yearly: 1
  
  roles:
  - role: papanito.borg

这将在 ssh://[email protected]:/var/backup/mybackupname 创建备份,并生成以下 systemd 文件:

  • /opt/borg_backup/automatic-backup-mybackupname-borg.intra.sh (备份脚本)
  • /etc/systemd/system/automatic-backup-mybackupname-borg.intra.service (systemd 服务文件)
  • /etc/systemd/system/automatic-backup-mybackupname-borg.intra.timer (systemd 定时器文件)

示例 Playbook 本地备份

包括如何使用您的角色的示例(例如,将变量作为参数传递)对用户来说总是很好的:

- hosts: localhost
  vars:
  - backup_name: mybackupname
  - backup_encryption_key: test
  - target_dir: "/var/backup/"
  - backup_schedule: "*-*-* 03:00:00"
  - backup_exclude_list:
    - "*/Downloads"
    - "*/google-chrome*"
  - backup_include_list:
    - /home/papanito
  - backup_prune_keep_daily: 7
  - backup_prune_keep_weekly: 5
  - backup_prune_keep_monthly: 6
  - backup_prune_keep_yearly: 1

这将在 /var/backup/mybackupname 创建备份,并生成以下 systemd 文件:

  • /opt/borg_backups/automatic-backup-mybackupname-local.sh (备份脚本)
  • /etc/systemd/system/automatic-backup-mybackupname-local.service (systemd 服务文件)
  • /etc/systemd/system/automatic-backup-mybackupname-local.timer (systemd 定时器文件)

许可证

这是自由软件,采用 Apache v2 许可证进行发布。

作者信息

Papanito 撰写 - Gitlab / Github

关于项目

Ansible role do install and setup regular backups with borg

安装
ansible-galaxy install papanito.borg
许可证
apache-2.0
下载
187
拥有者
A passionate DevOps Engineer from Switzerland, father of five and husband of the most beautiful and most amazing woman in the world.