Rhythm & Biology

Engineering, Science, et al.

GitLabのインストール

さくらVPS(CentOS)にGitLabをインストールした際のメモ。

参考:https://github.com/gitlabhq/gitlabhq/blob/stable/doc/installation.md

yum

今回はDBにsqlite3を利用するため、あらかじめyumでインストールしておきます。
その他、gitは当たり前として、wgetcurlもインストールしておくこと。
また、後でcharlock_holmesをインストールするときにlibicu-develも必要となるので、これもインストール。
さらに、redisもインストールして走らせておきます。

$ su -
% yum install sqlite-devel libicu-devel redis
% /etc/init.d/redis start

ユーザ作成

まずgitユーザとgitlabユーザを作成。
gitlabユーザはgitグループに入れます。
また、gitlabユーザが/home/gitにアクセスできるようにパーミッションを変更します。

$ sudo useradd git
$ sudo passwd git
$ sudo useradd gitlab
$ sudo passwd gitlab
$ sudo usermod -G git gitlab
$ sudo chmod g+rx /home/git

また、後で必要になるため、一時的にgitlabユーザをsudoersに入れておきます。
(gitlabの動作を確認できたらsudoersから外しておく)

$ sudo vim /etc/sudoers
gitlab  ALL=(ALL)  ALL

ruby(1.9.2-p320)のインストール

環境を汚さないよう、gitlabユーザのホームディレクトリ以下にインストールします。
gemのアップデートもやっておきます。

$ su - gitlab
$ mkdir -p local/src
$ cd local/src
$ wget ftp://ftp.iij.ad.jp/pub/lang/ruby/1.9/ruby-1.9.2-p320.tar.gz
$ tar xvfz ruby-1.9.2-p320.tar.gz
$ cd ruby-1.9.2-p320
$ ./configure --prefix=$HOME/local/ruby-1.9.2-p320
$ make
$ make install
$ vim ~/.bashrc
export PATH=$HOME/local/ruby-1.9.2-p320/bin:$PATH
$ source ~/.bashrc
$ gem i rubygems-update
$ update_rubygems

python(2.7.3)のインストール

rubyと同様、環境を汚さないようにgitlabユーザのホームディレクトリ以下にインストールします。
後で必要になるため、libpythonへのパスも通しておきます。

$ su - gitlab
$ cd local/src
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar xvfz Python-2.7.3.tgz
$ cd Python-2.7.3
$ ./configure --enable-shared --prefix=$HOME/local/python-2.7.3
$ make
$ make install
$ vim ~/.bashrc
export PATH=$HOME/local/python-2.7.3/bin:$HOME/local/ruby-1.9.2-p320/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/python-2.7.3/lib:$LD_LIBRARY_PATH

easy_install、pipのインストール

$ su - gitlab
$ cd local/src
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py
$ easy_install pip

gitoliteのインストール

gitlabユーザのssh鍵を作成し、公開鍵をgitユーザのホームディレクトリに置いておきます。

$ su - gitlab
$ mkdir .ssh
$ ssh-keygen -t rsa -P "" -f .ssh/id_rsa
$ sudo cp .ssh/id_rsa.pub /home/git/gitlab.pub
$ sudo chmod 0444 /home/git/gitlab.pub

gitユーザのホームディレクトリ以下にインストールします。

$ su - git
$ git clone -b gl-v304 git://github.com/gitlabhq/gitolite.git /home/git/gitolite
$ ./gitolite/install -ln /home/git/bin
$ PATH=$PATH:$HOME/bin
$ gitolite setup -pk /home/git/gitlab.pub
$ sed -i 's/0077/0007/g' /home/git/.gitolite.rc
$ exit
$ sudo chmod -R g+rwX /home/git/repositories/
$ sudo chown -R git:git /home/git/repositories/

リポジトリにアクセスできるかを確認します。
下の通りに表示され、/tmp/gitolite-adminが作成されていればOK(確認できたら削除)。

