【Redmine】Railsアプリケーションを実行するためのApacheモジュール導入

Redmine等のRuby on Railsアプリケーションを
実行するためのApacheモジュールを導入します。

導入することのメリットは以下の通りです。

  1. Apache単独でRailsアプリケーションを実行可能。
    Apacheのモジュールとして実装されており、
    別途デーモンを起動する必要がなく、TCPポートも使わない。
  2. Railsアプリケーションのデプロイが簡単になる。
    ファイルをアップロードするだけなので、PHPのような感覚。
  3. サーバのメモリを節約できる。
    Railsインスタンスは必要なタイミングで生成し、
    一定時間アクセスがなければインスタンスを終了させる。
  • Passenger導入

    gem install passenger --no-rdoc --no-ri
    passenger-install-apache2-module
    

    以下の警告は無視しました。

    /usr/include/features.h:330:4: warning: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp]
    #  warning _FORTIFY_SOURCE requires compiling with optimization (-O)
    

    以下の設定依頼が表示されるので、メモしておきます。

    Please edit your Apache configuration file, and add these lines:
    
    LoadModule passenger_module /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
      PassengerRoot /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27
      PassengerDefaultRuby /usr/bin/ruby2.0
    </IfModule>
    
    After you restart Apache, you are ready to deploy any number of web
    applications on Apache, with a minimum amount of configuration!
    

    ここで別のTeraTermを立ち上げ、
    Apache2の設定ファイルを作成し、メモしたものを書き込みます。

    vi /etc/httpd/conf.d/redmine.conf
    
    # Passengerの基本設定。
    LoadModule passenger_module /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
      PassengerRoot /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27
      PassengerDefaultRuby /usr/bin/ruby2.0
    </IfModule>
    
    # サブディレクトリでRedmineを実行するための設定
    RackBaseURI /redmine
    
    # 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
    PassengerHighPerformance on
    PassengerStatThrottleRate 10
    PassengerSpawnMethod smart
    RailsAppSpawnerIdleTime 86400
    PassengerMaxPreloaderIdleTime 0
    
    # RedmineのCSSや画像へのアクセスを許可
    <Directory "/var/lib/redmine/public">
      Require all granted
    </Directory>
    

    保存後、Apache2を再起動し、元のTeraTermでエンターを押下します。

    /etc/rc.d/init.d/httpd restart
    

    Apache上のPassengerでRedmineを実行するため、
    Redmineのオーナーを変更します。
    今回、AWSではApacheはrootユーザで実行しているため、
    変更前のオーナーでも実行は可能です。

    chown -R apache:apache /var/lib/redmine
    

    Apacheのドキュメントルートに指定されているディレクトリに
    Redmineのpublicディレクトリに対するシンボリックリンクを作成します。

    ln -s /var/lib/redmine/public /var/www/html/redmine
    

    再度、Apache2を再起動します。
    これにより、全てのRailsアプリケーションも再起動されるようになります。

    /etc/rc.d/init.d/httpd restart
    
  • Redmine動作確認
    以下のURLでRedmineにアクセスできれば成功です。
    https://xxx.xxx.xxx.xxx/redmine/

    コマンド以外のRedmineの初期設定については、
    以下のURLを確認しながら画面上で行います。
    http://redmine.jp/tech_note/first-step/admin/

