序章
Duplicity は、Pythonで記述されたコマンドラインユーティリティであり、ローカルまたはリモートリポジトリに保存するための暗号化されたtarボリュームを生成します。 GNU Privacy Guard(GPG)を使用してアーカイブを暗号化および署名し、rsyncアルゴリズムを使用して増分でスペース効率の高いバックアップを作成します。 バックアップは、ローカルファイルストレージ、SFTPまたはFTPサーバー、S3互換のオブジェクトストアなど、さまざまなリポジトリに送信できます。
このチュートリアルでは、Duplicityをインストールし、プロジェクトデータをS3互換のオブジェクトストレージサービスであるDigitalOceanSpacesにバックアップする方法について説明します。 この目的のためにSpacesリポジトリを作成し、データを手動でバックアップする方法について説明します。 最後に、増分および毎週の完全バックアップスケジュールを設定するスクリプトを作成することにより、このプロセスを自動化します。
前提条件
このチュートリアルでは、次のものが必要になります。
-
1つのUbuntu16.04サーバー。Ubuntu16.04チュートリアルを使用した初期サーバーセットアップに従ってセットアップします。 このチュートリアルを実行すると、root以外のsudoユーザーが必要になります。
-
DigitalOceanスペースとAPIキーの作成方法に従って作成されたDigitalOceanスペースとAPIキー。 スペースの次のクレデンシャルに注意してください。
- アクセスキー
- シークレットキー
- スペースURL
- バケット名
Spaceを設定し、この情報を入手したら、Duplicityのインストールに進むことができます。
Duplicityのインストール
Duplicityの最新バージョンを入手するには、DuplicityリリースのPersonalPackage Archive(PPA)からインストールできます。
- sudo apt-add-repository ppa:duplicity-team/ppa
また、インストールします python-boto
Boto にアクセスするためのパッケージ。これは、AmazonWebServicesへのインターフェイスを提供するPythonパッケージです。 これは、SpacesとAWSS3APIとの相互運用性を活用するのに役立ちます。 インストールします python-boto
このバージョンは、Ubuntuサーバーイメージに付属しているPythonのバージョンと互換性があるため、公式のUbuntuリポジトリから。 Boto3 を使用したい場合は、ソースからインストールできますが、Python3.3以降との機能の互換性はまだ開発中です。
に加えて python-boto
、GPGキーの作成に必要なエントロピーの生成に役立つツールであるHavegedもインストールします。 これらのキーを作成するために、GPGはシステムのエントロピーまたは予測不可能性のレベルを利用します。 インストール haveged
キー作成プロセスをスピードアップするのに役立ちます。
これらのパッケージをインストールする前に、ローカルリポジトリインデックスを更新してください。
- sudo apt-get update
次にインストールします duplicity
, python-boto
、 と haveged
次のように入力します。
- sudo apt-get install duplicity haveged python-boto
プレス y
インストールの確認を求められたら。 これで、Duplicityがシステムにインストールされ、プロジェクトフォルダーと構成ファイルを作成する準備が整いました。
バックアップディレクトリの作成
バックアッププロセスがどのように機能するかを示すために、root以外のユーザーのホームディレクトリに、いくつかのサンプルデータとともにバックアップ用のディレクトリを作成します。 ディレクトリを呼び出します sammy_backups
:
- mkdir ~/sammy_backups
次に、というサンプルプロジェクトファイルを作成します 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." >> ~/sammy_backups/historical_sharks.txt
バックアップディレクトリとテストデータを配置したら、root以外のユーザーのGPGキーを生成する準備が整います。
GPGキーの生成
次に、ユーザーのGPGキーペアを生成します。 情報の安全な送信を確実にするために、GPGは公開鍵暗号化を使用します。 これが私たちの文脈で意味することは、データが私たちの公開鍵に暗号化され、私たちのリポジトリに送信されるということです。 GPGキーと暗号化の詳細については、GPGを使用してメッセージに署名および暗号化する方法のチュートリアルを参照してください。
キーリングは、ユーザーアカウントの次のディレクトリに保存されます。 ~/.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と入力します。
- パスフレーズを入力します。 ここにパスフレーズを入力するように求められます。 このパスフレーズに注意してください。 このチュートリアルの残りの部分では、次のように参照します。
your-GPG-key-passphrase
.
これらの設定を作成したら、 gpg
システムのエントロピーのレベルに基づいてキーを生成します。 インストールしてから haveged
、キーは非常に迅速に、またはすぐに生成する必要があります。 次のような出力が表示されます。
Output...
gpg: /home/sammy/.gnupg/trustdb.gpg: trustdb created
gpg: key your-GPG-public-key-id marked as ultimately trusted
public and secret key created and signed.
...
注意してください your-GPG-public-key-id
、次のセクションでローカル環境変数を構成するために使用します。
手動バックアップの作成
ここで、環境変数を設定して、実行中にコマンドラインに機密情報を入力する必要がないようにします。 duplicity
指図。 これらの変数は、現在のセッション中にユーザーが使用できるようになり、後で使用できるように隠しディレクトリに保存されます。 その変数 duplicity
環境変数として定義する必要があります。これには、Spaces Access KeyとSecret、およびGPG公開鍵IDとパスフレーズが含まれます。
まず、構成ファイルを保存する隠しディレクトリをユーザーのホームディレクトリに作成しましょう。
- mkdir ~/.duplicity
次に、というファイルを作成しましょう .env_variables.conf
変数を定義するには、これを使用して行います export
ステートメント。 これらのステートメントは、後で使用するために変数をプログラムで使用できるようにします。 次のように入力してファイルを開きます。
- nano ~/.duplicity/.env_variables.conf
ファイル内で、Spaces Access KeyとSecret、およびGPG公開鍵IDとパスフレーズを設定します。
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export GPG_KEY="your-GPG-public-key-id"
export PASSPHRASE="your-GPG-key-passphrase"
終了したら、ファイルを保存して閉じます。
これで、ファイルにアクセス許可を設定して、現在の非rootユーザーのみが読み取りおよび書き込みアクセス権を持つようにすることができます。
- chmod 0600 ~/.duplicity/.env_variables.conf
次のように入力して、これらの変数を現在のBashセッションで使用できるようにします。
- source ~/.duplicity/.env_variables.conf
次に、実行します duplicity
手動の完全バックアップを作成するには ~/sammy_backups
ディレクトリ。 ランニング duplicity
なしで full
アクションにより、最初の完全バックアップが作成され、その後に増分バックアップが作成されます。 コマンドの最初の使用時に完全バックアップを作成しますが、このディレクトリの別の完全手動バックアップを作成する場合は、を指定する必要があります。 full
アクション。
コマンドで定義するその他のオプションは次のとおりです。
--verbosity
:これにより、出力に必要な情報のレベルが指定されます。 指定しますinfo
、デフォルトよりも詳細な情報を提供しますnotice
設定。--encrypt-sign-key
:これは教えてくれますduplicity
で識別したペアの公開鍵に暗号化するyour-GPG-public-key-id
の中にGPG_KEY
変数。 それはまた教えてくれますduplicity
同じ識別子を使用して署名機能を有効にします。--log-file
:このオプションは、他のプログラムでも使用できるログファイルの場所を指定します。 これにより、トラブルシューティングが必要になった場合に備えて、簡単に調べることができます。 ログファイルの場所を次のように指定します/home/sammy/.duplicity/info.log
.
最後に、バックアップするディレクトリとリポジトリエンドポイントを指定します。 バックアップします ~/sammy_backups
ユーザーのホームディレクトリ内のディレクトリ。 リポジトリはスペースになり、次の情報を使用して定義します。 s3://spaces_endpoint/bucket_name/
. エンドポイントとバケット名は次のように決定できます。スペースのURLが https://sammys-bucket.nyc3.digitaloceanspaces.com
、 それから sammys-bucket
はバケット名であり、 nyc3.digitaloceanspaces.com
エンドポイントです。
私たちの duplicity
コマンドは最終的に次のようになります。
- duplicity --verbosity info --encrypt-sign-key=$GPG_KEY --log-file /home/sammy/.duplicity/info.log /home/sammy/sammy_backups \
- s3://nyc3.digitaloceanspaces.com/sammys-bucket/
このコマンドを実行すると、次のような出力が表示されます。
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
-------------------------------------------------
意図したとおりにスペースにアップロードされたファイルを確認するには、DigitalOceanコントロールパネルのスペースページに移動して、ファイルがそこにあることを確認します。
ファイルの復元
データを復元できることをテストするために、サンプルファイルを削除してリポジトリから復元します。 Duplicityでファイルを復元するには、 --file-to-restore
オプション。 また、アイテムの順序を逆にする必要があります duplicity
コマンド:リポジトリのURLがオリジンとして機能し、バックアップディレクトリが復元されたファイルの宛先になります。
次のように入力してファイルを削除します。
- rm ~/sammy_backups/historical_sharks.txt
ファイルが削除されたことを確認してください。
- cat ~/sammy_backups/historical_sharks.txt
次の出力が表示されます。
Outputcat: /home/sammy/sammy_backups/historical_sharks.txt: No such file or directory
次に、このファイルをSpaceから復元しましょう。 The --file-to-restore
オプションを使用すると、復元するファイルのパスを指定できます。 このパスは、バックアップしたディレクトリからの相対パスである必要があります。 私たちの場合、相対パスは次のようになります historical_sharks.txt
. また、スペースURLとバックアップディレクトリの順序を逆にして、リポジトリからファイルを復元していることを示します。
- duplicity --verbosity info --encrypt-sign-key=$GPG_KEY --log-file /home/sammy/.duplicity/info.log --file-to-restore historical_sharks.txt \
- s3://nyc3.digitaloceanspaces.com/sammys-bucket /home/sammy/sammy_backups/historical_sharks.txt
次のような出力が表示されます。
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 ~/sammy_backups/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.
これで、の手動バックアップが作成されました。 ~/sammy_backups
ディレクトリとリポジトリから復元されたデータがあれば、バックアッププロセスの自動化に進む準備ができています。
バックアップの自動化
バックアッププロセスを自動化することで、 ~/sammy_backups
ディレクトリは回復可能で最新の状態を保ちます。 使用できます cron
毎週の完全バックアップとそれ以外の増分バックアップを含むバックアップスケジュールを作成するジョブスケジューラ。 使用の詳細については cron
タスクをスケジュールするには、VPSでCronとAnacronを使用してルーチンタスクをスケジュールする方法に関するチュートリアルを確認してください。
まず、バックアップスクリプトを作成しましょう ~/.duplicity
ディレクトリ:
- nano ~/.duplicity/.backup.sh
このファイル内で、最初にこのスクリプトがBashシェルによって実行されることを指定します。
#!/bin/bash
次に、 HOME
で使用する変数 source
と duplicity
コマンド。 強調表示されたユーザー名、バックアップディレクトリ、バケット名を次の情報に置き換えてください。
...
HOME="/home/sammy"
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/sammy/sammy_backups \
s3://nyc3.digitaloceanspaces.com/sammys-bucket/
The source
と duplicity
コマンドは、手動バックアップを作成したときと同じように機能します。 source
環境変数を現在のコンテキストにロードします。 duplicity
リポジトリに送信する暗号化されたtarボリュームを作成します。 追加を除いて、すべてのオプションは同じままです。 --full-if-older-than
オプション。 設置する 7D
、このオプションは、最後の完全バックアップが7日を超えると、毎週完全バックアップが実行されることを指定します。
スクリプトの最後の要素は次のようになります unset
セキュリティ対策として環境変数を削除するコマンド:
...
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset GPG_KEY
unset PASSPHRASE
完全なスクリプトは次のようになります。
#!/bin/bash
HOME="/home/sammy"
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/sammy/sammy_backups \
s3://nyc3.digitaloceanspaces.com/sammys-bucket/
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset GPG_KEY
unset PASSPHRASE
スクリプトに満足したら、ファイルを保存して閉じることができます。 また、現在の非sudoユーザーのみがファイルの読み取り、書き込み、および実行を実行できるようにするためのアクセス許可を設定します。
- chmod 0700 ~/.duplicity/.backup.sh
最後に、ユーザーを編集することでバックアップスケジュールを自動化できます crontab
ファイル。 次のように入力して、このファイルを開いて編集します。
- crontab -e
このファイルを編集するのはこれが初めてなので、エディターを選択するように求められます。
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]:
...
選択できます 2
nanoの場合、または選択したエディターに対応する番号を入力します。
ファイルの最後に、スクリプトを実行する頻度を指定する行を追加します。 その機能をテストするために、次のように時間間隔を2分に設定できます。
...
*/2 * * * * /home/sammy/.duplicity/.backup.sh
ファイルを保存して閉じます。 2分後、DigitalOceanコントロールパネルの Spacesページに移動できます。ここで、増分バックアップファイルが表示されます。 これで、 crontab
ファイルを使用して、増分バックアップに使用する時間間隔を指定します。
結論
このチュートリアルでは、特定のディレクトリの内容をSpacesリポジトリにバックアップする方法について説明しました。 構成ファイルを使用してリポジトリ情報を保存し、データの手動バックアップを作成しました。これは、サンプルファイルを復元してテストし、自動バックアップスケジュールを作成しました。
Duplicityの詳細については、プロジェクトのWebサイトおよびduplicityのマニュアルページを参照してください。 このドキュメントは、Duplicityの多くの機能をカバーし、完全なシステムバックアップを作成するためのガイダンスを提供します。