GitリポジトリをDigitalOcean Spacesにバックアップする方法

前書き

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

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

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

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

前提条件

Spacesを使用するには、DigitalOceanアカウントが必要です。 まだお持ちでない場合は、https://cloud.digitalocean.com/registrations/new [サインアップページ]で登録できます。

そこから、DigitalOcean SpaceをセットアップしてAPIキーを作成する必要があります。これは、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-create-a-digitaloceanに従って達成できます-space-and-api-key [DigitalOceanスペースとAPIキーを作成する方法]。

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

  • アクセスキー

  • 秘密鍵(トークンとも呼ばれます)

さらに、sudo非rootユーザーでUbuntu 16.04サーバーをセットアップする必要があります。 https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [このUbuntu 16.04初期サーバーセットアップチュートリアル]に従って、これを設定するためのガイダンスを取得できます。

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

Gitをインストールする

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

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

sudo apt-get update
sudo apt-get install git

Gitをより柔軟にインストールし、最新のリリースを使用できるようにするには、https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04を検討してください。 #how-to-install-git-from-source [Gitをソースからインストール]。

GitリポジトリのURLからバックアップするため、このチュートリアルでGitを構成する必要はありません。 Gitの構成に関するガイダンスについては、https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04#how-to-set-up-git [ Gitのセットアップ方法]。

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

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

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

実行可能スクリプトを記述するために、テキストエディタnanoで「+ .sh +」という新しいシェルスクリプトファイルを作成します。

nano .sh

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

cloneremote.sh

#!/bin/bash

remoterepo=
localclonedir=
clonefilename=.git

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

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

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

  • `+ remoterepo +`には、バックアップ元のリモートGitリポジトリURLが割り当てられています

  • `+ localclonedir `は、リモートリポジトリのクローンを作成するサーバーディレクトリまたはフォルダーを指します。この場合、 `+`と呼びます。

  • `+ clonefilename `はローカルクローンリポジトリに提供するファイル名を指します。この場合は ` .git +`と呼びます

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

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

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

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

sh .sh

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

OutputCloning into bare repository './/.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環境に接続できます。 public GitHub repositoryからS3cmdの最新バージョンをダウンロードし、インストールの推奨ガイドラインに従います。

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

sudo apt-get install python-setuptools

続行するには、「+ y +」を押します。

これをダウンロードしたら、S3cmdの `+ tar.gz `ファイルを ` curl +`でダウンロードできます。

cd /tmp
curl -LO https://github.com/s3tools/s3cmd/releases/download//s3cmd-.tar.gz

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

ツールのGitHubリポジトリのhttps://github.com/s3tools/s3cmd/releases [リリースページ]にアクセスすると、S3cmdの新しいバージョンが利用可能かどうかを確認できます。 新しいバージョンが見つかった場合は、 + tar.gz + URLをコピーして、上記の `+ curl +`コマンドに置き換えることができます。

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

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

上記のコマンドでは、ホームディレクトリに戻り、 `+ tar`コマンドを実行します。 コマンドで2つのフラグを使用しました。「+ x 」はtarファイルからe ** x **を抽出することを示し、「 f 」はすぐ隣の文字列が展開したいファイル。 tarファイルのファイルパスでは、それが ` tmp +`ディレクトリにあることも示します。

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

cd s3cmd-*
sudo python setup.py install

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

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

s3cmd --version
Outputs3cmd version

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

S3cmdを構成する

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

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

s3cmd --configure

キーを入力するように求められます。キーを貼り付けて、* Default Region *に「+ 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 []:
Secret Key []:
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]:

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 []:

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

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption 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 +」を入力して設定を保存します。

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

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

s3cmd ls

このコマンドは、指定した資格情報で使用可能なスペースのリストを出力する必要があります。

Output2017-12-15 02:52  s3://

これにより、DigitalOcean Spacesに正常に接続されたことを確認できます。 これで、Gitリポジトリをオブジェクトストレージにバックアップできます。

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

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

ホームディレクトリからスクリプト「+ .sh +」を呼び出して、nanoで開きます。

cd ~
nano .sh

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

movetospaces.sh

#!/bin/sh

tar -zcvf .tar.gz //.git
./s3cmd-/s3cmd put .tar.gz s3://

このチュートリアルの前半では、 `+ tar `を使用して ` s3cmd `を解凍しましたが、今では ` tar `を使用してGitリポジトリをzipしてからSpacesに送信しています。 ` tar +`コマンドでは、4つのフラグを指定します:

  • `+ z +`はgzipメソッドを使用して圧縮します

  • `+ c +`は既存のファイルを使用する代わりに新しいファイルを作成します

  • `+ v +`は、圧縮ファイルに含まれるファイルについて冗長であることを示します

  • `+ f +`は結果のファイルに次の文字列で定義された名前を付けます

フラグの後に、圧縮ファイルのファイル名、この場合は「+ .tar.gz 」を指定します。 また、 ` //。git +`を圧縮するディレクトリの名前も提供しています。

次に、スクリプトは「+ s3cmd put 」を実行して、「。tar.gz 」を目的のスペース「 s3:// +」に送信します。

S3cmdでよく使用するコマンドの中で、 `+ put `コマンドはファイルをSpacesに送信します。 役に立つかもしれない他のコマンドには、スペースからファイルをダウンロードするための ` get `コマンド、およびファイルを削除するための ` delete `コマンドが含まれます。 オプションなしで ` s3cmd +`を実行すると、S3cmdが受け入れるすべてのコマンドのリストを取得できます。

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

sh .sh

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

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

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

s3cmd ls s3://

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

Output2017-12-18 20:31      6866   s3:///.tar.gz

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

結論

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

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

Related