13,228
回編集
| 331行目: | 331行目: | ||
</VirtualHost> | </VirtualHost> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | |||
== Unicornの設定 == | |||
==== Unicornとは ==== | |||
Unicornは、Ruby on RailsアプリケーションのためのUnicorn Webサーバ(Rackサーバ)である。<br> | |||
HTTPサーバであり、高速かつスケーラブルなWebアプリケーションを提供することを目的としており、Redmineを効率的かつスムーズに実行するために使用される。<br> | |||
<br> | |||
Unicornは、Unicorn WebサーバとRedmineを統合することにより、Redmineをよりスムーズかつ安定した方法で実行することができる。<br> | |||
これにより、Redmineを使用するユーザは、より優れたパフォーマンスと高い可用性を得ることができる。<br> | |||
<br> | |||
==== Unicornのインストール ==== | |||
UnicornはRubyモジュール(gem)として提供されているため、bundlerでインストールする。<br> | |||
Redmineをインストールしたディレクトリに移動して、Gemfile.localファイルを作成する。<br> | |||
cd <Redmineのインストールディレクトリ> | |||
vi Gemfile.local | |||
<br> | |||
# /<Redmineのインストールディレクトリ>/Gemfile.local | |||
gem "unicorn" | |||
<br> | |||
Unicornをインストールする。<br> | |||
bundle update | |||
<br> | |||
==== 単独起動 ==== | |||
Unicornは、マスタープロセス1つにワーカープロセスが複数という構成で実行する。<br> | |||
<br> | |||
Unicornを起動して、Redmineの動作を確認する。<br> | |||
bundle exec unicorn_rails -l 3000 -E production | |||
<br> | |||
Webブラウザから http://localhost:3000 にアクセスして、動作を確認する。<br> | |||
<br> | |||
各オプションを、以下に示す。<br> | |||
* --listen -l <[アドレス:]ポート> | |||
*: ソケットのエンドポイントを指定 | |||
* --config-file -c <ファイル> | |||
*: 設定ファイルを指定 | |||
* -D | |||
*: デーモンプロセス起動指定 | |||
* -E <RAILS_ENV> | |||
*: production等を指定 | |||
<br> | |||
Unicornの終了手順を、以下に示す。<br> | |||
* フォアグラウンドプロセスとして起動した場合 | |||
*: [Ctrl] + [C]キーを同時押下して停止する。 | |||
* デーモンプロセスとして起動した場合 | |||
*: シグナルINT(強制終了)またはQUIT(グレースフル停止)をマスタープロセスに送信する。 | |||
*: シグナルINTは、ワーカープロセスを終了させて自らも終了する。 | |||
<br> | |||
==== 設定ファイル(unicorn.rb)の作成 ==== | |||
Redmineのインストールディレクトリに移動して、configディレクトリにunicorn.rbファイルを作成する。<br> | |||
cd /<Redmineのインストールディレクトリ>/config | |||
vi unicorn.rb | |||
<br> | |||
<syntaxhighlight lang="ruby"> | |||
# /<Redmineのインストールディレクトリ>/config/unicorn.rb | |||
# -*- coding: utf-8 -*- | |||
# 応答性を良好に保つには、コア数以上のワーカーを指定する | |||
# ただし、仮想環境では、CPU使用率とメモリ使用量を見ながらワーカー数を許容範囲まで増やす | |||
worker_processes 2 | |||
# リクエスト待ち受け口 | |||
# TCPとUNIXドメインとが指定可能 | |||
# 複数のプロトコルを列挙することで複数のプロトコルおよびポートを扱うことができる | |||
## UNIXドメインソケットを使用する場合 | |||
listen "/<Redmineのインストールディレクトリ>/tmp/sockets/unicorn.sock", :backlog => 32 | |||
## TCPソケットを使用する場合 | |||
#listen 8080, :tcp_nopush => true | |||
timeout 30 | |||
pid "/<Redmineのインストールディレクトリ>/tmp/pids/unicorn.pid" | |||
stderr_path '/<Redmineのインストールディレクトリ>/log/unicorn.stderr.log' | |||
stdout_path '/<Redmineのインストールディレクトリ>/log/unicorn.stdout.log' | |||
# マスタープロセス起動時にアプリケーションをロードする(true時) | |||
# ワーカープロセス側でロードをしないのでメモリ消費、応答性良好になる | |||
# ただし、ソケットはfork後に開きなおす必要あり | |||
# HUPシグナルでアプリケーションはロードされない | |||
preload_app true | |||
# unicornと同一ホスト上のクライアントとのコネクション限定で、維持されているかをアプリケーションを呼ぶ前にチェックする | |||
check_client_connection false | |||
before_fork do |server, worker| | |||
# Railsでpreload_appをtrueにしているときは強く推奨 | |||
defined?(ActiveRecord::Base) and | |||
ActiveRecord::Base.connection.disconnect! | |||
# new master phase out the old master | |||
old_pid = "#{server.config[:pid]}.oldbin" | |||
if old_pid != server.pid | |||
begin | |||
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU | |||
Process.kill(sig, File.read(old_pid).to_i) | |||
rescue Errno::ENOENT, Errno::ESRCH | |||
end | |||
end | |||
end | |||
after_fork do |server, worker| | |||
# Railsでpreload_appをtrueにしているときは必須 | |||
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection | |||
end | |||
</syntaxhighlight> | |||
<br> | |||
オプションを付加して、Unicornを起動する。<br> | |||
cd /<Redmineのインストールディレクトリ> | |||
bundle exec unicorn_rails -c config/unicorn.rb -E production | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | [[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | ||