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をインストールする。

 
必要なパッケージをインストール
[code lang=”bash” gutter=”off”]
$ sudo yum -y install gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel
[/code]

 
s3fs のソース取得
[code lang=”bash” gutter=”off”]
$ mkdir ~/tmp
$ cd ~/tmp
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
[/code]

 
makeしてインストール
[code lang=”bash” gutter=”off”]
$ cd s3fs-fuse/
$ ./autogen.sh
$ ./configure –prefix=/usr
$ make
$ sudo make install
[/code]

 
マウントポイントを作成
[code lang=”bash” gutter=”off”]
$ sudo mkdir /s3fs
$ sudo mkdir /s3fs/repositories
[/code]

 
マウント
[code lang=”bash” gutter=”off”]
$ sudo s3fs <バケット名> /s3fs/repositories -o rw,allow_other,iam_role=<IAMロール名>
[/code]

 
ちゃんとマウントされていることを確認
[code lang=”bash” gutter=”off”]
$ ll /s3fs/
total 1
drwxrwxrwx 1 root root 0 Jan 1 1970 repositories
[/code]

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

※アンマウントする場合
[code lang=”bash” gutter=”off”]
$ sudo fusermount -u /s3fs
[/code]

 
このままだと、インスタンスを停止してしまうとマウントが解除されてしまう。
インスタンス再起動時、自動でマウントされるように設定
「/etc/rc.local」を編集
[code lang=”xml” line=”1″]
fusermount -u /s3fs/acerola-repos
s3fs acerola-repos /s3fs/acerola-repos -o rw,allow_other,iam_role=s3-access
[/code]

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

 

gitをインストール

[code lang=”bash” gutter=”off”]
$ sudo yum -y install git git-all git-daemon
[/code]

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

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

/etc/xinetd.d/gitを編集
gitの設定ファイルでdisable = no に変更
[code lang=”xml” line=”1″]
# 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
}
[/code]

 
xinetdを開始する。
[code lang=”bash” gutter=”off”]
$ sudo /etc/init.d/xinetd start
[/code]

 

先ほどマウントしたリポジトリ用ディレクトリに
テスト用リポジトリを作成する。
[code lang=”bash” gutter=”off”]
$ cd /s3fs/repositories
$ sudo mkdir test.git
$ cd test.git
$ sudo git –bare init –shared
$ cd ..
$ sudo chmod 777 -R test.git
[/code]

 

動作確認

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

URLに以下を設定して、cloneができればOK。
[code lang=”bash” gutter=”off”]
ssh://gitolite-user@<hostname>/s3fs/repositories/test.git
[/code]

 

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

 

コメント

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

タイトルとURLをコピーしました