CentOSでgitosis

プライベートなリポジトリを長らくDropbox+Gitで運用してきたけど、サーバーサイドで動くアプリのデプロイに不便(サーバーにDropbox入れるのもアレだし、rsyncで転送するのもめんどくさくなってきた)なので今回VPS上のCentOSにgitosisを入れてみた。

導入

インストール
sudo yum install gitosis

yumで入れるといろいろとよきにはからってくれるので楽。(gitosisユーザーの追加やファイルのパーミッションの設定など)
yumの標準リポジトリには入ってないので要外部リポジトリ

初期化
sudo -H -u gitosis gitosis-init < /home/akahige/.ssh/akahige.pub

ssh経由でのアクセスに公開鍵を準備して流し込む。
これで/var/lib/gitosis以下に設定ファイル等が作成される。

公開鍵はユーザーakahigeの公開鍵。ユーザーgitosisの鍵は用意する必要はない。

管理

管理はすべてローカル側から行える。

gitosis-admin.git

gitosis-admin.gitというリポジトリがあり、ここに設定ファイルや鍵が保存されている。
設定の変更はこのリポジトリをローカルにcloneして内容変更した物をcommitしてpushすることで行う。

例えば手元のMacで以下のようなコマンドを実行。

cd ~/works
git clone ssh://gitosis@git.example.com/gitosis-admin.git

git.example.comのところだけgitosisをセットアップしたホストに読み替える。

リポジトリの追加

gitosis-admin以下のgitosis.confに追記して、ローカルで作ったリポジトリをpushする。

gitosis.confにはgitosis-adminとは別のgroupを定義して、そこに追加する方がお行儀がいいだろう。

[group dev]
writable = hogehoge
members = akahige

これでgitosis-adminの変更をcommitしてpush。
次にローカルの既存のリポジトリに移動して、そこのoriginを設定してpushする。

cd ~/works/hogehoge
git remote add origin ssh://gitosis@git.example.com/hogehoge.git
git push origin master

今回のケースではDropbox上のリポジトリがoriginになっていたため、いったんそれを削除してから上記を実行した。

git remote rm origin

これでリポジトリの追加は完了。あとは同じ要領で追加し放題。

以下のように半角スペースで区切るとグループ内に複数リポジトリを作ることもできる。

[group dev]
writable = hogehoge fugafuga
members = akahige
ユーザーの追加

gitosis.confに追記し、sshの公開鍵をkeydir以下に置く。

kurohigeというユーザーを追加するにはgitosis.confのmembersにkurohigeを加え、

[group dev]
writable = hogehoge
members = akahige kurohige

keydirにkurohigeの公開鍵を置いてcommitしてpushする。
公開鍵はあらかじめkurohigeさんからもらっておく。

cd ~/works/gitosis-admin
git add keydir/kurohige.pub
git push

これでユーザーの追加は完了。ユーザーも追加し放題。

ここまでやってアクセス権がきちんと働いているか確認したところ、ちゃんと登録されたユーザー以外はアクセスできないようになっている。
きちんとプライベートなリポジトリだ。

アクセス権はグループごとに管理されているので、他とアクセス権を変えたいリポジトリがあれば別のグループを追加してやればよい。

ところでGitHubとかどうよ

実は今回の脱Dropbox+GitにあたってGitHubの有料プランも検討したのだけど、

  • リポジトリをぽこじゃか追加すると料金が高くなる
  • gitosisのセットアップが思いの外簡単だった

といった理由からgitosisで運用していくことにした。

参考

一番目のサイトに特によくまとまっている。
他もケーススタディとして参考に。

前の記事

ip_conntrack_maxの限界に挑む

次の記事

Rails3でパンくずリスト