GPGで複製を使用してデータをDigitalOcean Spacesにバックアップする方法

前書き

DuplicityはPythonで書かれたコマンドラインユーティリティで、ローカルまたはリモートリポジトリに保存するための暗号化されたtarボリュームを生成します。 GNU Privacy Guard(GPG)を使用してアーカイブを暗号化および署名し、rsyncアルゴリズムを使用して、スペース効率の良い増分バックアップを作成します。 バックアップは、ローカルファイルストレージ、SFTPまたはFTPサーバー、S3互換オブジェクトストアなど、さまざまなリポジトリに送信できます。

このチュートリアルでは、Duplicityをインストールし、プロジェクトデータをS3互換オブジェクトストレージサービスであるDigitalOcean Spacesにバックアップする方法について説明します。 この目的のためにSpacesリポジトリを作成し、データを手動でバックアップする方法について説明します。 最後に、増分および毎週の完全バックアップスケジュールを設定するスクリプトを作成して、このプロセスを自動化します。

前提条件

このチュートリアルでは、次のものが必要です。

  • Ubuntu 16.04サーバー1台。https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04での初期サーバーセットアップチュートリアル]に従ってセットアップします。 このチュートリアルを実行した後、ルート以外のsudoユーザーが必要になります。

  • DigitalOceanスペースとAPIを作成する方法によって作成されたDigitalOceanスペースとAPIキーキー]。 スペースの次の資格情報を必ずメモしてください。

  • アクセスキー

  • 秘密鍵

  • スペースURL

  • バケット名

Spaceをセットアップし、この情報を入手したら、Duplicityのインストールに進むことができます。

Duplicityのインストール

Duplicityの最新バージョンを入手するには、https://launchpad.net/%7Eduplicity-team/+archive/ubuntu/ppa [Duplicity release Personal Package Archive(PPA)]からインストールできます。

sudo apt-add-repository ppa:duplicity-team/ppa

また、 `+ python-boto `パッケージをインストールして、Amazon Web Servicesへのインターフェースを提供するPythonパッケージであるhttps://github.com/boto/boto[Boto]にアクセスします。 これにより、SpacesのAWS S3 APIとの相互運用性を活用できます。 このバージョンは、Ubuntuサーバーイメージに同梱されているPythonのバージョンと互換性があるため、公式のUbuntuリポジトリから ` python-boto +`をインストールします。 Boto3を使用する場合は、ソースからインストールできますが、Python 3.3+との機能互換性はまだ開発中です。

「+ python-boto 」に加えて、https://www.digitalocean.com/community/を生成するのに役立つツールであるhttp://www.issihosts.com/haveged/[Haveged]もインストールします。 GPGキーを作成するために必要なtutorials / how-to-setup-additional-entropy-for-cloud-servers-using-haveged [_entropy_] これらのキーを作成するために、GPGはシステムのエントロピーまたは予測不可能性のレベルを利用します。 ` haveged +`をインストールすると、キーの作成プロセスがスピードアップします。

これらのパッケージをインストールする前に、ローカルリポジトリインデックスを更新します。

sudo apt-get update

次に、次のように入力して、「+ duplicity 」、「 python-boto 」、および「 haveged +」をインストールします。

sudo apt-get install duplicity haveged python-boto

インストールを確認するプロンプトが表示されたら、「+ y +」を押します。 これでシステムにDuplicityがインストールされ、プロジェクトフォルダーと構成ファイルを作成する準備が整いました。

バックアップディレクトリの作成

バックアッププロセスの仕組みを示すために、非ルートユーザーのホームディレクトリにバックアップ用のディレクトリとサンプルデータを作成します。 ディレクトリを「+ sammy_backups +」と呼びます:

mkdir ~/

次に、 `+ historical sharks.txt`というサンプルプロジェクトファイルを作成します。

echo "The ancient Megalodon shark reached lengths of up to 59 feet, and is widely regarded as one of history's most fearsome predators." >> ~//historical_sharks.txt

バックアップディレクトリとテストデータを配置したら、非ルートユーザー用のGPGキーを生成する準備ができました。

GPGキーの生成

次に、ユーザーのGPGキーペアを生成します。 情報の安全な送信を確保するために、GPGは公開キー暗号化を使用します。 これが私たちの文脈で意味することは、データが公開鍵に暗号化され、リポジトリに送信されるということです。 GPGキーと暗号化の詳細については、https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messagesのチュートリアルを参照してください。メッセージの暗号化]。

