序章

バージョン管理のためにソースコードリポジトリに依存することは、コードの変更によってアプリケーションがクラッシュしたり、動作が不安定になったりした場合に、元に戻して実行できるようにするためのベストプラクティスです。 ただし、ブランチ全体が誤って削除されたり、リポジトリへのアクセスが失われたりするなどの壊滅的なイベントが発生した場合は、追加のディザスタリカバリ戦略を活用する必要があります。

コードリポジトリをオブジェクトストレージインフラストラクチャにバックアップすると、データのオフサイトコピーが提供され、必要に応じて復元できます。 Spaces は、DigitalOceanのオブジェクトストレージソリューションであり、ユーザーがデジタルアセット、ドキュメント、およびコードのバックアップを保存するための宛先を提供します。

SpacesはS3APIと互換性があり、S3cmdなどのS3ツールを使用してインターフェースをとることができます。 S3cmd は、コマンドラインまたはスクリプトを介してオブジェクトストレージからデータをアップロード、取得、および管理するために使用できるクライアントツールです。

このチュートリアルでは、S3cmdを使用してリモートGitリポジトリをDigitalOceanSpaceにバックアップする方法を示します。 この目標を達成するために、Gitをインストールして構成し、S3cmdをインストールして、GitリポジトリをSpaceにバックアップするスクリプトを作成します。

前提条件

Spacesを使用するには、DigitalOceanアカウントが必要です。 まだお持ちでない場合は、サインアップページで登録できます。

そこから、DigitalOcean SpaceをセットアップしてAPIキーを作成する必要があります。これは、チュートリアルDigitalOceanSpaceとAPIキーの作成方法に従って実行できます。

作成したら、スペースに関する次の詳細を手元に置いておく必要があります。

  • アクセスキー
  • シークレットキー(トークンとも呼ばれます)

さらに、sudo非rootユーザーでUbuntu16.04サーバーをセットアップする必要があります。 このUbuntu16.04初期サーバーセットアップチュートリアルに従うことで、これをセットアップするためのガイダンスを得ることができます。

Spaces情報とサーバーを設定したら、次のセクションに進んでGitをインストールします。

Gitをインストールする

このチュートリアルでは、サーバーにクローンするリモートGitリポジトリを使用します。 UbuntuにはGitがインストールされており、デフォルトのリポジトリで使用できるようになっていますが、このバージョンは最新の利用可能なリリースよりも古い可能性があります。

使用できます apt ローカルパッケージインデックスを更新し、利用可能な最新バージョンのGitをダウンロードしてインストールするためのパッケージ管理ツール。

  1. sudo apt-get update
  2. sudo apt-get install git

Gitをより柔軟にインストールし、最新のリリースを確実に入手するには、ソースからのGitのインストールを検討できます。

GitリポジトリのURLからバックアップするため、このチュートリアルでGitを構成する必要はありません。 Gitの構成に関するガイダンスについては、Gitのセットアップ方法のこのセクションをお読みください。

次に、リモートGitリポジトリのクローンを作成します。

リモートGitリポジトリのクローンを作成する

Gitリポジトリのクローンを作成するために、タスクを実行するためのスクリプトを作成します。 スクリプトを作成すると、変数を使用できるようになり、コマンドラインでエラーが発生しないようにすることができます。

実行可能スクリプトを作成するために、次の名前の新しいシェルスクリプトファイルを作成します。 cloneremote.sh テキストエディタnanoで。

  1. nano cloneremote.sh

この空白のファイル内に、次のスクリプトを記述しましょう。

cloneremote.sh
#!/bin/bash

remoterepo=your_remote_repository_url
localclonedir=repos
clonefilename=demoprojectlocal.git

git clone --mirror $remoterepo $localclonedir/$clonefilename

このスクリプトの各要素を見ていきましょう。

最初の行— #!/bin/bash —スクリプトがBashシェルによって実行されることを示します。 そこから、コマンドで使用される変数を定義します。この変数は、スクリプトを実行すると実行されます。 これらの変数は、次の構成を定義します。

  • remoterepo バックアップ元のリモートGitリポジトリURLが割り当てられています
  • localclonedir リモートリポジトリのクローンを作成するサーバーディレクトリまたはフォルダを指します。この場合は、これを呼び出しています。 repos
  • clonefilename ローカルのクローンリポジトリに提供するファイル名を指します。この場合は、このファイル名と呼びます。 demoprojectlocal.git

これらの各変数は、スクリプトの最後にあるコマンドで直接呼び出されます。

