torutkのブログ

ソフトウェア・エンジニアのブログ

Redmine 2.1.2とNginxとUnicornと

Redmineは、バグ管理システム(BTS:Bug Tracking System)用のツールから出発して、課題管理システム(ITS:Issue Tracking System)、そしてWiki掲示板機能を備えているのでチームの情報共有ツールとしても使われています。最近は、「チケット駆動開発(TiDD)」の基盤ツールとしても使われています。

Redmineは最初BTSとして使い始め、あるプロジェクトにおいてチケット駆動開発に使い始めました。バージョンは0.8.xから、最後は2.0に至っています。

Redmineは、Ruby on Rails上で動作するアプリケーションで、動作環境にはRuby実行環境、Ruby on Railsフレームワークが必要です。また、Railsが対応するいずれかのデータベースソフトが必要です。

Redmineは1.3.xまでは大きな変化がなく順当にバージョンアップができましたが、2012年に入って、Ver.1.4.x、Ver.2.0.x、Ver.2.1.xとそれぞれ大きな構造変革がありました。

  1. Ver.1.4 - Ruby 1.9対応
  2. Ver.2.0 - Railsのバージョンを2.3から3.2に変更。Redmineの機能としてはVer.1.4と変わらず。
  3. Ver.2.1 - JavaScriptの基盤ライブラリをprototype+scriptaculousからjQueryに変更。Redmineの機能追加あり。

この構造変革によって大きなあおりを受けたのはプラグインです。RedmineプラグインRuby on Railsプラグイン機構を使っているので、Railsのバージョンアップで作りが変わります。そこで、Redmine1.x用と2.x用でほぼ作り直しが発生します。

また、JavaScriptを使用しているプラグインについては、Redmine 2.0と2.1用とで作り直しが発生します。

このため、今年に入ってからのRedmineのバージョンアップには、プラグインの対応状況の確認が必須となります。

そこで、プラグインを用いずに運用しているならば、Redmine 2.1.2へのバージョンアップはしてもよいでしょう。プラグインを使用しており、今後も使用し続けたいのであれば、プラグインRedmine 2.1対応を確認し、対応が必要なものについて対応された時点でバージョンアップを行うのがよいでしょう。

データ移行

一方、データ移行については、0.8.xの頃から2.1.xへと継続的にマイグレートしてきましたが、身の回りで移行に失敗した事例はありませんでした。このデータ移行の容易さについては驚きを感じています。

Redmine 2.1.2

Redmine 2.1.2は、2012年9月にリリースされました。しかし、プラグインの2.1系への追従が進んでおらず、実環境のバージョンアップは待機状態でした。

Redmineは標準で豊富な機能を搭載していますが、やはり不足する機能があって、いくつかプラグインを追加しています。その中の主要プラグイン Wiki Extensionsが数日前にRedime 2.1対応されました。

Wiki Extensionsを使ってWikiページを作成しているので、Wiki Extensionsがないと、記述のところどころにマクロ文がそのまま表示されてしまい、ちょっと利用に耐えられない状況になってしまいます。

これで、2.1.2へのアップデートもOKです。なお、Code Reviewプラグインも昨日2.1.2対応したとのアナウンスがあったので、バージョンアップの良いタイミングとなりました。

以下に、CentOS 6上にRedmine 2.1.2をインストールする記述(プラグインの設定を含む)を記載しています。

Unicorn

Redmineは、Ruby on Rails上で動くアプリケーションなので、動作にはRubyRuby on Rails)プログラムを実行可能なHTTPサーバーが必要になります。

Redmineのセットアップを確認するために、Rubyに付属のWebrickで動かすことがありますが(インストール手順では大抵Webrickでの確認を含めている)、本格的に運用するには、それなりのサーバーを使用します。

そこで、よく使用されるのがPassenger+Apacheです。PassengerはApacheのモジュールとして作られているので、Apacheと一緒に使用します。Redmineのセットアップでは大抵Apache+Passengerが使われます。

ところが、Redmineのバージョンアップ検証にあたって、同一マシン上でVer.1.3系のRedmine(運用中)をApache+Passengerで動かしており、別にVer.2.0/2.1系のRedmineを評価のために動かしたいという状況で、Passengerでは対応が難しいことに気づきました。Passengerの場合、複数Railsアプリケーションを同一プロセスで扱うことになります。また、評価目的のため始終サーバーを上げ下げするので、運用中のRedmineとは分けたいのです。

そこで、よく話題になっているNginx+Unicornを使うことにしました。
実はUnicornだけでHTTPサーバーになるので、評価だけならNginx不要でした。

Unicornはマスター/ワーカープロセス構造で、1ワーカープロセスは1つのリクエストを処理する作りとなっています。

設定ファイル/自動起動スクリプトは用意されていないので、自前で作成する必要があり、少し手間がかかります。

セットアップについては、上述のWebページに記載しています。

Nginx

インターネット上で公開されているWebサイトで使われているHTTPサーバーのシェア第3位がNginxだそうです(1位はApache、2位はMicrosoft IIS)。

Nginxもマスター/ワーカープロセス構造で、1ワーカープロセスはデフォルト設定では1024接続まで対応します。

CentOSRPMが用意されているので、インストールは簡単でしたが、設定を理解するのに難航しました・・・。

セットアップについては、上述のWebページに記載しています。

メモ

Passengerも次のバージョン(4.0)では大きく改善されるそうです。4.0新機能を紹介しているブログがありました。