Backrestのセットアップ

Backrestの概要とインストール

概要

Backrestは、バックアップ管理のための強力なツールで、Resticを活用して安全で効率的なバックアップを提供します。この記事では、Backrestの基本的なセットアップから応用機能まで、技術的な側面を詳述します。

BackRestは、Restic(信頼性の高いバックアップソリューション)の上に構築された、ウェブインターフェース対応のバックアップ管理ツールです。Windowsを含む複数のOS(Linux、macOS、FreeBSDなど)で動作し、クラウドやNASへのバックアップを簡単に管理・操作できます。特に、スナップショットの作成、リポジトリのブラウズ、ファイルの復元といった操作が可能です。

BackRestの特長として、次の点が挙げられます。

  • WebUI:ローカルやリモートでのアクセスが可能。
  • スケジュールバックアップ:Cron式を使用して定期的なバックアップを設定できます。
  • リポジトリの健全性管理:定期的なプルーン(古いスナップショットの削除)、チェック、忘却操作を自動で実行。
  • 通知機能:SlackやDiscordと連携し、バックアップの成功や失敗を通知。
  • 柔軟なバックエンド対応:S3、B2、Azure、GCS、SFTPなど、様々なバックエンドに対応(rcloneを通じてさらに広範なクラウドストレージに対応可能)。

インストール手順

Backrestをインストールし、バックアップ環境を構築する方法を解説します。設定では、リポジトリ、バックアッププラン、スナップショットポリシーなどの基本概念が重要です。詳細はこちらで確認できます。

その他の準備

アカウント情報の管理などに、パスワードマネージャを導入しておくと役に立ちます。

  • Bitwarden まずはアカウントを作成し、ブラウザ拡張を導入しましょう。 ブラウザ拡張を導入したら、次の手順でアカウント情報の新規追加を行うことができます。
    • アイコンを選択する。
    • +を選択する。
    • Usernameを選択して、ユーザーネームを入力する。
    • 🔄️を選択して、パスワード生成する。
    • Saveを選択して、保存する。

その他、右クリックから開くコンテキストメニューや、オートフィルを活用しましょう。

Windows環境でのBackRestインストール手順

  1. Backrest のダウンロード

    • Backrestのリリースページから、最新のWindows向けバージョンをダウンロードします。
    • ダウンロードしたセットアップ用実行ファイルを実行し、C:\Program Files\Backrestフォルダ内にbackrest.exeが配置されます。
  2. 初回起動

    • backrest.exeは、初回の起動時にタスクバーにアイコンとして常駐します。
    • Manage backrest > Open WebUIを押すと、デフォルトでは127.0.0.1:9898ポートでWebUIが起動し、http://localhost:9898からアクセス可能です。

    Runas.exeより、shell:startupを実行して、ショートカットが作成されていることを確認できます。

    From:

    C:\Program Files\Backrest\backrest.exe
    

    To:

    C:\Users\gemjin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    

    確認できない場合、手動で作成しましょう。

構成の概要

各種設定をおこなうと、構成ファイルへ書き込まれます。 構成ファイルは、標準で以下の場所へ保存されています。 Windows: %appdata%\backrest\config.json

バックアップを構成する

インスタンスの設定

まずはインスタンスの設定を完了しましょう。

  • 初回起動時、インスタンス IDや、ユーザー名とパスワードの設定が求められます。これらは後でWebUIのSettingsページから変更できます。
alt

リポジトリの設定

BackRestを起動した後、WebUIからバックアップリポジトリを設定します。サポートされているバックエンド(クラウドストレージ、ローカルディスクなど)に応じて、必要な認証情報や設定を入力します。

リポジトリ URLの設定例:

  • ローカルストレージ:ローカルドライブへのバックアップが可能。
    • Local: F:\Backups\Backrest
  • クラウドバックエンド:Amazon S3、Google Cloud Storage、Backblaze B2など、多くのクラウドサービスに対応。rcloneを使用することで、さらに多様なバックエンドに対応できます。
    • Backblaze B2: b2:yourbucket
    • RClone Remote: rclone:remote:path

環境変数の設定例:

  • Backblaze B2: B2_ACCOUNT_IDB2_ACCOUNT_KEY

フラグの設定例:

  • --limit-upload 1000
  • --limit-download 1000

空だったバックアップ先リポジトリのなかに、いくつかのデータがつくられたことが確認できます。

  • バックアップ先ディレクトリパスの例: F:\Backups\Backrest\Mega-1.bak
./config
./data
./index
./keys
./locks
./snapshots

生成したID・パスワードは、安全に保存しましょう。

alt

バックアップ・プランの設定

  • Backrestのスケジュール機能を使用して、定期的なバックアップを設定します。例えば、毎時バックアップを行うには、以下のようにcron表記で「0 * * * *」を設定します。
  • cron設定はWebインターフェースから行うことができ、特定の日時にバックアップやヘルスチェックを自動実行するように設定できます。

バックアップ計画の構成では、以下のような項目を設定可能です。

- プラン名
- リポジトリ
- パス
- 除外
- スケジュール
- 保持ポリシー
- フック
- バックアップフラグ
- スケジュールポリシー
- 時計 ポリシー
- フックトリガー
- バックアップ完了時
  • 対象データのパスの例: F:\Documents\Mega-1

