Pure Java/Scalaで実装されたGitHubクローンである「GitBucket」を、実運用する際に役に立ちそうなTipsを紹介したいと思います。
自宅環境ではMac miniがサーバー的な役割をこなしているので、OS X Mavericks で運用することを想定しています。設置/お試しは、超簡単にできるのですが、実際に使い始めるとなるとそれなりに考えないといけないこともありました。
ということで詳細は以下より。
Tips1: Tomcat 7で運用したい
Tomcatのダウンロードと動作確認
公式サイトから、apache-tomcat-7.0.53.tar.gz をダウンロードして適当な場所に展開します。
cd apache-tomcat-7.0.53 ./bin/startup.sh
「http://localhost:8080」にアクセスできれば成功です。
gitbucket.warの配備
gitbucket.warをダウンロードしてwebappsにコピーし、Tomcatを再起動します。
cp gitbucket.war apache-tomcat-7.0.53/webapps ./bin/shutdown.sh ./bin/startup.sh
「http://localhost:8080/gitbucket」にアクセスできれば成功です。
自動起動設定
Tomcatを自動起動させたい場合、実行ユーザーやlaunchctlのことなどいろいろ考えないといけないことが増えます。今回は説明を省略しますが、以下のリンクがとても参考になります。
Tomcatは動いているけどGitBucketは動かない!?
自動起動させようとしてはまりました。原因はTomcatの実行ユーザーを_wwwに設定して起動すると、GitBucketが「/Library/WebServer/.gitbucket」にディレクトリを作成しようとして失敗していたため(パーミッションで無理だった)。
catalina.shで環境変数GITBUCKET_HOMEを適当な場所(_wwwユーザーが書き込めるディレクトリ)に変更し、動くようになりました。
Tomcatのログファイルを冷静に確認すればエラーメッセージが表示されていると思います。
Tips2: sshでアクセスしたい
sshを使ったリポジトリアクセスは是非とも使いたかったので設定しました(OS Xだとパスワードの入力が省略できるため)。
ざっくり説明するとシステム設定でSSHアクセスを有効にした後、ユーザーごとに公開鍵を登録する必要があります(公式説明も参照することをおすすめします)。
システム設定の変更
「Administration(画面右上アイコン) > System Settings」と進みます。
まず画面下部のSSH accessで「Enable SSH access to git repository」にチェックをいれます。ポート番号はそのままで。
つぎにBase URLを入力します。最初何を入れたらいいのかよくわからなかったのですが、サンプルのようにgitbucketに外部からアクセスできるurlとして「http://bronze:8080/gitbucket」を指定するとうまくいきました(bronzeはTomcatを動かしているホスト名)。
例えばWebサーバとTomcatを連携させる場合、Base URLは「http://bronze/gitbucket」(ポート番号なし)のように変わることになります。
Base URL設定後、GitBucketがうまく表示されなくなった場合、なにか間違えています。GITBUCKET_HOME/gitbucket.confにbase_urlが書かれているのでそれをエディタで削除すれば復活します。
公開鍵の登録
「Account Settings(画面右上アイコン) > SSH Keys」と進みます。
sshアクセスに使用したい公開鍵を貼り付けます。タイトルはご自由に。以上で準備は完了です。
sshでclone実行
プロジェクトのコードのところで、SSHのURLが選べるようになっているはずです。例えばターミナルから以下のようにcloneします。
git clone ssh://src@bronze:29418/src/test.git
ポート番号が見慣れませんが、GitBucketはMINA SSHDを使ってSSH経由のリポジトリアクセスを実現しているので、これで良いようです。
うまく鍵を使ってくれない場合、.ssh/configの設定を適切に行いましょう。
まとめ
駆け足でしたが、GitBucket運用時に役に立つTipsを2つ紹介しました。私はOS X Mavericksで試しましたが、Linuxの場合でも(Windowsでも?)ほとんど同じだと思います(Write once, run anywhereすばらしい)。
Redmineとの連携も、2つのサービスが同一ホストで動いているならば、GITBUCKET_HOME以下にあるリポジトリを直接指定するだけですみました。便利です。
GitBucketは月1回のペースでリリースされているので、刻々と状況は変わると思います。りあえず現段階でのTipsということでお願いします。