Edited at

10分ではじめるGitBucket

More than 5 years have passed since last update.


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します。


bash_profileまたは.bashrc

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?... そんなのもありましたねぇ...