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で運用していくことにした。
参考
一番目のサイトに特によくまとまっている。
他もケーススタディとして参考に。