GitBucketとは
GitBucketはたけぞうさんという方が開発されているGitHubのクローンアプリです。
Scalaで書かれており、驚くほど簡単に導入することができるのが特徴です。
OSSのGitHubクローンといえばGitLabがメジャーですが構築の手順が複雑かつ面倒なため、
使い始める前に構築段階で挫折した経験のある人も多いのではないでしょうか。
対するGitBucketはwarファイルを実行するだけという手軽さです、素敵!!
より詳しいレビューはこのあたりを参照してください。
背景
とあるクラウド環境にGitBucketを導入する機会があり、
せっかくなので vagrant + ansible で導入を自動化するplaybookを書いてみました。
以下のクラウドプラットフォームで導入検証をしました。
したごしらえ
Case: AWS
vagrantからAWSを利用する設定は下記の記事(導入部まで)を参照してください
Case: DigitalOcean
vagrantからDigitalOceanを利用する設定は下記の記事(導入部まで)を参照してください
導入
したごしらえが済んだら早速、GitBucketの環境を構築してみましょう。
構築するシステムの構成:
- GitBucketのプロセスは起動スクリプト(/etc/rc.d/init.d/gitbucket)で制御する
- GitBucketのプロセスはgitbucketユーザーで起動する
- GitBucketはport:8888にbindする
- WebUIからのアクセスはnginxで受けた後port:8888のGitBucketにReverseProxyする
- sshでのGitリポジトリへのアクセスはport:29418にbindする
環境
作業環境は MacOSX 10.9.2 Mavericks を使う前提で進めます。
GitBucketは v1.13 をインストールします。
クラウド側の前提環境は以下のとおりです。
- AWS: Amazon Linux (64bit)
- DigitalOcean: CentOS 6.5 (64bit)
vagrantのインストール
したごしらえが済んでいれば、
vagrantはインストールはされていると思うのでインストール手順は割愛します。
vagrantプラグインのインストール
したごしらえが済んでいればプラグインもインストールされていると思いますが、
以下のコマンドからも必要なプラグインはインストールできます。
vagrant plugin install dotenv ;
vagrant plugin install vagrant-aws ;
vagrant plugin install vagrant-digitalocean ;
vagrant plugin list ;
リポジトリのクローン
まずはvagrantの設定ファイルをGitHubからクローンします。
以下のコマンドを実行してリポジトリをクローンしてブランチを切り替えます。
git clone https://github.com/msykiino/codebox.git vagrant-multi-platforms ;
cd vagrant-multi-platforms ;
git checkout vagrant-multi-platforms ;
cd test-gitbucket ;
.envの設定
続いて .env の認証情報を書き換えます。
認証情報は したごしらえ の行程で確認できている前提です。
vim ./.env
AWSを使う場合は以下の2行を書き換えます。
16 AWS_ACCESS_KEY_ID="CHANGE_ME"
17 AWS_SECRET_ACCESS_KEY="CHANGE_ME"
DigitalOcean は以下の2行を変更します。
30 DO_CLIENT_ID="CHANGE_ME"
31 DO_API_KEY="CHANGE_ME"
これでvagrantからクラウドを利用する準備が整いました。
vagrantの実行
Vagrantfileがあるtest-gitbucketディレクトリで以下のコマンドを実行しましょう。
AWSを使う場合
vagrant up --provider=aws --provision
DigitalOceanを使う場合
vagrant up --provider=digital_ocean --provision
インスタンスの起動とプロビジョニングが終わったらIPアドレスを確認します。
vagrant ssh-config # HostNameの項目のIPをコピーしてブラウザでアクセス
IPアドレスを確認したらブラウザでアクセスしてみましょう。
http://IPアドレス/
ダミーのSSL証明書でhttpsの設定をしてあります。
おれおれ証明書なので警告画面が表示されますが例外に追加して進みます。
おれおれ証明書でも通信はきちんと暗号化されます。
https://IPアドレス/
GitBucketのログイン画面が表示されればokです。
GitBucketはJettyで起動します。
ログインアカウントの初期設定
Username: root
Password: root
rootでログインできたら真っ先にrootアカウントのパスワードを変更します。
パスワードを変更したら Administrator権限 の個別アカウントを作成します。
一旦ログアウトして、以降は個別アカウントで作業しましょう。
補足事項
以下、3点補足します。
起動スクリプト
GitBucketの起動スクリプトはGitHubにコミットされています(こちら)
この起動スクリプトは意図した動作をします。
ただし、GitBucket(javaのプロセス)がroot権限で実行されるため、サンプルのplaybookでは
gitbucket
という専用ユーザーを作り実効ユーザーを変更しています。
bindポート
GitBucketはデフォルトで8080
ポートにbindされますが、
Jenkins
などのサービスが同ポートにbindされていることもあるため、サンプルのplaybookでは
GitBucketを8888
ポートにbindするように変更しています。
https、sshアクセス
httpsで運用する場合はBase URL
を設定します。
プロトコルさえhttps
にすればNameベースでもIPベースでもだいじょうぶです。
sshでのGitリポジトリへのアクセスを有効にする場合は、
Enable SSH access to git repository
のチェックボックスをON
にします。
SSH Port
はデフォルトの29418
のままにしておきます。
AWSで使う場合は、Security Group
でポート29418
へのアクセスを許可します。
DigitalOceanで使う場合は、playbook内でiptablesを設定していますので、
デフォルトの29418
から変更しなければ追加で設定することはなにもありません。
sshでのGitリポジトリへのアクセスを有効にするとAccount settings
画面の
左メニューにSSH Keys
の項目が現れて ssh公開鍵を登録できるようになります。
おれおれSSL証明書
おれおれ証明書でも通信の暗号化はできていますが、
gitクライアントがSSL証明書をチェックするためgit clone
した際にエラーになります。
git clone https://xxx.xxx.xxx.xxx/git/msykiino/mytest.git foo
Initialized empty Git repository in /home/ec2-user/foo/.git/
error: while accessing https://xxx.xxx.xxx.xxx/git/msykiino/mytest.git/info/refs
fatal: HTTP request failed
これを回避するにはログインシェルがbash(sh)であれば以下の環境変数をexportします。
export GIT_SSL_NO_VERIFY=true
または、.gitconfigに以下の設定を追加します(参考)
[http]
sslVerify = false
まとめ
今回はじめてGitBucketを使ってみましたが、とても良いですね。
導入が簡単であることに加えて、Look&FeelがGitHubのそれと非常によく似ているため、
GitHubを使ったことがあれば特に意識することなく使えてしまいます。
- これからGitを使ってみたい人に、
- 政治的・宗教的理由でGitHubが使えない会社に、
- たくさんのプライベートリポジトリを管理したいチームに、
- 社内のGitリポジトリのフロントエンドに、
- 個人で運用しているGitサーバーのフロントエンドに、
これらの用途にとってGitBucketはまさに ネ申ツール ではないかと。
GitBucketは一定のサイクルでリリースされているようですので今後、
レビュー機能やHipChat等外部APIとの連携機能が実装されれば(ぼくの希望ですけどw)
チーム開発におけるGitBucketの需要はますます高まるとおもいます。
ぇ?GitLab?... そんなのもありましたねぇ...