「Unicorn + Rails + Nginx」で構築してみる
( Rails )勉強がてら構築してみました。以前はrailsのWebサーバはThinで構築していたのですが、 最近流行している「Unicorn」、さらにはフロントにリバースプロキシとHTTP用のサーバ「nginx」 をおいて構築してみることにします。
仕組みについてはこちらのサイトがよくまとめられていたので概要つかむによいでしょう。
まずは、nginxのインストールを行います。インストールはあらかじめrpm をインストールしてからyumでインストールし直します。
rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm yum install nginx
一度、デフォルトでnginxで起動するかどうかの確認を行います。「service nginx start」でhttp://hoge.moge にアクセスしてnginx用の画面が表示されていればとりあえずはインストール完了です。
以下、Unicornがnginx経由でアクセスできるようにするための設定ファイルになります。
upstream hoge.moge { server unix:/var/www/test/tmp/sockets/unicorn.sock; } server { listen 80; server_name hoge.moge; root /var/www/test/public/; access_log log/access.log; error_log log/error.log; location / { if (-f $request_filename) { break; } # ファイルが存在しなければunicornにproxyする 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://hoge.moge; } # この記述がないと静的ファイルが表示されなかった location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { expires 1y; } }
なんか書き方はPerlbalよりわかりやすいようなイメージしました。気のせいかもしれませんが。。。
次は、Unicornのインストールです。gemでパッケージをインストールします。
gem install unicorn
これでおしまい。
その後、Railsで展開されているコンフィグファイルに設定情報を記述します。
vi config/unicorn.conf
# -*- coding: utf-8 -*- # ワーカーの数 worker_processes 2 # capistrano 用に RAILS_ROOT を指定 working_directory "/var/www/test/" # ソケット #listen '/tmp/unicorn_of_example.sock' #listenFile = working_directory << 'tmp/sockets/unicorn.sock' listen '/var/www/test/tmp/sockets/unicorn.sock' # ログ log = '/var/log/rails/unicorn.log' 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_rails -c config/unicorn.rb -E production -p 5000 -D service nginx start
指定のURLからアクセスして画面がみれれば完成でし!
□参考URL http://nginx.org/ http://techracho.bpsinc.jp/bps/2010_07_28/2208