【Redmine】Redmine導入

  • Redmine導入
    Redmineのバージョンは以下のURLから最新版を調査します。
    http://www.redmine.org/projects/redmine/wiki/Download

    cd /var/lib
    curl -O http://www.redmine.org/releases/redmine-3.2.1.tar.gz
    tar xvf redmine-3.2.1.tar.gz
    mv redmine-3.2.1 /var/lib/redmine
    
  • RedmineからMySQLへの接続ファイル作成

    vi /var/lib/redmine/config/database.yml
    
    production:
      adapter: mysql2
      database: レッドマイン用DB名
      host: localhost
      username: レッドマイン用ユーザ名
      password: "レッドマイン用ユーザパスワード"
      encoding: utf8
    

    スペースは2つ空けること。
    パスワードはダブルクォートをつけること。
    この設定がおかしいと後続のbundle処理でハマリます。
    「/var/lib/redmine/config/database.yml.example」にサンプルファイルがあります。

  • Redmineからメールサーバへの接続ファイル作成

    vi /var/lib/redmine/config/configuration.yml
    

    今回はお試しで導入することもあり、作成しませんでした。
    日本語フォントファイルのパス、アップロードされたファイルの保管場所、
    データベースの暗号化等も設定できます。
    この設定ファイルも記述をミスると後続のbundle処理でハマリます。
    「/var/lib/redmine/config/configuration.yml.example」にサンプルファイルがあります。

  • gemパッケージ導入
    Rubyのパッケージ管理ツール「bundler」を使用して、
    Redmineが依存するgemパッケージを導入します。

    cd /var/lib/redmine
    bundle install --without development test
    

    通常はここで普通に上手くいくようですが、私の環境では以下のエラーが発生しました。

    [root@ip-xxx-xxx-xxx-xxx redmine]# bundle install --without development test
    /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError)
    from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell/basic.rb:2:in `<top (required)>'
    from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell/color.rb:1:in `<top (required)>'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell.rb:17:in `shell'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/ui/shell.rb:14:in `initialize'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:12:in `new'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:12:in `rescue in start'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:10:in `start'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/exe/bundle:19:in `block in <top (required)>'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/friendly_errors.rb:7:in `with_friendly_errors'
    from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/exe/bundle:17:in `<top (required)>'
    from /usr/local/bin/bundle:23:in `load'
    from /usr/local/bin/bundle:23:in `<main>'
    

    「io/console (LoadError)」が存在しないと記載があるので、
    以下のコマンドで追加で導入しました。

    cd /var/lib/redmine
    gem install io-console
    

    その後、「/var/lib/redmine」を全部削除し、最初からやり直したところ、上手くいきました。

  • Redmineのセッション改ざん防止用秘密鍵の作成

    cd /var/lib/redmine
    rake generate_secret_token
    
  • Redmine用DBにテーブル作成

    cd /var/lib/redmine
    RAILS_ENV=production rake db:migrate
    
  • Redmine用DBのテーブルに初期データ登録
    初期データ登録はコマンドではなく、Redmine起動後に管理画面から実行することも可能。

    cd /var/lib/redmine
    RAILS_ENV=production rake redmine:load_default_data
    
  • Redmineのパーミッション設定

    cd /var/lib/redmine
    chown -R 755 files log tmp public/plugin_assets
    

【Redmine】Redmine導入前準備

RedmineをAWSのEC2の無料版であるAmazon Linuxに導入します。
導入の前提として、WEBサーバ、DBサーバの設定が済んでいること。
WEBサーバにはApache2、DBサーバにはMySQLを利用します。

導入前の準備として、各ツールを揃えます。

  • 開発ツール・ビルドに必要なヘッダファイルのインストール
    RubyやPassengerのビルドで必要なヘッダファイルです。

    yum -y groupinstall "Development Tools"
    yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
    
  • ImageMagickと日本語フォントのインストール
    ImageMagickと日本語フォントはガントチャートをPNG形式の画像にエクスポートする機能、
    添付ファイルのサムネイル画像を作成するのに利用するようです。
    インストールを行わなくてもRedmineの実行は可能ですが、入れておきます。

    yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
    
  • Rubyインストール
    Amazon Linuxでは既に導入済ですが、最新のものにしました。

    yum install ruby-devel
    
  • bundler導入
    Redmineが使用するGemを一括インストールするためのツールです。

    gem install bundler --no-rdoc --no-ri
    

    「–no-rdoc –no-ri」はドキュメントのインストールを省略するためのオプションです。

  • Redmine用のMySQLのユーザ作成

    mysql -uroot -pデータベースパスワード
    
    create database レッドマイン用DB名 default character set utf8;
    grant all on レッドマイン用DB名.* to レッドマイン用ユーザ名@localhost identified by 'レッドマイン用ユーザパスワード';
    flush privileges;
    exit