AWSにGitのリモートリポジトリ用のサーバをS3(クラウドストレージ)で

前回の続き。

もともと、ソース管理のためのサーバをAWS上に構築するのが今回の目的のひとつ。
過去に自宅PC上にSVNを構築した事はあったんだけど、
PCの買い替えやOSの再インストールの度にリポジトリを移行しなきゃならなくてかなりメンドい。
何より、自宅以外からアクセスできないのが最大のネック。
じゃ、AWS上に構築しよう。ついでに、使ったことないGitを使ったことないS3で。

 

実際、今回インストールするために調べるまでよく知らんかったけど、
GitはSVNみたいに、メインとなるリポジトリサーバを作るわけではなく、
各々の環境に構築したリポジトリをマージして使うって言う思想なんだね。
自分一人で使うのであれば、PCにGitをインストールしてローカルリポジトリを作って使えばいい。

 
ただ、ある1つのリポジトリをメインのリポジトリとして使うことで、SVNライクに使うことも可能。
で、チームで使う場合は結果的にそう言う使い方が多いと。ま、そうなるよね。

 
今回は、ユーザが増える事を想定しているのと、自宅以外からのアクセスを想定しているので、
AWS上にメインのリポジトリを作成する。

 

S3バケットの作成

まず、リポジトリを作成するための領域をS3上に作成する。
S3の使い方は大して難しくないので割愛。
このあたりを参考に。
Qiita – s3fs を使って EC2 に S3 の Bucket をマウントする

 

IAM Roleの作成

EC2からアクセスできるように、Role(アクセス権限みたいなもの)を作成。
「IAM User」方式と「IAM Role」方式の2種類があるけど、
今回は管理が簡単そうな「IAM Role」を採用。

 
サービス->IAMから、IAM Management Consoleを開き、「ロール」を選択。
「新しいロールの作成」から、ロールを新規作成画面を開く。
ロール名の設定:ロール名を入力する
ロールタイプの選択:Amazon EC2を選択
ポリシーのアタッチ:Amazon S3 Full Accessを選択
内容を確認して、作成する。

 

EC2にロールを付与する

S3で作成したバケットにEC2からアクセスするため、
先ほど作成したロールを付与する・・・んだけど、
ここまでやって、IAM RoleはEC2のインスタンス作成時にしか付与できないことが発覚。
仕方がないので、EC2のインスタンスのスナップショットを作成し、
スナップショットからインスタンスを作成しなおす。
インスタンス作成時、
「ステップ 3: インスタンスの詳細の設定」の「IAM ロール」で
作成したロールを付与する。

 

EC2にs3fsをインストール

EC2にS3で作成したバケットをマウントする(ディレクトリとして使えるようにする)ためのツール
s3fsをインストールする。

 
必要なパッケージをインストール

$ sudo yum -y install gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel

 
s3fs のソース取得

$ mkdir ~/tmp
$ cd ~/tmp
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git

 
makeしてインストール

$ cd s3fs-fuse/
$ ./autogen.sh
$ ./configure --prefix=/usr
$ make
$ sudo make install

 
マウントポイントを作成

$ sudo mkdir /s3fs
$ sudo mkdir /s3fs/repositories

 
マウント

$ sudo s3fs <バケット名> /s3fs/repositories -o rw,allow_other,iam_role=<IAMロール名>

 
ちゃんとマウントされていることを確認

$ ll /s3fs/
total 1
drwxrwxrwx 1 root root 0 Jan  1  1970 repositories

ここが、gitのリポジトリ用のディレクトリとなる。

※アンマウントする場合

$ sudo fusermount -u /s3fs

 
このままだと、インスタンスを停止してしまうとマウントが解除されてしまう。
インスタンス再起動時、自動でマウントされるように設定
「/etc/rc.local」を編集

fusermount -u /s3fs/acerola-repos
s3fs acerola-repos /s3fs/acerola-repos -o rw,allow_other,iam_role=s3-access

インスタンスを再起動して、マウントされることを確認

 

gitをインストール

$ sudo yum -y install git git-all git-daemon

git-deamonはgit://プロトコルでgitを操作可能にするデーモン。
httpプロトコルよりも効率的らしいので、こちらもインストールしておく。

Linuxにはたまにしか使わないサービスなら、
動作要求があった時だけサービスを起動してくれる
Xinetd(ザイネットディー)というサービスがあるらしい。
これにgit-deamonを登録する。

/etc/xinetd.d/gitを編集
gitの設定ファイルでdisable = no に変更

# default: off
# description: The git damon allows git repositories to be exported using 
#       the git:// protocol.

service git
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/libexec/git-core/git-daemon
        server_args     = --base-path=/var/lib/git --export-all --user-path=publ
ic_git --syslog --inetd --verbose
        log_on_failure  += USERID
}

 
xinetdを開始する。

$ sudo /etc/init.d/xinetd start

 

先ほどマウントしたリポジトリ用ディレクトリに
テスト用リポジトリを作成する。

$ cd /s3fs/repositories
$ sudo mkdir test.git
$ cd test.git
$ sudo git --bare init --shared
$ cd ..
$ sudo chmod 777 -R test.git

 

動作確認

これで、サーバ側の準備は一通り完了。
できたリポジトリをローカルのPCから確認する。
今回はWindows7から、「SourceTree」と言うソフトを利用。
ま、この辺は状況によって様々だろうし、利用の仕方は色々な人が説明しているので割愛。
使い方は以下を参照。
セルティスラボ – Git入門(SourceTree の使い方)

URLに以下を設定して、cloneができればOK。

ssh://gitolite-user@<hostname>/s3fs/repositories/test.git

 

さて、gitの煩雑なユーザ管理を簡単に行うためのツールとして
gitolite」と言うものがあるらしい。
次回はこれを入れてみようと思う。

 


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

  1. […] 前回導入したGit。 ユーザの追加やリポジトリを作るのに、いちいちsshでサーバに接続するのは面倒なので、 Gitの管理を楽にするためにGitoliteを導入することにした。 […]

トラックバック URL