スクリプトの最後の行では、Gitコマンドラインクライアントを使用しています。 git 指図。 そこから、リポジトリのクローンを作成するように要求しています clone、およびリポジトリのミラーバージョンとして実行します。 --mirror 鬼ごっこ。 これは、複製されたリポジトリが元のリポジトリとまったく同じになることを意味します。 上で定義した3つの変数は、 $.

作成したスクリプトが正確であることに満足したら、次のように入力してnanoを終了できます。 CTRL + x キーを押し、ファイルを保存するように求められたら、 y.

この時点で、次のコマンドを使用してシェルスクリプトを実行できます。

  1. sh cloneremote.sh

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

Output
Cloning into bare repository './repos/demoprojectlocal.git'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. Checking connectivity... done.

この時点で、現在のディレクトリにアイテムを一覧表示すると、そこにバックアップディレクトリが表示され、そのディレクトリに移動すると、スクリプトで指定したファイル名のサブフォルダが表示されます。 そのサブディレクトリはGitリポジトリのクローンです。

リモートGitリポジトリのクローンを作成したら、S3cmdのインストールに進むことができます。これを使用して、リポジトリをオブジェクトストレージにバックアップできます。

S3cmdをインストールします

S3cmdツールを使用すると、コマンドラインからSpaces環境に接続できます。 S3cmdの最新バージョンをパブリックGitHubリポジトリからダウンロードし、インストールの推奨ガイドラインに従います。

S3cmdをインストールする前に、PythonのSetuptoolsをインストールする必要があります。これは、インストールに役立ちます(S3cmdはPythonで記述されています)。

  1. sudo apt-get install python-setuptools

プレス y 続ける。

これをダウンロードすると、S3cmdをダウンロードできるようになります tar.gz とファイル curl.

  1. cd /tmp
  2. curl -LO https://github.com/s3tools/s3cmd/releases/download/v2.0.1/s3cmd-2.0.1.tar.gz

ファイルをにダウンロードしていることに注意してください tmp ディレクトリ。 これは、サーバーにファイルをダウンロードする際の一般的な方法です。

ツールのGitHubリポジトリのリリースページにアクセスすると、新しいバージョンのS3cmdが利用可能かどうかを確認できます。 新しいバージョンを見つけた場合は、 tar.gz URLとそれをに置き換えます curl 上記のコマンド。

ダウンロードが完了したら、tarユーティリティを使用してファイルを解凍して解凍します。

  1. cd ~
  2. tar xf /tmp/s3cmd-*.tar.gz

上記のコマンドでは、ホームディレクトリに戻り、実行しました。 tar 指図。 コマンドで2つのフラグを使用しました。 x tarファイルからextractを実行することを示します。 f すぐ隣の文字列が、展開元のファイルの絶対パス名になることを示します。 tarファイルのファイルパスでは、それが tmp ディレクトリ。

ファイルが抽出されたら、結果のディレクトリに移動し、sudoを使用してソフトウェアをインストールします。

  1. cd s3cmd-*
  2. sudo python setup.py install

上記のコマンドを実行するには、次を使用する必要があります sudo. The python コマンドは、Pythonインタープリターを呼び出してインストールします setup.py Pythonスクリプト。

S3cmdにバージョン情報を要求して、インストールをテストします。

  1. s3cmd --version
Output
s3cmd version 2.0.1

同様の出力が表示される場合は、S3cmdが正常にインストールされています。 次に、オブジェクトストレージサービスに接続するようにS3cmdを構成します。

S3cmdを構成する

S3cmdには、オブジェクトストレージサーバーに接続するために必要な構成ファイルを作成できるインタラクティブな構成プロセスがあります。 構成プロセス中に、アクセスキーとシークレットキーの入力を求められるので、すぐに利用できるようにしてください。

次のコマンドを入力して、構成プロセスを開始しましょう。

  1. s3cmd --configure

キーの入力を求められたので、キーを貼り付けて受け入れましょう US デフォルトリージョンの場合。 デフォルトリージョンを変更できることは、S3cmdツールが最初に使用するために作成されたAWSインフラストラクチャに関連していることに注意してください。 DigitalOceanは構成に必要な情報が少ないため、これは関係がないため、デフォルトを受け入れます。

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key []: EXAMPLE7UQOTHDTF3GK4
Secret Key []: b8e1ec97b97bff326955375c5example
Default Region [US]:

次に、DigitalOceanエンドポイントに入ります。 nyc3.digitaloceanspaces.com.

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: nyc3.digitaloceanspaces.com

SpacesはDNSベースのバケットをサポートしているため、次のプロンプトで、必要な形式でバケット値を指定します。

