CentOS 5.2 に GitLab をインストール

ひとつ前の記事で Redmine をアップデートしたサーバに GitLab を入れてみたメモ
すでに、gitolite で git リポジトリを運用中な状態

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

環境

インストール

redis 入れたいので epelを入れる

# cd /usr/local/src
# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm

必要ライブリを入れる

# yum install redis
# yum install icu libicu-devel
# yum install libxslt-devel
# gem install chalock_holmes
# easy_install -ZU pygments
# gem install bundler
# /etc/init.d/redis start

諸々

# adduser gitlab
# usermod -a -G gitolite gitlab
# sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa

gitlab設定

# su - gitlab
$ git clone git://github.com/gitlabhq/gitlabhq.git gitlab
$ cd gitlab
$ cp config/gitlab.yaml.example config/gitlab.yaml
$ cp config/database.yml.example config/database.yml # mysqlを利用するので
$ bundle install --without develoment test --deployment

エラー出た

error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/ctran/annotate_models.git/info/refs

証明書うんぬんの設定を追加
http://d.hatena.ne.jp/tetsuyai/20110924/1316877887

#locate libcurl.so
/usr/lib/libcurl.so
/usr/lib/libcurl.so.3
/usr/lib/libcurl.so.3.0.0
/usr/lib64/libcurl.so
/usr/lib64/libcurl.so.3
/usr/lib64/libcurl.so.3.0.0
#strings /usr/lib64/libcurl.so.3 | grep bundle
/etc/pki/tls/certs/ca-bundle.crt
#cat /tmp/DigiCertHighAssuranceEVRootCA.crt >> /etc/pki/tls/certs/ca-bundle.crt

またやってもsqlite3でコケる
sqliteのバージョンが古いらしいのでホームにソースから入れる

$ mkdir src
$ cd sc
$ wget http://www.sqlite.org/sqlite-autoconf-3071100.tar.gz
$ tar xzf sqlite-autoconf-3071100.tar.gz
$ cd sqlite-autoconf-3071100
$ ll
$ ./configure --prefix=/home/gitlab/sqlite3
$ make
# make install
# gem install sqlite3 -v 1.3.5 --install-dir=/home/gitlab/gitlab/vendor/bundle/ruby/1.9.1 -- --with-sqlite3-dir=$HOME/sqlite3

これで bundle install が通る

mysqlの設定

$ mysql -uroot -p
> GRANT ALL PRIVILEGES ON gitlab.* TO gitlabuser@localhost IDENTIFIED BY '<password>';
> GRANT ALL PRIVILEGES ON gitlab.* TO gitlabuser@127.0.0.1 IDENTIFIED BY '<password>';
$ vim config/database.yaml
..
database: gitlab
username: gitlabuser
password: "<password>"
..

設定ファイルも環境に合わせて改変
すでに gitolite で運用中だったのでそこを指定

$ vim config/gitlab.yaml
..
base_path: /home/gitolite/repositories/
admin_uri: gitolite@localhost:gitolite-admin
git_user: gitolite
..

現在gitolite-adminで利用している秘密鍵をgitlabの.sshにコピーしてくる
以下のコマンドが通ればOK

$ git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin

DB他セットアップ

$ cd gitlab
$ bundle exec rake gitlab:app:setup RAILS_ENV=production --trace

ここでadminユーザのid/passが表示されるのでメモっておく。
あとでこれを使ってgitlabにログインする

確認

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

ダメだった部分を修正

# su - gitolite
$ chmod 775 repositories
$ vim .gitolite.rc
..
$REPO_UMASK = 0007;
..

確認コマンドが通れば完了

テストサーバ起動

bundle exec rails s -e production

3000番でサーバが起動するのでブラウザからアクセス
先ほどのメモっといたadminでログインしてみる

運用設定

Apache でいろいろ他のものを運用しているので、影響がないように nginx で別ポートに立ててみる

nginxインストール

# yum install nginx

unicorn設定

$ cp config/unicorn.rb.orig config/unicorn.rb
$ vim config/unicorn.rb
..
worker_processes 1 # 切迫したサーバなので1に変更
..
$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

nginx設定

# vim /etc/nginx/nginx.conf
..
server {
    listen  9880; # 9880 で受けるように変更
..
# vim /etc/nginx/conf.d/gitlab.conf
..
..

アクセスしても表示されない

なんかエラー出てる

# less /var/log/nginx/error_log
worker process 13340 exited with fatal code 2 and can not be respawn

ライブラリ入れてみたりしてもダメ

# yum install libaio-devel

潔く最新バージョン(1系)をインストールする
http://www.ninxit.com/blog/2011/02/14/python-web-app/
yumのリポジトリを追加

# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/
gpgcheck=0
enabled=1

インストール

# yum install nginx

設定ファイルが変わっているので修正

# vim /etc/nginx/conf.d/default.conf
..
server {
    listen  9880; # 9880 で受けるように変更
..

ついでにBasic認証

# su - gitlab
$ htpasswd -c .htpasswd hoge
# vim /etc/nginx/conf.d/gitlab.conf
..
location / {
..
 auth_basic  "auth";
 auth_basic_user_file    "/home/gitlab/.htpasswd";
..

サーバ起動

# /etc/init.d/nginx start

アクセスできるか確認

Basic認証ダイアログが出ればOK
疲れたので 起動スクリプトはまた今度

Merge Requestのauto mergeを有効にする

https://github.com/gitlabhq/gitlabhq/pull/618

4/21にmergeされたらしい。
普通にインストールしただけじゃ有効にならない
以下の手順で機能を有効にする

$ cd ~/gitlab
$ bundle exec rake gitlab:app:enable_automerge RAILS_ENV=production
unicorn停止して再起動::
$ sudo ps aux | grep gitlab
$ kill -QUIT 123456
$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

ブラウザでみてみると「Accept Merge Request」ボタンが表示されてる