ここまでで、自動バックアップの初期設定が完了しました。

alt

バックアップ操作と運用管理のテスト

ここでは、バックアップの作成、保持ポリシー、リポジトリメンテナンスなど、主要な操作を説明します。これにより、システムリソースを効率的に活用しつつ、データの整合性を確保できます。各操作についての詳細な手順は、操作ガイドを参照してください。

  1. バックアップ:

    • バックアップ先のリポジトリを指定してデータを保存します。

    バックアップのテスト: 次の手順で、正しくスナップショットが生成されるかテストしましょう。

    • 対象データのパスF:\Documents\Mega-1内に何らかのデータを保存する。
    • Planを選択し、Backup Nowを選択する。
    • リポジトリ設定の際、設定したバックアップ先パス内に、スナップショットが保存される。(例: F:\Backups\Backrest\Mega-1.bak\snapshots)
    • RepositoryまたはPlanのSnapshot Browserで確認しましょう。
alt
  1. 忘却 (Forget):

    • 古いスナップショットを整理し、特定の世代のデータのみ残す設定が可能です。
  2. プルーン (Prune):

    • リポジトリに存在するデータブロックをチェックし、使用されていないデータを整理します。定期的に実行することでディスクスペースの無駄を削減できます。
  3. チェック (Check):

    • データの整合性を確認するために、リポジトリ内のすべてのデータが正しく保存されているか、破損がないかを確認します。
  4. 回復(Restore):

    • バックアップから、データの回復を試みます。

フックの使用

フックは、バックアップとメンテナンス操作中のイベントに対応するための自動化手段です。スナップショットの開始やエラーなどに応じて通知を送信したり、エラーハンドリングを実装することで、運用の効率化が図れます。

カスタムフックの実例

詳細はフック詳細で確認可能です。

応用例

特定のコマンドフックを利用し、通知の送信やシステム状態の確認を自動化する例を紹介します。エラーハンドリングや条件チェックが含まれるこれらの例は、運用の柔軟性を向上させます。詳細な設定例はこちらです。

カスタムフックは、特定の操作前後でスクリプトを自動実行させ、エラー時の対応や通知を設定するためのものです。

  1. フックの種類と設定:

    • Runs when.. で、各操作をトリガーとしてフックを設定できます。
  2. 通知テンプレート:

    • フック内では変数を用いて詳細な通知を作成可能です。例えば、{{ .Operation }}{{ .Status }}は現在の操作内容や結果を挿入する際に使用します。
      hooks:
        on-error: echo "Operation {{ .Operation }} failed with status {{ .Status }}" | mail -s "Backup Error" admin@example.com
    • 上記の設定では、エラー発生時に管理者にメール通知を送信します。

コマンドフック例:

  • バックアップ前にディレクトリを作成し、完了後に別のサーバーへ転送する例です。
    hooks:
      pre-backup: "mkdir -p /path/to/logs"
      post-backup: "rsync -avz /path/to/repo remote:/backup_location"
  • pre-backupでローカルにログディレクトリを作成し、post-backupでバックアップを別サーバーへ同期します。

その他、次のような例が挙げられています。

  • インターネット接続を確認する
  • ターゲットディレクトリが存在することを確認する
  • バッテリーが特定のレベルを超えていることを確認します

通知

以下のようなフックが用意されています。

例外処理

例外発生時の動作を定義することができます。

エラー動作の例:

  • ON_ERROR_FATAL : 操作をキャンセルし、それ以上のフックを実行しないでください。操作は失敗としてマークされ、エラーハンドラーフックがトリガーされる場合があります。

その他の設定

Docker を使った運用

BackrestをDockerコンテナとして実行する場合は、公式Dockerイメージ を使用することが可能です。Docker Composeを使って簡単にセットアップでき、他のネットワークからもアクセスできるように設定することができます。

  • docker-compose.yml
version: "3.2"
services:
  backrest:
    image: garethgeorge/backrest
    container_name: backrest
    hostname: <YOUR PROXIED FQDN HERE (example: backrest.example.com)>
    volumes:
      - ./backrest/data:/data
      - ./backrest/config:/config
      - ./backrest/cache:/cache
      - /MY-BACKUP-DATA:/userdata # mount your directories to backup somewhere in the filesystem
      - /MY-REPOS:/repos # (optional) mount your restic repositories somewhere in the filesystem.
    environment:
      - BACKREST_DATA=/data # path for backrest data. restic binary and the database are placed here.
      - BACKREST_CONFIG=/config/config.json # path for the backrest config file.
      - XDG_CACHE_HOME=/cache # path for the restic cache which greatly improves performance.
    restart: unless-stopped
    depends_on:
      - caddy
  caddy:
    image: caddy
    container_name: caddy
    ports:
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile
    restart: unless-stopped

Caddyを使ったリバースプロキシ

CaddyとBackrestを組み合わせてリバースプロキシを設定し、セキュリティを強化する方法を説明します。自動証明書管理や認証設定により、柔軟で安全なアクセス管理が可能です。手順についてはリバースプロキシの設定を参照してください。

  • caddyfile
{
    https_port 443
}

backrest.example.com {
  tls internal
  reverse_proxy backrest:9898
}

このガイドにより、バックレストの基本操作やフックの設定例、リバースプロキシの活用方法について深く理解できます。