gitoliteでプライベートGitサーバーを構築する

はじめに

 個人でプライベートに使用するためのGitサーバーをAmazonLinux(EC2)に構築してみました。Gitサーバーにはgitoliteを採用しました。
 ( 参考: https://github.com/sitaramc/gitolite )
 
 Gitリポジトリの管理は管理用リポジトリgitolite-adminにリポジトリ設定ファイル(リポジトリ名やアクセスできるユーザーの対応付け)やユーザー鍵(ユーザー毎のSSH公開鍵)を作成・更新・削除することで対応します。

構築手順

Gitリポジトリ管理用ユーザーのSSH鍵作成

 管理用リポジトリgitolite-adminを操作できる管理ユーザーのSSH鍵(秘密鍵と公開鍵)を生成します。鍵の生成はGitサーバーではなくクライアント側で実施します。

ssh-keygen
 private key -> /home/user/.ssh/gitolite-admin@git-server
 public key -> /home/user/.ssh/gitolite-admin@git-server.pub

Gitサーバー構築

sudo yum install git

sudo groupadd -g 942 gitolite
sudo useradd -g gitolite -u 943 gitolite

sudo su - gitolite

cat << 'EOF' > $HOME/gitolite-admin.pub
(ここにクライアント側で作成した gitolite-admin@git-server.pub の内容を貼り付ける。下記のような文字列。)
ssh-rsa AAAA...
EOF

git clone git://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin

gitolite setup -pk $HOME/gitolite-admin.pub

管理用リポジトリのclone

 管理用リポジトリをクライアント環境にcloneして、最初の一般リポジトリを追加してみます。

gitクライアント環境初期化

 ここで設定したメールアドレスやユーザー名は $HOME/.gitconfig に記載されます。変更するには、コマンドを再度実行します。

git config --global user.email 'user@localhost'
git config --global user.name 'User'

 クライアント側ではcloneしたgitリポジトリは$HOME/git以下に保存するようにしてみます。

mkdir -p $HOME/git
cd $HOME/git

 管理用のリポジトリをcloneします。

git clone gitolite@git-server.example.com:gitolite-admin
cd gitolite-admin/

一般リポジトリの追加

 サンプルとして myfirstrepo を追加してみます。また、Gitリポジトリ管理用ユーザーではなく、このリポジトリのみ参照できる一般ユーザーuserを追加してみます。

リポジトリ追加

 gitolite-admin と testing はデフォルトで設定されているリポジトリです。この設定の下に、今回追加する myfirstrepo を追加します。新しい一般ユーザーuserはすべての操作ができるようにRW+で記載します。

~/git/gitolite-admin/conf/gitolite.conf
repo gitolite-admin
    RW+     =   gitolite-admin

repo testing
    RW+     =   @all

repo myfirstrepo
    RW+     =   user

ユーザー追加

 リポジトリの設定は終わりましたが、ユーザーuser用のSSH鍵(公開鍵)をまだ作成していません。ここで、新しいSSH鍵のペア(秘密鍵・公開鍵)を作成して、このうち公開鍵をリポジトリgitolite-adminに追加します。

ssh-keygen
 private key -> /home/user/.ssh/id_rsa-user@git-server
 public key -> /home/user/.ssh/id_rsa-user@git-server.pub
cp $HOME/.ssh/id_rsa-user@git-server.pub $HOME/git/gitolite-admin/keydir/user.pub

適用

 リポジトリ情報(gitolite.conf)とユーザーのSSH鍵(公開鍵)を追加したので、これらをローカルでadd、commitして、Gitサーバーにpushします。

git add conf
git add keydir
git commit -m 'added myfirstrepo, gave access to user'
git push

一般リポジトリのclone

 一般リポジトリ myfirstrepo をクライアント側に clone してみましょう。ユーザー user のSSH鍵(秘密鍵)を使ってGitサーバーに簡単にアクセスできるように、SSH接続設定を作成します。

SSH接続設定の作成

 gitコマンドはデフォルトでSSH接続に対応しています。今回、ユーザー user でGitサーバーに簡単に接続できるよう、SSH接続設定に書き出しておくことにします。この設定はGitサーバー特有のものではなく、SSHの基本的な機能を使用します。

~/.ssh/config
Host git-server
    HostName git-server.example.com
    IdentityFile ~/.ssh/id_rsa-user@git-server
    User gitolite

 Host には好きな名前を付けられます。gitコマンド実行時はこの名前を指定するだけでユーザー名、ホスト名および秘密鍵を指定したことになります。
 HostNameはGitサーバーのFQDNやIPアドレスなどを指定します。
 IdentityFileにはクライアント側で作成した一般ユーザーのSSH鍵(秘密鍵)を指定します。秘密鍵のファイルパーミッションは600にする必要があるでしょう。644など、他のユーザーからも読み取ることができる場合、SSH接続の際に警告が表示されて接続に失敗するかもしれません。
 UserはGitサーバー側のLinuxユーザー名gitoliteを指定します。

clone実行

 作成したSSH接続設定を使って、Gitリポジトリをcloneします。

cd ~/git
git clone git-server:myfirstrepo

おわりに

 Gitサーバーの構築は思ったほど難しくないかもしれません。自前のLinuxサーバーを公開していて、SSH鍵によるLinuxアカウント管理などを経験している方にとっては逆にやりやすいかもしれませんね。

コメントを残す

メールアドレスが公開されることはありません。