キーリングは、キーを生成するときに作成される `〜/ .gnupg +`というディレクトリのユーザーアカウントに保存されます。 ` duplicity +`コマンドを使用するとき、キーペアを指す公開キー識別子を指定します。 この識別子を使用すると、データの暗号化と秘密鍵の所有権を検証する署名が有効になります。 暗号化されたデータはレポジトリに送信されます。レポジトリでは、ファイル自体からファイルサイズやアップロード時間よりもはるかに多くを推測することは困難です。 これによりデータが保護され、ユーザーは秘密キーを使用していつでも完全に復元できます。

GPGはデフォルトでサーバーにインストールする必要があります。 これをテストするには、次を入力します。

gpg --version

GPGがインストールされていることを確認したら、次のようにキーペアを生成できます。

gpg --gen-key

キーを構成するための一連の質問が表示されます。

  • キーのタイプ。 *(1)RSAおよびRSA(デフォルト)*を選択します。

  • キーのサイズ。 「+ ENTER +」を押すと、デフォルトサイズの* 2048 *ビットが確定します。

  • キーの有効期限。 * 1y *と入力すると、1年後に期限が切れるキーが作成されます。

  • 選択を確認します。 これを行うには、* y *を入力します。

  • ユーザーID /実名。 あなたの名前を入力してください*。

  • 電子メールアドレス。 メールアドレスを入力してください*。

  • コメント。 ここで、署名とともに表示される*オプションのコメント*を入力できます。

  • (N)ame、©omment、(E)mail、または(O)kay /(Q)uit? 続行する準備ができたら、* O *と入力します。

  • パスフレーズを入力します。 ここに*パスフレーズ*を入力するよう求められます。 このパスフレーズに注意してください。 このチュートリアルの残りの部分では、「++」と呼びます。

これらの設定を作成した後、 `+ gpg `はシステムのエントロピーのレベルに基づいてキーを生成します。 ` haveged +`をインストールしたため、キーは非常に迅速に、またはすぐに生成されます。 次を含む出力が表示されます。

Output...
gpg: /home/sammy/.gnupg/trustdb.gpg: trustdb created
gpg: key  marked as ultimately trusted
public and secret key created and signed.
...

次のセクションでローカル環境変数を構成するために使用するため、「++」に注意してください。

手動バックアップの作成

環境変数を設定して、 `+ duplicity `コマンドの実行中にコマンドラインで機密情報を入力する必要がないようにします。 これらの変数は、現在のセッション中にユーザーが使用できるようになり、後で使用できるように非表示のディレクトリに保存します。 環境変数として定義する「 duplicity +」に必要な変数には、Spacesアクセスキーとシークレット、GPG公開キーIDとパスフレーズが含まれます。

まず、設定ファイルを保存するユーザーのホームディレクトリに隠しディレクトリを作成します。

mkdir ~/.duplicity

次に、 `+ .env_variables.conf `というファイルを作成して変数を定義します。これは、 ` export +`ステートメントを使用して行います。 これらのステートメントは、後で使用するためにプログラムで変数を使用できるようにします。 次を入力してファイルを開きます。

nano ~/.duplicity/.env_variables.conf

ファイル内で、スペースアクセスキーとシークレット、およびGPG公開キーIDとパスフレーズを設定します。

〜/ .duplicity / .env_variables.conf

export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
export GPG_KEY=""
export PASSPHRASE=""

完了したら、ファイルを保存して閉じます。

これで、ファイルにアクセス許可を設定して、現在の非ルートユーザーのみが読み取りおよび書き込みアクセス権を持つようにできます。

chmod 0600 ~/.duplicity/.env_variables.conf

次のように入力して、これらの変数を現在のBashセッションで使用できるようにします。

source ~/.duplicity/.env_variables.conf

次に、 `+ duplicity `を実行して、 `〜/ `ディレクトリの完全バックアップを手動で作成します。 ` full `アクションなしで ` duplicity `を実行すると、最初の完全バックアップが作成され、その後に増分バックアップが作成されます。 コマンドの最初の使用で完全バックアップを作成しますが、このディレクトリの別の完全手動バックアップを作成する場合は、 ` full +`アクションを指定する必要があります。

