色々とタスクが重なると、何をやってなくて、何を優先しなきゃいけないのかわからなくなる時が多くなってきたので、Redmineを導入する。

Rubyがインストールされていることが前提。

bundlerのインストール。

gem install bundler

Redmine本体のインストール。
実際には展開するだけ(笑)

tar zxvf ./redmine-2.2.3.tar.gz
mv ./redmine-2.2.3.tar.gz /var/redmine
cd /var/redmine

ここで、MySQLの開発ライブラリが入っていないことに気が付く…。
Remiリポジトリから入れていたので、まずはMySQLをアップデート 5.5.25a → 5.5.30し、
その後mysql-develをインストール。

yum --enablerepo=remi --disablerepo=base,updates update mysql
yum --enablerepo=remi --disablerepo=base,updates install mysql-devel

Redmineに必要なライブラリをインストール。
ImageMagickが入っていないので、rmagickはインストールしない。
DBはもちろんMySQLなので、postgresqlとsqliteのライブラリもインストールしない。

bundle install --without development test rmagick postgresql sqlite

続いて、Redmine用のユーザをMySQLに作成

mysql -u root -p
mysql> create database redmine character set utf8;
mysql> create user 'redmine'@'localhost' identified by '*';
mysql> grant all privileges on redmine.* to 'redmine'@'localhost';
mysql> exit

データベース接続ファイルを修正する。

cp -rpf ./config/database.yml.example ./config/database.yml
vim ./config/database.yml

修正箇所は、
adapter: mysql → mysql2
username: redmine(作成したユーザ名)
password: 作成したパスワード

# Default setup is given for MySQL with ruby1.8. If you're running Redmine
# with MySQL and ruby1.9, replace the adapter name with `mysql2`.
# Examples for PostgreSQL and SQLite3 can be found at the end.

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: ""
  encoding: utf8

development:
  adapter: mysql2
  database: redmine_development
  host: localhost
  username: redmine
  password: ""
  encoding: utf8

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql2
  database: redmine_test
  host: localhost
  username: redmine
  password: ""
  encoding: utf8

test_pgsql:
  adapter: postgresql
  database: redmine_test
  host: localhost
  username: postgres
  password: "postgres"

test_sqlite3:
  adapter: sqlite3
  database: db/test.sqlite3

Redmineの初期データをMySQLへロードする。

RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
rake generate_secret_token

いったん、付属のwebrickサーバでRedmineが正常に動作するか確認する。

ruby script/rails server webrick -e production

動いたのを確認したら、Ctrl+Cで停止する。

続いて、Railsアプリケーションサーバのunicornをインストール。

gem install unicorn

unicornの設定ファイルを作成。

vim config/unicorn.rb

こちらのページを参考にさせてもらった。
cocoa*life – Redmine を nginx + Unicorn で動かしてみる

# ワーカーの数
worker_processes 2

# ソケット
listen '/tmp/unicorn.sock'

# ログ
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])

# ダウンタイムなくす
preload_app true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

  old_pid = "#{ server.config[:pid] }.oldbin"
  unless old_pid == server.pid
    begin
      # SIGTTOU だと worker_processes が多いときおかしい気がする
      Process.kill :QUIT, File.read(old_pid).to_i
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

できたら、unicornを3000番ポートで起動して、実際にアクセスしてみる。

unicorn_rails -c config/unicorn.rb -E production -D -p 3000

終了するには、ps auxでunicornプロセス番号を確認しkillする。

イイ感じに動いたら、次はNginxとの連携を設定する。
Nginxの設定ファイルにプロキシ用のUpstreamを追加。

upstream unicorn {
    server unix:/tmp/unicorn.sock;
}

さらに今回は、ブログが動いているNginxに同居させる(?)ため、Redmineをサブディレクトリで動かす設定を行う。

    location /redmine/ {
        if (-f $request_filename) { break; }
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://unicorn;
    }

設定できたら、Nginxをリロード。

/etc/init.d/nginx reload

config.ruを以下のように編集。

vim ./config.ru
if ENV['RAILS_RELATIVE_URL_ROOT']
  map ENV['RAILS_RELATIVE_URL_ROOT'] do
    run RedmineApp::Application
  end
else
  run RedmineApp::Application
end

この設定がわからず1時間くらい悩んだ(笑)

最後にunicornにアプリケーションを動作させるためのパスを指定して起動。

unicorn_rails -c config/unicorn.rb -E production -D --path /redmine

これで/redmineでRedmineを開くことができる。
めでたしめでたし。


Post filed under 技術ネタ and tagged , .