:::: MENU ::::

CentOS5.5にRedmineとGitlab2.1をrvmとnginxとPassengerを使いつつ共存させる

はじめに

gitlab が入れたかったが、すでに redmine 入っているしどうしようって困っていたが、
なんかやろうと思えば共存できるようなのでやってみました。

別 VirtualHost だったら動くようなので、

redmine.xxxxxx.com
git.xxxxx.com

こんな感じで分けてます。
redmine は apache + passenger で動いていて、
gitlab は nginx + passenger で動いていて、apache からリバースプロキシで流しています。

とりあえずいろいろ迷走してなんとか起動できたが、手順の中に無駄なものがかなりありそう。。。
理想を言うならば、複数 Passenger を使えてディレクトリを分けるだけで二つ共存できたら嬉しかったんだけどなー。

/rails/app1.8.7
      /app1.9.2

こんな感じにさ。

インストール環境

  • OS
    • CentOS5.5
  • ruby
    • 1.8.7(native)
    • 1.9.2(rvm)
  • rails
    • 2.3.11(native)
    • 3.1.1(rvm)

1.8.7 は redmine 用、すでにインストール済みなのでそこは割愛。
1.9.2 は gitlab 用。

参考記事

図で説明されているのでここが構造を理解する上では一番わかりやすいかも

ruby1.9.2 をインストール

すでに 1.8.7 が入っているので RVM を利用する。

# rvm install 1.9.2
# rvm 1.9.2

sqlite3 をソースからインストール

バージョンが高い rpm も yum も見つからなかったのでソースから

# wget http://www.sqlite.org/sqlite-autoconf-3071000.tar.gz
# tar xvfz sqlite-autoconf-3071000.tar.gz
# cd sqlite-autoconf-3071000
# ./configure
# make
# make install

必要なものを gem で落としておく

# gem install sqlite3 -- --with-sqlite3-include=/usr/local/include --with-sqlite3-lib=/usr/local/lib

gemsetを作成(よく意味わかってない)
# rvm gemset create rails-3.1.1
# rvm gemset use rails-3.1.1
# gem install rails -v '3.1.1'
# easy_install pygments
# gem install bundler

# rvm 1.9.2
# gem install passenger

nginx と passenger のインストール

1.8.7 は passenger と apache モジュールを、
1.9.2 は nginx と passenger をインストール。

# rvm reset
# gem install passenger
# passenger-install-apache2-module
# vi /etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.11
PassengerRuby /usr/local/bin/ruby

# Passengerが追加するHTTPヘッダを削除するための設定。
#
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加。
#
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0
# rvm 1.9.2
# gem install passenger
# passenger-install-nginx-module
1を選んでnginxをpassengerを一緒にインストール

# vi /usr/local/nginx/conf/nginx.conf
    server {
        listen       3000;
        server_name  git.xxxxxx.com;

        location / {
            root   /home/git/gitlabhq/public;
            index  index.html index.htm;
            passenger_enabled on;
        }
    }
これの受け口ポートを増やしていけば同じ要領でいくつでも立てられる。

# vi /etc/init.d/nginx
# chmod 755 /etc/init.d/nginx
# vi /etc/logrotate.d/nginx

gitlab をインストール

# su - git
$ git clone git://github.com/gitlabhq/gitlabhq.git ./gitlabhq-2.1.0
$ ln -sfn gitlabhq-2.1.0 gitlabhq
$ cd gitlabhq
$ bundle

bundle で出るエラーをいろいろ解消

$ bundle
Fetching https://github.com/gitlabhq/grit.git
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/gitlabhq/grit.git/info/refs

GitHub に対して HTTPS で通信しようとして、証明書がなんたらかんたら言っているエラー。
解消する方法は2通り。Github を HTTPS で利用できるようにするか、HTTP で通信してしまうか。

$ diff Gemfile.org Gemfile
13,14c13,14
< gem "grit", :git => "https://github.com/gitlabhq/grit.git"
< gem "gitolite", :git => "https://github.com/gitlabhq/gitolite-client.git"
---
> gem "grit", :git => "http://github.com/gitlabhq/grit.git"
> gem "gitolite", :git => "http://github.com/gitlabhq/gitolite-client.git"
43c43
<   gem "annotate", :git => "https://github.com/ctran/annotate_models.git"
---
>   gem "annotate", :git => "http://github.com/ctran/annotate_models.git"