コマンドで定義するその他のオプションは次のとおりです。

  • +-verbosity +:これは、出力に必要な情報のレベルを指定します。 デフォルトの `+ notice `設定よりも詳細な ` info +`を指定します。

  • +-encrypt-sign-key +:これは、 `+ GPG_KEY `変数で `+`で識別したペアの公開キーに暗号化するように `+ duplicity `に指示します。 また、署名機能を有効にするために同じ識別子を使用するように「 duplicity +」に指示します。

  • +-log-file +:このオプションは、他のプログラムでも利用できるログファイルの場所を指定します。 これにより、トラブルシューティングが必要な場合に簡単に確認できます。 ログファイルの場所を `+ / home //。duplicity / info.log +`として指定します。

最後に、バックアップするディレクトリとリポジトリエンドポイントを指定します。 ユーザーのホームディレクトリにある +〜/ +`ディレクトリをバックアップします。 リポジトリはスペースになり、次の情報を使用して定義します: `+ s3://// +。 エンドポイントとバケット名は次のように決定できます。スペースのURLが「+ https://.nyc3.digitaloceanspaces.com+」の場合、「+」はバケット名、「 nyc3.digitaloceanspaces.com +」 `はエンドポイントです。

`+ duplicity +`コマンドは最終的には次のようになります。

duplicity --verbosity info --encrypt-sign-key=$GPG_KEY --log-file /home//.duplicity/info.log /home// \
s3://nyc3.digitaloceanspaces.com//

このコマンドを実行すると、次のような出力が表示されます。

