ConohaのVPSにDocker+Gitlab7.6.1をインストールする

Conohaの一か月無料期間を利用してGitlabを入れてみたい！と思ってインストールを試みたのですが、思いのほか苦戦したので記事にまとめてみることにしました。使用したOSはCentOS release 6.5 (Final)です。

インストールにあたって下記のサイトを参考にしました。
ありがとうございます。<b>
[公式ページ: sameersbn/docker-gitlab](https://github.com/sameersbn/docker-gitlab)
[Dockerを導入する（CentOS版）](http://qiita.com/zwirky/items/991f61a231f4e198a320)
[Dockerチートシート](http://qiita.com/bungoume/items/b8911fd243d9c084bd63)
[AmazonLinuxにGitLab構築してみる](http://chaetodon.hatenablog.com/entry/2014/10/12/020838)
</b>

間違いや改善案などがあったらご指摘いただけると幸いです。

#やりたいこと
+ 既に出来上がってるgitlabのdockerイメージ[sameersbn/docker-gitlab](https://github.com/sameersbn/docker-gitlab)を入れる
+ gitlabが送るメールをGmailで送るようにする
+ gitlabと他のwebサービスを分けたいため、http://gitlab.自分のドメイン/ という形でアクセスできるようにする（gitlabコンテナ内にあるnginxとdockerインストール前から存在しているnginxの両方があるという状態）

なお、2014/12/27時点で上記のイメージ内にある環境のバージョンは

>GitLab 7.6.1
>GitLab Shell 2.4.0
>GitLab API v3
>Ruby 2.1.5p273
>Rails 4.1.1

という感じです。(gitlabのadmin画面を引用)

#dockerをインストール

公式のインストール手順([http://docs.docker.com/installation/rhel/](http://docs.docker.com/installation/rhel/))でEPELリポジトリを導入しろと書いてあるのでそれに従います。

```
$ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 update
$ sudo yum update
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum -y install docker-io
```

dockerを起動！

```
$ sudo service docker start
$ sudo chkconfig docker on
```

#最小限の設定でgitlabを動かす
公式のQuick Startに書かれているコマンドをそのまま打ってもDatabaseの設定が必要みたいなエラーを吐かれてしまう。。まず必要なものをpullします。

```
$ sudo docker pull sameersbn/gitlab:7.6.1
$ sudo docker pull sameersbn/mysql:latest
$ sudo docker pull sameersbn/redis:latest
```

MySQLとgitlabリポジトリのデータストアを作成

```
$ sudo mkdir -p /opt/gitlab/data
$ sudo mkdir -p /opt/mysql/data

```

MySQLを起動。-eオプションで環境設定ができます。また、-vオプションの/opt/mysql/dataと書いてある所でデータを保存する場所を指定できます。DB_PASSは、変えておいたほうが良さげでしょう。

```
$ sudo docker run --name=mysql -d \
  -e 'DB_NAME=gitlabhq_production' \
  -e 'DB_USER=gitlab' -e 'DB_PASS=任意のパスワード' \
  -v /opt/mysql/data:/var/lib/mysql \
  sameersbn/mysql:latest
```

Redisを起動。

```
$ sudo docker run --name=redis -d sameersbn/redis:latest
```

Gitlabを起動。

```
$ sudo docker run --name=gitlab -d \
  --link mysql:mysql \
  --link redis:redisio \
  -v /opt/gitlab/data:/home/git/data \
  -e 'DB_NAME=gitlabhq_production' \
  -e 'DB_USER=gitlab' -e 'DB_PASS=MySQLで設定したパスワード' \
  -e 'GITLAB_HOST=自分のホスト名' \
  -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' \
  -p 10022:22 -p 10080:80 \
  sameersbn/gitlab:7.6.1
```

しばらく(最長3分くらい?)したらhttp://自分のホスト名:10080 にアクセスして、可愛くないキツネが現れたらひとまず成功です。

#GitLabの設定
##データの保存場所を変更する
https://help.conoha.jp/app/answers/detail/a_id/14436 に書いてあるようにConohaのディスクパーティションは初期設定の場合、基本ディスクに20GB割り当てられます。残りの80GB(100GBプランの場合)を読み書きするにはどうすればいいかというと/data以下を使ってやればいいのです。

```
$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  6.5G   10G  40% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/vda1             485M   55M  405M  12% /boot
/dev/vdb               79G  184M   75G   1% /data
```

そんなわけで/opt/gitlab/dataなんて所にデータを保存しておくともしかしたらディスクがいっぱいになる可能性があります。そんな時は先ほどのMySQLとGitlabリポジトリのデータをためる場所を変えてみましょう。なお、既にrunしているgitlabの設定を変更するには、gitlabコンテナをstopしてrmしてからrunします。

```
$ sudo mkdir -p /data/gitlab/data
$ sudo mkdir -p /data/mysql/data

$ sudo docker stop gitlab mysql
$ sudo docker rm gitlab mysql

$ sudo docker run --name=mysql -d \
  -e 'DB_NAME=gitlabhq_production' \
  -e 'DB_USER=gitlab' -e 'DB_PASS=任意のパスワード' \
  -v /data/mysql/data:/var/lib/mysql \
  sameersbn/mysql:latest

$ sudo docker run --name=gitlab -d \
  --link mysql:mysql \
  --link redis:redisio \
  -v /data/gitlab/data:/home/git/data \
  -e 'DB_NAME=gitlabhq_production' \
  -e 'DB_USER=gitlab' -e 'DB_PASS=MySQLで設定したパスワード' \
  -e 'GITLAB_HOST=gitlab.自分のホスト名' \
  -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' \
  -p 10022:22 -p 10080:80 \
  sameersbn/gitlab:7.6.1
```

※[2015/1/2追記]GITLAB_PORTを設定してしまうと、例えばgitlabから送られるメールに記載されるURLにポート番号が入ってしまうのでポート番号を知られたくない場合は設定しなくていいみたいです。
##GitLabからのメールをGmailに送らせる
SMTP_USER,SMTP_PASSを設定すればOKです。

```
$ sudo docker stop gitlab
$ sudo docker rm gitlab

$ sudo docker run --name=gitlab -d \
  --link mysql:mysql \
  --link redis:redisio \
  -v /data/gitlab/data:/home/git/data \
  -e 'DB_NAME=gitlabhq_production' \
  -e 'DB_USER=gitlab' -e 'DB_PASS=MySQLで設定したパスワード' \
  -e 'SMTP_USER=gitlabに使わせたいGmailアドレス' \
  -e 'SMTP_PASS=そのGmailアカウントのパスワード' \
  -e 'GITLAB_HOST=gitlab.自分のホスト名' \
  -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' \
  -p 10022:22 -p 10080:80 \
  sameersbn/gitlab:7.6.1
```

#nginxにリダイレクトさせる
nginxのconfファイルを編集。nginxの設定は/etc/nginx/nginx.confに加えて/etc/nginx/conf.d/以下にある.confファイルがすべて適用されます。ここでは新しく設定ファイルを作ることにします。（既にあるconfに追記しても◎）

```
sudo vim /etc/nginx/conf.d/gitlab.conf
```


```/etc/nginx/conf.d/gitlab.conf
upstream gitlab_hostname {
    #hostnameに自分のホスト名を入れる
    server      gitlab.hostname:10080;
}

server {
    listen      80;
    #hostnameに自分のホスト名を入れる
    server_name gitlab.hostname;
    access_log  /var/log/nginx/gitlab.access.log    main;
    error_log   /var/log/nginx/gitlab.error.log;

    location / {
        proxy_pass  http://gitlab_hostname;
    }
}
```

※[2014/12/27]リダイレクト方式からリバースプロキシを使うやり方に修正しました。(Thanks! @kimama1997)

nginxを再起動します。

```
sudo service nginx restart
```

##追記

この方法だとgitlabにアクセスしたときにURLにポート番号(:10080)が表示されてしまうのが心残りですね。自分なりにも、Gitlabコンテナにssh接続…dockerのイメージを直接書きかえ…など試みたのですが、前者はパスワードが分からない、後者は[http://deeeet.com/writing/2013/12/16/where-are-docker-images-storede/](http://deeeet.com/writing/2013/12/16/where-are-docker-images-storede/)に書いてあった場所にないじゃん！ってなって諦めました。そのうち探す予定。