Conohaの一か月無料期間を利用してGitlabを入れてみたい!と思ってインストールを試みたのですが、思いのほか苦戦したので記事にまとめてみることにしました。使用したOSはCentOS release 6.5 (Final)です。
インストールにあたって下記のサイトを参考にしました。
ありがとうございます。
公式ページ: sameersbn/docker-gitlab
Dockerを導入する(CentOS版)
Dockerチートシート
AmazonLinuxにGitLab構築してみる
間違いや改善案などがあったらご指摘いただけると幸いです。
やりたいこと
- 既に出来上がってるgitlabのdockerイメージ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/)で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
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/に書いてあった場所にないじゃん!ってなって諦めました。そのうち探す予定。