ウェブサイト検索

Linux に Restic REST サーバーをインストールして構成する方法


Restic は、暗号化をサポートする効率的で最新の重複排除バックアップ システムです。 SFTP 接続を介して、または Amazon S3 バケットや Google Cloud ストレージなど、サポートされている多くのストレージ プラットフォームの 1 つにバックアップをローカルおよびリモートで保存できます。 Restic REST バックエンド API を使用すると、HTTP または HTTPS プロトコルを使用して Restic REST API を実装するリモート サーバーにバックアップをプッシュすることもできます。

このチュートリアルでは、Docker を使用して Linux 上に Restic REST サーバー インスタンスをデプロイおよび構成する方法を学びます。

このチュートリアルでは次のことを学びます:

  • Linux 上で Docker を使用して Restic REST サーバーをデプロイする方法
  • 認証を構成し、SSL/TLS 暗号化を使用する方法

リポジトリ ディレクトリの作成と認証情報の生成

Docker を使用して REST サーバーをデプロイする前に、リポジトリとバックアップ データをホストするディレクトリを選択する必要があります。このチュートリアルでは、HOME 内に「data」ディレクトリを作成します。このディレクトリはコンテナ内にバインドマウントされます。

$ mkdir ~/data

Docker コンテナ内で実行される Restic REST サーバーには、デフォルトで認証が有効になっています。これは、データへの不正アクセスを回避するために重要です。 Restic REST サーバー認証は .htpasswd ファイルを介して実装されます。 REST サーバーは、スナップショットが保存されているのと同じディレクトリでこのファイルを検索します。

認証資格情報を生成するには、htpasswd ユーティリティを使用する必要があります。 Fedora および Fedora ベースのディストリビューションでは、ユーティリティはhttpd-tools パッケージに含まれています。 dnf を使用してインストールできます。

$ sudo dnf install httpd-tools

Debian および Debian ベースのディストリビューションでは、代わりに、パッケージはapache2-utils と呼ばれます。

$ sudo apt-get update && sudo apt-get install apache2-utils

.htpasswd ファイルを作成するには、次のコマンドを実行します。

$ htpasswd -B -c ~/data/.htpasswd resticuser

上記のコマンドを使用して、「resticuser」ユーザー名でサーバーにアクセスするために必要な構成を作成します。コマンドの引数としてパスワードを直接指定しない場合は、対話的にパスワードを入力するように求められます。

New password: 
Re-type new password: 
Adding password for user restserver

-B オプションを使用したため、パスワードは非常に安全であると考えられる bcrypt アルゴリズムを使用してハッシュされます。

Restic REST サーバー コンテナーの実行

Restic REST サーバーは無料のオープンソース ソフトウェアです。 RESTIC アプリケーションと同様、Go で書かれ、GitHub で開発されています。 Restic REST サーバーをデプロイする最も迅速かつ簡単な方法は、Docker (または Podman) を使用して、プロジェクトによって提供されるサーバー イメージ (DockerHub で入手可能) に基づいてコンテナーを実行することです。 Restic REST サーバー コンテナーを作成して生成するには、次のコマンドを使用するだけです。

$ docker run -p 8000:8000 -v ~/data:/data:z --name restic_rest_server docker.io/restic/rest-server

コマンドで使用したオプションを見てみましょう。デフォルトでは、コンテナ内の REST サーバーはポート 8000 でリッスンするため、-p オプションを使用して、ホスト上のポート 8000 をコンテナ内の同じポートにマップしました (任意のホスト ポートを使用できました)ポート 80 などですが、特権のないポートを使用すると、root 以外のユーザーとしてコンテナを簡単に生成できます。root なしで Docker または Podman を実行するときに上位のポートを使用したい場合は、このチュートリアルを参照してください。特権)。

前述のように、バックアップを永続化するために、ホスト上の ~/data ディレクトリを、スナップショットが保存されるコンテナ内の同じディレクトリにバインドマウントしました。この例では、バインド マウントに :z オプションを使用しました。これは SELinux がアクティブな場合にのみ必要であり、コンテナからアクセスできるように、マウントされたディレクトリのコンテキストが変更されます。

リポジトリの初期化

この時点で、rest:http://reticuser:resticpassword@localhost:8000 URL を使用して、Restic クライアントで Restic リポジトリを初期化できるようになっているはずです。

restic -r rest:http://resticuser:resticpassword@localhost:8000 init

すべてが期待通りに進むと、リポジトリが生成され、正しく初期化されます。

created restic repository 0216975ff5 at rest:http://resticuser:***@localhost:8000/

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

リポジトリは正しく生成されましたが、プレーンテキストの HTTP 接続を介して資格情報を渡すことは、絶対に避けるべきことです。 HTTPS 経由で Restic REST サーバーを使用するには、SSL/TLS 証明書を使用する必要があります。その方法を見てみましょう。

安全な HTTPS 接続の使用

SSL/TLS 証明書を取得するにはさまざまな方法があります。 Restic REST サーバーをインターネットに公開する場合は、ドメインに対して有効なサードパーティ証明書を使用する必要があります。 certbot を使用すると、Let’s Encrypt から簡単に取得できます。ただし、いくつかのテストを実行したいだけの場合、または独自のネットワーク内でのみサーバーを使用する予定がある場合は、自己署名証明書を生成するだけで十分です。

ここでは、証明書 (公開キーを含む) と秘密キーの両方がすでに存在し、それぞれ public_keyprivate_key として保存されていると仮定します。 Docker コンテナ内で実行されている REST サーバーでそれらを使用する最も簡単な方法は、コンテナ内でバインド マウントしたデータ ディレクトリ (.htpasswd ファイルが配置されているのと同じディレクトリ) に両方を配置することです。 )、--tls オプションを使用してサーバーを実行します。ただし、サーバーを直接実行しているわけではないため、コンテナーの実行時に OPTIONS 環境変数を介してこのオプションを渡す必要があります。

$ docker run -p 8000:8000 -v ~/data:/data:z -e OPTIONS="--tls" --name restic_rest_server docker.io/restic/rest-server

これで、HTTPS 経由でサーバーと通信できるようになりました。この場合、無効な自己署名証明書を使用したため、 --insecure-tls オプションを指定して Restic クライアントを実行する必要があります。これにより、リポジトリへの接続時に TLS 証明書の検証がスキップされます。

$ restic -r rest:https://resticuser:resticpassword@localhost:8000 --insecure-tls init

結論

このチュートリアルでは、Linux 上で Docker を使用して Restic REST サーバーをデプロイする方法を学びました。 Restic を使用すると、SFTP 接続、サポートされているサードパーティのストレージ サービスの 1 つ、または Restic REST サーバーを使用して、ローカルまたはリモートでバックアップを作成できます。後者は SFTP と比較してパフォーマンスが向上し、追加のみの接続を実行できるようになります。 Restic の詳細と効率的なバックアップの実行方法については、ステップバイステップのチュートリアルを参照してください。

関連記事: