ArchLinuxにRedmineを導入する手順・本番環境構築編

前回のでRedmineを構築出来たので、外部に公開するための本番環境を構築したいと思います。

Apacheで本番環境を構築するために必要なもの

  • passengerというApacheのモジュールを導入する必要がある。
  • httpd.confに設定を追加。

Passengerの導入

Phusion Passengerは、Railsアプリケーションを実行するためのApacheモジュール。

Passengerのインストール

gemでインストールします。
$ sudo gem install --no-user-install passenger

Apacheモジュールのビルドとインストール

$ sudo passenger-install-apache2-module
対話形式のスクリプトになっています。

ビルドが終了した後、こんな感じのメッセージが表示されるはず。

Almost there!(背景青に黄色文字)

    LoadModule passenger_module /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
        PassengerRoot /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10
        PassengerDefaultRuby /usr/bin/ruby
    </IfModule>

Enterを押すと次のメッセージ

Deploying a web application: an example

    <VirtualHost *:80>
        ServerName www.yourhost.com
        # !!! Be sure to point DocumentRoot to 'public'!
        DocumentRoot /somewhere/public
        <Directory /somewhere/public>
            # This relaxes Apache security settings.
            AllowOverride all
            # MultiViews must be turned off.
            Options -MultiViews
            # Uncomment this if you're on Apache >= 2.4:
            #Require all granted
        </Directory>
    </VirtualHost>
  • Almost there!の方はそのまま。
  • Deploying a web applicationの方は、
    • /somewhere/publicの部分を今回Redmineを展開した場所に変更
    • www.yourhost.comを自分のURLに変更。
    • Require all grantedをアンコメント
      • Apacheのバージョンが2.4以上ならアンコメントしないとダメ。ちなみにArchの公式リポジトリからインストールできるApacheはバージョンが2.4以上なのでアンコメントしないと動かないので注意

変更するとこんな感じ

LoadModule passenger_module /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
    PassengerRoot /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10
    PassengerDefaultRuby /usr/bin/ruby
</IfModule>

<VirtualHost *:80>
    ServerName [自分のURL]
    DocumentRoot /srv/redmine-3.0.3/public
    <Directory /srv/redmine-3.0.3/public>
        AllowOverride None
        Options -MultiViews
        Require all granted
    </Directory>
</VirtualHost>

変更したら、/etc/httpd/conf/httpd.confに書き込む
書き込む場所はどこでも大丈夫だけど、LoadModuleがずらずら書いてあるところの最後辺りに追加してあげるといいかも。

文法チェック

Apacheを起動する前に文法チェックをしておく
apachectl configtest
もし問題がなければ Syntax OK と表示される。
問題があれば行数と理由が表示される。

ApacheとMySQLの起動

$ sudo systemctl start httpd
$ sudo systemctl start mysqld
既に立ち上がっていた場合はrestartで

うまく起動出来たらenableしておく
$ sudo systemctl enable httpd
$ sudo systemctl enable mysqld

実際にアクセスしてみる

ブラウザでアクセスしてみる ユーザ名とパスワードは初期設定でadmin、adminとなっている。

エラーが出た場合
  • We're sorry, but something went wrong.
    • httpd.confにRailsEnv developmentを追加する。
    • 詳しくはここ
  • Internal error
    • 多分MySQLの起動し忘れ
  • Access forbidden!
    • httpd.confの設定がミスっている可能性がある。
    • 文法チェックがokな場合、ディレクトリ名を間違ったりしていないかチェック
    • もしくは、Apacheのバージョンが2.4以上の場合、Require all grantedのアンコメントし忘れ

その他知っておくと便利な情報

再起動の仕方

Apacheを再起動すると自動的にRailsアプリケーションも再起動されるけど、バーチャルホストを使用している場合とか、特定のRailsアプリケーションだけを再起動させたい場合、
$RAILS_ROOT/tmp/restart.txtというファイルを作成することで再起動できる。 中身は空でおk。

例えばRailsアプリケーションが/var/lib/rails/redmineにインストールされている場合、/var/lib/rails/redmine/tmp/restart.txtというファイルを作成してください。中身は空でかまいません。restart.txtを作成した後の最初のリクエストの際に、PassengerがRailsアプリケーションを再起動します。再起動が完了するとrestart.txtは削除されます。

Passengerのチューニング

httpd.confに設定する方法。バーチャルホストごとの設定は不可。

Apacheで生成するRailsインスタンス数を設定

RailsMaxPoolSize

デフォは20。
メモリが少ない場合に大きすぎるとメモリ不足でレスポンスが悪くなる。

Passenger Users Guide では、メモリ256MBのVPS環境では2、2GBのメモリを搭載したサーバでは30が推奨されています。

設定値以上リクエストがなかったらインスタンスを終了させる

RailsPoolIdleTime

デフォは120(秒)。
値が小さすぎると、インスタンスの生成・終了が頻繁になるのでレスポンスが悪くなる。
逆に大きすぎると必要以上に長時間メモリを専有される。

Passenger Users Guideでは、ユーザーのwebサイト上の平均滞在時間の2倍を推奨しています。例えば1回のRedmine上での平均的な作業時間が5分の場合、推奨設定値は600(秒)です。

参考サイト

Ruby, Rails
Redmine