RubyonRailsをNginxとUnicornで動かす方法
Railsアプリケーションを動かす環境について。
今度はNginxとUnicornです。
ApacheとPassengerについては下記参照。
RubyonRailsをApacheとPassengerで動かす | Workabroad.jp
Rails & Passenger を Production(本番)モードで公開する時 | Workabroad.jp
Railsアプリが動くまで。
最低限の設定をします。
環境
- Vagrant
- CentOS 6.4
- Ruby 2.0
- Rails 4.0
Vagrant
ApacheとかWebrickとかいろいろと試してみたいので、
ポートをわけようと思います。必要なければ読み飛ばしてください。
Vagrantfile
1
2
3
4
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network :forwarded_port, guest: 8080, host: 8080
ひとまず、Nginxを使うときはポート8080でアクセスすることにします。
※forwarded_portの書き方はVagrantのバージョンによって少し違うようです。
1
2
3
$ exit
Vagrantの設定を読み込み直します。
$ vagrant reload
Nginx
インストール
1
2
3
4
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx
確認
$ nginx -v
設定
Ubuntuの場合はsite-unabledとかいうディレクトリがあるみたいですけど、
CentOSではなかった。
でも、別に必要ない。
設定ファイル1.
/etc/nginx/nginx.conf
→ 特にさわらなくても良いかと。
設定ファイル2.
/etc/nginx/conf.d/default.conf
→ 自分用にカスタマイズ
1
2
3
4
5
$ cd /etc/nginx/conf.d/
設定ファイルをコピー
$ sudo cp default.conf your_app.conf
編集
$ sudo vi your_app.conf
/etc/nginx/conf.d/your_app.conf
1
2
3
4
5
6
7
8
server {
listen 8080;
server_name your_app.com;
# Vagratのデフォルトはこうなってた気がするが。
root /var/www/html/your_app/public;
# 404ファイルでちょっとテストしてみる。
index 404.html;
}
起動
1
$ sudo service nginx srart
your_app.com:8080にブラウザからアクセスすれば
Railsの404ページが表示されるはず。
この時点で「403 forbidden」とかNginxのエラーが表示されたら
ディレクトリのパーミッションとかを疑いましょう。
なお、アパッチも起動してますと言う場合は終了させるか、
/etc/nginx/conf.d/default.confのlistenを80以外にしておくと、
Nginx起動しない!なんてことがないかと。
Unicorn
RailsのGemfile編集
/Gemfile
1
2
# Use unicorn as the app server
gem 'unicorn'
インストール
1
$ bundle install
設定ファイル
/config/unicorn.rbを作成
/config/unicorn.rb
1
2
3
4
5
6
7
8
9
working_directory "/var/www/html/your_app"
pid "/var/www/html/your_app/tmp/pids/unicorn.pid"
stderr_path "/var/www/html/your_app/log/unicorn.log"
stdout_path "/var/www/html/your_app/log/unicorn.log"
listen "/tmp/unicorn.todo.sock"
#listen 3000
worker_processes 2
timeout 30
Unicorn起動
1
2
# your_appの中
$ bundle exec unicorn -c config/unicorn.rb -D
Nginxの設定ファイルを変更
/etc/nginx/conf.d/your_app.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
upstream unicorn {
server unix:/tmp/unicorn.todo.sock fail_timeout=0;
}
server {
listen 8080;
server_name your_app.com;
root /var/www/html/your_app/public;
# indexはコメントアウト
# index 404.html;
try_files $uri @unicorn;
location @unicorn {
proxy_set_header Host $http_host;
proxy_pass http://unicorn;
}
# エラーは500.htmlを表示させる
error_page 500 502 503 504 /500.html;
}
Nginx再起動
1
$ sudo service nginx restart
以上です。
Vagrantローカル環境ですが、Apache+Passengerよりもだいぶ速くなりました。
プロセス終了は
$ kill -QUIT 12273
log -> [2013-10-25T13:54:03.608581 #12273]
とかでいいのかな。