Output...
--------------[ Backup Statistics ]--------------
StartTime 1522417021.39 (Fri Mar 30 13:37:01 2018)
EndTime 1522417021.40 (Fri Mar 30 13:37:01 2018)
ElapsedTime 0.01 (0.01 seconds)
SourceFiles 2
SourceFileSize 4226 (4.13 KB)
NewFiles 2
NewFileSize 4226 (4.13 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 2
RawDeltaSize 130 (130 bytes)
TotalDestinationSizeChange 955 (955 bytes)
Errors 0
-------------------------------------------------

Spaceに意図したとおりにファイルがアップロードされたことを確認するには、https://cloud.digitalocean.com/spaces [DigitalOceanコントロールパネルの[Spaces]ページ]に移動して、そこにあることを確認します。

ファイルの復元

データを復元できることをテストするために、サンプルファイルを削除してリポジトリから復元します。 Duplicityでファイルを復元するには、 `-file-to-restore +`オプションを使用できます。 ` duplicity +`コマンドのアイテムの順序を逆にすることも必要です。リポジトリURLがオリジンとして機能し、バックアップディレクトリが復元されたファイルのデスティネーションになります。

次のように入力してファイルを削除します。

rm ~//historical_sharks.txt

ファイルが削除されたことを確認してください:

cat ~//historical_sharks.txt

次のような出力が表示されるはずです。

Outputcat: /home///historical_sharks.txt: No such file or directory

次に、このファイルをスペースから復元しましょう。 `-file-to-restore +`オプションを使用すると、復元するファイルのパスを指定できます。 このパスは、バックアップしたディレクトリに相対的でなければなりません。この場合、相対パスは ` historical_sharks.txt +`になります。 また、スペースURLとバックアップディレクトリの順序を逆にして、リポジトリからファイルを復元していることを示します。

duplicity --verbosity info --encrypt-sign-key=$GPG_KEY --log-file /home//.duplicity/info.log --file-to-restore  \
s3://nyc3.digitaloceanspaces.com/ /home///

次のような出力が表示されます。

Output...
Processing local manifest /home/sammy/.cache/duplicity/d9911d387bb9ee345a171141106ab714/duplicity-full.20180402T170008Z.manifest (195)
Found 1 volumes in manifest
Deleting /tmp/duplicity-e66MEL-tempdir/mktemp-_A24DP-6
Processed volume 1 of 1

`+ cat `を再度実行すると、復元された ` historical sharks.txt`ファイルの内容が出力されます。

cat ~//historical_sharks.txt
OutputThe ancient Megalodon shark reached lengths of up to 59 feet, and is widely regarded as one of history's most fearsome predators.

`+〜/ +`ディレクトリの手動バックアップを作成し、リポジトリからデータを復元したので、バックアッププロセスの自動化に進む準備ができました。

バックアップの自動化

バックアッププロセスを自動化することで、 `〜/ +`ディレクトリ内のデータが復旧可能で最新の状態を維持できるようになります。 ` cron `ジョブスケジューラを使用して、毎週完全バックアップとそれ以外の増分バックアップを含むバックアップスケジュールを作成できます。 「 cron +」を使用してタスクをスケジュールする方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-のチュートリアルをご覧くださいon-a-vps [VPSでCronとAnacronを使用して定期的なタスクをスケジュールする方法]。

まず、 `+〜/ .duplicity +`ディレクトリにバックアップスクリプトを作成しましょう。

nano ~/.duplicity/.backup.sh

このファイル内で、最初にこのスクリプトがBashシェルによって実行されるように指定します。

〜/ .duplicity / .backup.sh

#!/bin/bash

次に、 + source`と + duplicity + コマンドで使用する + HOME`変数を作成します。 強調表示されているユーザー名、バックアップディレクトリ、およびバケット名を必ず情報に置き換えてください。

〜/ .duplicity / .backup.sh

...
HOME="/home/"

source "$HOME/.duplicity/.env_variables.conf"

duplicity \
   --verbosity info \
   --encrypt-sign-key="$GPG_KEY" \
   --full-if-older-than 7D \
   --log-file "$HOME/.duplicity/info.log" \
   /home// \
   s3://nyc3.digitaloceanspaces.com//

`+ source `と ` duplicity `コマンドは、ここで手動バックアップを作成したときと同じ働きをします: ` source `は現在のコンテキストに環境変数をロードし、 ` duplicity `は送信する暗号化されたtarボリュームを作成しますリポジトリへ。 `-full-if-older-than `オプションの追加を除いて、すべてのオプションは同じままです。 ` 7D +`に設定すると、このオプションは、最後の完全バックアップが7日以上経過すると、毎週完全バックアップを行うことを指定します。

スクリプトの最後の要素は、セキュリティ対策として環境変数を削除する「+ unset +」コマンドです。

〜/ .duplicity / .backup.sh

...
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset GPG_KEY
unset PASSPHRASE

完全なスクリプトは次のようになります。

〜/ .duplicity / .backup.sh

#!/bin/bash

HOME="/home/"

source "$HOME/.duplicity/.env_variables.conf"

duplicity \
   --verbosity info \
   --encrypt-sign-key="$GPG_KEY" \
   --full-if-older-than 7D \
   --log-file "$HOME/.duplicity/info.log" \
   /home// \
   s3://nyc3.digitaloceanspaces.com//

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset GPG_KEY
unset PASSPHRASE

スクリプトに満足したら、ファイルを保存して閉じることができます。 また、現在の非sudoユーザーのみがファイルの読み取り、書き込み、実行を行えるようにアクセス許可を設定します。

chmod 0700 ~/.duplicity/.backup.sh

最後に、ユーザーの `+ crontab`ファイルを編集して、バックアップスケジュールを自動化できます。 次のように入力して、このファイルを編集用に開きます。

crontab -e

このファイルを編集するのは今回が初めてなので、エディターを選択するよう求められます。

crontab

no crontab for root - using an empty one
Select an editor.  To change later, run 'select-editor'.
 1. /bin/ed
 2. /bin/nano        <---- easiest
 3. /usr/bin/vim.basic
 4. /usr/bin/vim.tiny
Choose 1-4 [2]:
...

nanoに「2」を選択するか、選択したエディターに対応する番号を入力できます。

ファイルの最後に、スクリプトを実行する頻度を指定する行を追加します。 その機能をテストするために、次のように時間間隔を2分に設定できます。

crontab

...

*/2 * * * * /home//.duplicity/.backup.sh

ファイルを保存して閉じます。 2分後、https://cloud.digitalocean.com/spaces [DigitalOceanコントロールパネルの[スペース]ページ]に移動して、増分バックアップファイルを確認できます。 これで、 `+ crontab +`ファイルを変更して、増分バックアップに使用する時間間隔を指定できます。

結論

このチュートリアルでは、特定のディレクトリの内容をSpacesリポジトリにバックアップする方法について説明しました。 構成ファイルを使用してリポジトリ情報を保存し、データの手動バックアップを作成しました。サンプルファイルを復元してテストし、自動バックアップスケジュールを作成しました。

Duplicityの詳細については、http://duplicity.nongnu.org/index.html [project website]およびhttp://duplicity.nongnu.org/duplicity.1.html[`+ duplicity + `man page]。 このドキュメントでは、Duplicityの多くの機能について説明し、システム全体のバックアップの作成に関するガイダンスを提供します。

Related