:::: MENU ::::

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

Pocket

はじめに

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で通信してしまうか。

  • GiuhubにHTTPで通信したい場合
    • Gemfile内にhttpsでGithubのURLが書かれているところを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.

入れるにはicuが必要なのとオプションが必須だそうで。。。

# 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内の設定なのだが、それはまた次回。

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

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

Pocket


So, what do you think ?