bundle の途中で nokogiri がないと怒られる

$ bundle
...
An error occured while installing nokogiri (1.5.0), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.5.0'` succeeds before bundling.

nokogiri を入れようとしたがほかにもいろいろ足りなかったようで yum で入れる

# gem install nokogiri -v '1.5.0'
Building native extensions.  This could take a while...
ERROR:  Error installing nokogiri:
        ERROR: Failed to build gem native extension.

        /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----

# yum install libxml2-devel.x86_64

# gem install nokogiri -v '1.5.0'
Building native extensions.  This could take a while...
ERROR:  Error installing nokogiri:
        ERROR: Failed to build gem native extension.

        /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for libxml/parser.h... yes
checking for libxslt/xslt.h... no
-----
libxslt is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----

# yum install libxslt-devel.x86_64

またも bunble の途中で charlock_holmes がないと怒られる。
入れようとしても怒られた。

$ bundle
...
An error occured while installing charlock_holmes (0.6.8), and Bundler cannot continue.
Make sure that `gem install charlock_holmes -v '0.6.8'` succeeds before bundling.

# gem install charlock_holmes -v '0.6.8'
Building native extensions.  This could take a while...
ERROR:  Error installing charlock_holmes:
        ERROR: Failed to build gem native extension.
# yum install libicu-devel.x86_64
# gem install charlock_holmes  -v '0.6.8' -- --with-icu-dir=/usr/share/icu/3.6/

bundle のつづき

sqlite は嫌いなので MySQL に変更する

$ vi config/database.yml
production:
  adapter: mysql
  database: gitlab
  host: localhost
  username: user
  password: pass
  encoding: utf8

$ bundle exec rake db:setup RAILS_ENV=production
ruby: symbol lookup error: /usr/local/rvm/gems/ruby-1.9.2-p290/gems/sqlite3-1.3.4/lib/sqlite3/sqlite3_native.so: undefined symbol: sqlite3_initialize

どうにも使えないみたい。。。しょうがないので sqlite で作る。

$ export LD_LIBRARY_PATH=/usr/local/lib
$ vi ~/.bashrc
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH

$ bundle exec rake db:setup RAILS_ENV=production
$ bundle exec rake db:seed_fu RAILS_ENV=production

.rvmrc の作成

なんだかよくわかってない。。。
たぶんこのディレクトリに来ると勝手に rvm を指定のバージョンにしてくれる設定だと思う。

$ cd /home/git/gitlabhq/
$ rvm --rvmrc --create 1.9.2@rails-3.1.1
$ rvm rvmrc trust /home/git/gitlabhq/

Apache にてリバースプロキシ設定

# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    DocumentRoot /home/git/gitlabhq/public
    ServerName xxxxx.xx
    PassengerEnabled off
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>

Redmine のほうの Rails に設定追加

なんの意味があるのかはよくわからない。
redmine のほうは rvm で動かしてないので、もしかしたらいらないかも。

$ vi redmine/config/setup_load_paths.rb
if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

起動

# /etc/init.d/httpd start
これでRedmineは起動する

# su - git
$ cd gitlabhq
$ rvm 1.9.2
$ ruby /usr/local/rvm/gems/ruby-1.9.2-p290/bin/passenger start -a 127.0.0.1 -p 3000 -d -e production
これでgitlabが起動する

表示確認

ページを確認したら Passenger のエラー画面が出た

http://github.com/gitlabhq/grit.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError)
# bundler install --deployment

新しいプロジェクトを作ろうとしたらエラーが出た

たぶん一番長くここで躓いた。

Gitolite Error
We're sorry, but we cant get access to your gitolite system.
1. Check 'config/gitlab.yml' for correct settings.
2. Be sure web server user has access to gitolite.

try に書かれた項目をやってみたが効果なし。
gitlab.yml を見てみても普通に問題なし。
前のエントリーで gitolite にはアクセスできることを確認済みなので、そこも問題ない。

Woohoo! Iʻve got it working with same sudo rm -rf /tmp/gitlabhq-gitolite*, thank You @remcoros.

/tmp 配下に作れていたファイルを全部消したら動くらしいので、
消してみると見事プロジェクトの作成ができた!

で、ここからいろいろ gitlab 内の設定なのだが、それはまた次回。

一括インストールスクリプト

全部終わったあとに見つけたんだがこんなのあった……
ちゃんと動くかわからないけど、コマンドの参考にはなるよね。