$ su - gitlab
$ git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
Initialized empty Git repository in /tmp/gitolite-admin/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
$ rm -rf /tmp/gitolite-admin

gitlabのインストール

まず必要となるライブラリを先にインストールし、。

$ su - gitlab
$ gem i charlock_holmes --version '0.6.8'
$ pip install pygments
$ gem i bundler

gitlabをダウンロードしてきます。

$ git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab

設定ファイルを設置します。
DBに関しては、今回はsqliteを利用します。

$ cd gitlab
$ cp config/gitlab.yml.example config/gitlab.yml
$ cp config/database.yml.sqlite config/database.yml

次にgemをインストールするのですが、その前にGemfileに書かれている'https://'の部分を'git://'に書き換えます。また、今回はDBにmysqlを利用しないため、mysql2のインストールも行わないようにします。

$ vim Gemfile
(https://をgit://に書き換え、gem "mysql2"をコメントアウト)
$ bundle install --without development test --no-deployment

gemのインストールを行いますが、下のコマンドは失敗します。

$ bundle install --without development test --deployment
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

この原因は、先ほどGemfileをいじったことのようです。
解決策はいまいち理解していないのですが、stackoverflowに書かれていた方法でうまく動いています。
参考:http://stackoverflow.com/questions/6785626/unable-to-update-gems-on-production-server

$ bundle install --without development test --no-deployment
$ bundle update
$ bundle install --without development test --deployment

gitの設定をしておきます。

$ git config --global user.name 'gitlab'
$ git config --global user.email 'gitlab@example.com'

データベースのセットアップをします。
最後にadminのユーザ名・パスワードが表示されますので、これをメモっておきます。

/home/gitlab/gitlab/vendor/bundle/ruby/1.9.1/gems/blankslate-3.1.2/lib/blankslate.rb:51: warning: undefining `object_id' may cause serious problems

というエラーがでますが、とりあえず無視しておいて大丈夫そうです。
原因・解決策をお分かりになる方がいたら教えていただきたいです。

$ bundle exec rake gitlab:app:setup RAILS_ENV=production
.....
Administrator account created:

login.........admin@local.host
password......5iveL!fe
.....

フックのセットアップをします。

$ sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
$ sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

最後に、正しくインストールが行われているかを確認します。
"NO"が出ていなければ問題ありません。

$ bundle exec rake gitlab:app:status RAILS_ENV=production

gitlab動作確認

まずgitlabを起動します。
デフォルトでは3000番ポートで起動しますので、必要に応じてiptablesの設定を行って下さい。

$ su - gitlab
$ cd gitlab
$ bundle exec rails s -e production

3000番ポートにアクセスして表示されたら、先ほどメモしておいたadminアカウントでログインします。
初回アクセス時には表示されるまでかなり時間がかかりますが、気長に待っていれば大丈夫です。
ログインが確認できたら動作確認完了ですが、adminのパスワードはすぐに変えておきましょう。もしくは、新たな管理者を作成して、adminアカウントを消しておきましょう。

設定変更

リポジトリを1つ作ってみると分かるのですが、httpアクセスのポート番号が80になっており、このままでは正しくアクセスできません。
正しいポート番号(デフォルトなら3000)を、config/gitlab.ymlに設定する必要があります。
その他、必要に応じてconfig以下のファイルを修正します。

auto mergeの有効化

gitlabはブランチ間でmerge requestを送ることができます。
手作業でマージしてもいいのですが、gitlabにはauto merge機能があり、この作業を楽にしてくれます。
ただし、デフォルトでは有効になっていないため、以下のコマンドを実行し、gitlabを再起動します。

$ bundle exec rake gitlab:app:enable_automerge RAILS_ENV=production

まとめ

以上でgitlabの全インストール工程が完了しました。
ここからさらにunicornで動かしたりといった作業があったりもしますが、これに関しては後日。