%(bucket)s.nyc3.digitaloceanspaces.com
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars c
an be used if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket []: %(bucket)s.nyc3.digitaloceanspaces.com

この時点で、暗号化パスワードを入力するように求められます。 パスワードを入力して、暗号化を使用する場合に使用できるようにします。

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: secure_password
Path to GPG program [/usr/bin/gpg]:

次に、HTTPS経由で接続するように求められますが、DigitalOcean Spacesは暗号化されていない転送をサポートしていないため、 ENTER デフォルトを受け入れるには、 Yes.

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: 

HTTPプロキシサーバーを使用していないため、次のプロンプトを空白のままにして、 ENTER.

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

HTTPプロキシサーバー名の入力を求めるプロンプトが表示された後、構成スクリプトは、使用する値の概要を示し、その後にそれらをテストする機会があります。 テストが正常に完了したら、次のように入力します Y 設定を保存します。

構成を保存すると、その場所の確認が届きます。

すべてのインストール手順が完了したら、次のコマンドを実行して、セットアップが正しいことを再確認できます。

  1. s3cmd ls

このコマンドは、指定したクレデンシャルで使用可能なスペースのリストを出力する必要があります。

Output
2017-12-15 02:52 s3://demospace

これにより、DigitalOceanSpacesへの接続に成功したことが確認されます。 これで、Gitリポジトリのオブジェクトストレージへのバックアップに進むことができます。

Gitリポジトリをオブジェクトストレージにバックアップする

すべてのツールをインストールして構成したら、ローカルリポジトリを圧縮してDigitalOceanSpaceにプッシュするスクリプトを作成します。

ホームディレクトリから、スクリプトを呼び出しましょう movetospaces.sh ナノで開きます。

  1. cd ~
  2. nano movetospaces.sh

スクリプトは次のように記述します。

movetospaces.sh
#!/bin/sh
 
tar -zcvf archivedemoproject.tar.gz /repos/demoprojectlocal.git
./s3cmd-2.0.1/s3cmd put archivedemoproject.tar.gz s3://demospace

このチュートリアルの前半では、 tar 解凍するには s3cmd、現在使用しています tar Spacesに送信する前にGitリポジトリを圧縮します。 の中に tar コマンドでは、4つのフラグを指定します。

  • z gzip方式を使用して圧縮します
  • c 既存のファイルを使用する代わりに、新しいファイルを作成します
  • v 圧縮ファイルに含まれているファイルについて詳細に説明していることを示します
  • f 次の文字列で定義された名前で結果のファイルに名前を付けます

フラグの後に、圧縮ファイルのファイル名を指定します。この場合は archivedemoproject.tar.gz. zipするディレクトリの名前も指定します /repos/demoprojectlocal.git.

次に、スクリプトが実行されます s3cmd put 送信する archivedemoproject.tar.gz 目的地のスペースへ s3://demospace.

S3cmdで一般的に使用できるコマンドの中で、 put コマンドはファイルをスペースに送信します。 役立つ可能性のある他のコマンドには、 get スペースからファイルをダウンロードするコマンド、および delete ファイルを削除するコマンド。 を実行すると、S3cmdで受け入れられるすべてのコマンドのリストを取得できます。 s3cmd オプションなし。

バックアップをSpaceにコピーするために、スクリプトを実行します。

  1. sh movetospaces.sh

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

Output
demoprojectlocal.git/ ... demoprojectlocal.git/packed-refs upload: 'archivedemoproject.tar.gz' -> 's3://demobucket/archivedemoproject.tar.gz' [1 of 1] 6866 of 6866 100% in 0s 89.77 kB/s done

次のコマンドを実行して、プロセスが正しく機能したことを確認できます。

  1. s3cmd ls s3://demospace

次の出力が表示され、ファイルがスペースにあることが示されます。

Output
2017-12-18 20:31 6866 s3://demospace/archivedemoproject.tar.gz

これで、GitリポジトリをDigitalOceanSpaceに正常にバックアップできました。

結論

必要に応じてコードを迅速に回復できるようにするには、バックアップを維持することが重要です。 このチュートリアルでは、Git、S3cmdクライアント、およびシェルスクリプトを使用して、リモートGitリポジトリをDigitalOceanSpaceにバックアップする方法について説明しました。 これは、Spacesを使用してディザスタリカバリとデータ整合性戦略を支援できる、考えられる数十のシナリオの1つの方法にすぎません。

次のチュートリアルを読むことで、オブジェクトストレージに保存できるものについて詳しく知ることができます。