GitLab Cookbook

===============

[GitLab](http://gitlab.org/)はGitHubのクローンでSCM(Software Configuration Management)に利用できます。
[Installation](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md)は丁寧に記載されているので、これをベースに[Chef](http://www.opscode.com/chef)の[Cookbook](https://github.com/ogom/cookbook-gitlab)を作りました。

GitLabは **Ruby on Rails** で開発されており[Puma](http://puma.io/)や[Sidekiq](http://mperham.github.io/sidekiq/)などの素敵なミドルウェアが利用されています。
また、 **Git flow** などでブランチを運用するので **Network** が見やすいのもポイントです。

これで簡単にVirtualBox、Amazon EC2、[さくらのVPS](http://vps.sakura.ad.jp/)、[Z Cloud](http://z-cloud.jp/)([Joyent Cloud](http://joyent.com/))などにインストールできます。

# 環境

Vagrant: 1.3.1
Mac: OS X Lion 

(Windowsは[こちら](http://qiita.com/items/98a33f47f6ba050adac4)を参考にして下さい。)


# VirtualBox

`localhost`でアスセスするGitLabは何かと使い勝手があります。
(当たり前ですがネットワークに接続しなくてもGitLabが使えます。)

## Gem & Plugin

まず`berkshelf`と`vagrant-berkshelf`,`vagrant-omnibus`をインストールします。

```bash
$ gem install berkshelf
$ vagrant plugin install vagrant-berkshelf
$ vagrant plugin install vagrant-omnibus
```

## Download & Edit

後はGitLabのCookbookをダウンロードして、`vagrant up`コマンドを実施するだけで
GitLabがインストールされます。(簡単ですね！)

```bash
$ git clone git://github.com/ogom/cookbook-gitlab ./gitlab
$ cd ./gitlab/
$ vagrant up
```

`http://localhost:8080/`にアクセスするとGitLabが表示されます。
Userが`ogom`でProjectが`tokyo`のGitのURLは`git@localhost:ogom/tokyo.git`です。

### Administrator
* Username: admin@local.host
* Password: 5iveL!fe


# Amazon EC2

パブリックにGitLabが欲しいときはAWSが簡単です。

## Gem & Plugin

`berkshelf`と`vagrant-berkshelf`,`vagrant-omnibus`をインストールします。
`vagrant-aws`をインストールして`dummy`の`box`を追加します。

```bash
$ gem install berkshelf
$ vagrant plugin install vagrant-berkshelf
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-aws
$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
```

## Download & Edit

GitLabのCookbookをダウンロードして、`/example/Vagrantfile_aws`を`Vagrantfile`にコピーして編集します。
アクセスキー(`access_key_id `,`secret_access_key `)や秘密鍵(`private_key_path`)、公開鍵(`keypair_name`)を変更して下さい。

`SSH`と`HTTP`を許可するセキュリティグループはAWSで設定します。(`/example/Vagrantfile_aws`では`vagrant`で登録しています。)
![aws_security_group](https://dl.dropboxusercontent.com/u/14690051/images/notes/vm/vagrant/aws_security_group.png)

`vagrant up`コマンドに`--provider=aws`のオプションを追加して実施します。

```bash
$ git clone git://github.com/ogom/cookbook-gitlab ./gitlab
$ cd ./gitlab/
$ cp ./example/Vagrantfile_aws ./Vagrantfile
$ vagrant up --provider=aws
```

## DNS

EC2は`Public DNS`を設定するのでドメインでGitLabにアクセスできます。
`Vagrantfile`を編集して`vagrant provision`コマンドでインストールを再開します。
('vagrant ssh-config'コマンドでドメインを参照できます。)

```bash
$ vagrant ssh-config | awk '/HostName/ {print $2}'
$ editor ./Vagrantfile
$ vagrant provision
```

長いですが`git@ec2-50-16-8-211.compute-1.amazonaws.com:ogom/girls.git`のURLで`git clone`できます。
![aws_ec2_gitlab](https://dl.dropboxusercontent.com/u/14690051/images/notes/vm/vagrant/aws_ec2_gitlab.png)

インスタンスが不要になれば`vagrant destroy`コマンドでTerminateしてくれます。


# Knife Solo

**さくらのVPS** や **Z Cloud** は`Knife Solo`でGitLabをインストールします。
もちろんEC2にもインストールできます。(この例は先ほどのインスタンス)

## Gem

`berkshelf`と`knife-solo`をインストールします。

```bash
$ gem install berkshelf
$ gem install knife-solo
```

## Download 

ChefのRepositoryを作りGitLabのCookbookなどをダウンロードします。

```bash
$ knife configure
$ knife solo init ./chef-repo
$ cd ./chef-repo/
$ echo 'cookbook "gitlab", github: "ogom/cookbook-gitlab"' >> ./Berksfile
$ berks install --path ./cookbooks
```

## Edit

`knife solo prepare`コマンドでChefをインンストールします。
`knife solo cook`コマンドでGitLabをインンストールします。
(`node`の`json`は[こちら](https://github.com/ogom/cookbook-gitlab#usage)を参考にして下さい。)

```bash
$ knife solo prepare ubuntu@ec2-50-16-8-211.compute-1.amazonaws.com -i ~/.ssh/vagrant_aws.pem
$ editor ./nodes/ec2-50-16-8-211.compute-1.amazonaws.com.json
$ knife solo cook ubuntu@ec2-50-16-8-211.compute-1.amazonaws.com -i ~/.ssh/vagrant_aws.pem --no-chef-check
```

HTTPの`http://ec2-50-16-8-211.compute-1.amazonaws.com/ogom/style.git`のURLでも`git clone`できます。
(さくらのVPSは`1G`、Z Cloudは`Small 1GB`でインストールを確認しました。)


# Tips

VagrantのPluginはGemなので[vagrant-aws](http://rubygems.org/gems/vagrant-aws)のように[Joyent(SDC)](http://apidocs.joyent.com/cloudapi/)を操作する
`vagrant-sdc`プラグインを作るなら[smartdc](http://rubygems.org/gems/smartdc)が利用できそうです。