l3d.restic

Ansibleロール: restic

ベータ版: このロールはベータ版です。

ライセンス 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内にバックアップスクリプトとLinuxで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システムでは)管理者権限が必要であることに注意してください。

自動タスクの作成ができない場合でも、生成されたスクリプトを使用できます。たとえば、共有ホスティングサーバーにいる場合や、ウェブインターフェースを介してcronジョブを定義できる場合は、各バックアップファイルを実行するように追加してください。コマンドをCRON=trueで接頭して、スナップショットがスケジュールされたタスクによって作成されたことを示すようにしてください:

CRON=true /path/to/backup/script/backup-example.sh

インストール

ロールをインストールする方法はいくつかあります。直接GitHubリポジトリからクローンまたはダウンロードするか、Ansible Galaxyを介してインストールします:

ansible-galaxy install roles-ansible.restic

要件

  • bzip2

ロール変数

名前 デフォルト 説明
restic_url 未定義 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 バックアップスクリプトの実行に使用するシェル
restic_log_dir '{{ restic_script_dir }}/log' バックアップスクリプトのログの場所
restic_repos {} スナップショットが保存されるリポジトリの辞書。*(詳細情報: Repos)*
restic_backups {} (または []) バックアップするファイルおよびディレクトリを指定する辞書のリスト。*(詳細情報: Backups)*
restic_create_schedule false 各バックアップをスケジュールしますか?cronジョブまたはsystemdタイマー経由で設定できます。
restic_backup_now false バックアップスクリプトを即座に実行するかどうかのフラグ
restic_schedule_type systemd cronjobまたはsystemdタイマーを作成するかどうかを定義します。systemdタイマーの作成に失敗した場合、cronジョブが作成されます。
restic_dir_owner '{{ansible_user}}' 作成されたすべてのディレクトリの所有者
restic_dir_group '{{ansible_user}}' 作成されたすべてのディレクトリのグループ
restic_no_log true 隠されたansibleログを表示するためにfalseに設定します
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の最大数

リポジトリ

Resticはデータをリポジトリに保存します。このロールを使用するためには、少なくとも1つのリポジトリを指定する必要があります。リポジトリはローカルまたはリモートである可能性があります(公式のドキュメントを参照)。

SFTPリポジトリの使用

SFTPバックエンドを使用する場合、ユーザーはホストへのパスワードなしのアクセスが必要です。 SSHキーを適切に配布することを確認してください。これはこのロールの範囲外です。

利用可能な変数:

名前 必要 説明
location はい バックエンドの場所。目前は、ローカルSFTPS3Azure 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_scheduletrueに設定されている場合、このバックアップはスケジュールされ、systemdタイマー単位を作成しようとします。失敗した場合、cronジョブが作成されます。
schedule_oncalendar '*-*-* 02:00:00' systemdタイマーのための時間。randomDelaySecオプションに注意してください。デフォルトでは、バックアップは毎晩午前2時に実施されます(+0-4時間)。ただし、スケジュールされた場合のみ。
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を配列として指定することもできます。これはレガシー機能で、将来的に廃止される可能性があります。現在、名前キーはアクセスおよびバックアップファイルの命名に使用されています。

除外

バックアップの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