ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Amazon EC2上でRailsアプリをRails + Unicornで動かす

タイトル通りのことをしてみました。
やり方自体は、既に他のサイトで沢山取り上げられているのですが
自分が注目したポイントや、躓いたところを中心に書いていきたいと思います。

前提条件として
・EC2のアカウントが作成済みで、コンソール(TeraTerm等)でログインできる
FTPなど、何らかの方法でRailsアプリをEC2に転送できる
状態であるものとします。

■(rootでログインしていない場合)root権限を取得する
sudo su

RubyRails、Nginx、Unicornのインストール

1.以下のコマンドを順次実行する。
$ yum install gcc
$ yum install gd-devel
$ yum install openssl-devel
$ yum install libxml2-devel
$ yum install libxslt-devel
$ yum install geoip-devel

2.rvmをインストールする。
$ bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

3.railsをインストールする。
$ gem install rails -v 4.0.0
$ rails -v

4.Nginxをインストールする。
$ yum -y install nginx

起動するか確認する。
$ /etc/init.d/nginx start

5.Unicornをインストールする。
$ gem install unicorn;rbenv rehash

Railsアプリの配置
1.アプリをコピーする。
自分の場合はWinScpで、home/ログインユーザ にアプリをコピーし
コンソールで配置したいフォルダに移動しました。
(WinScpのユーザでは、アプリを配置したい箇所にコピーする権限がないため)

2.bundle installを実行する。
Gemfileに必要なgem記述し、本番環境用のbundle installを実行します。
$ bundle install --without test development

が、sqllite3のインストールで以下のエラーが発生しました。
ERROR: Failed to build gem native extension.(中略)
sqlite3.h is missing. Try 'port install sqlite3 +universal'
or 'yum install sqlite-devel' (後略)

メッセージに従い、以下のコマンドにてsqlite3をインストールします。
$ yum install sqlite-devel

この後、再びbundle installを行います。
$ bundle install --without test development

■Nginx、Unicornの設定
1.Nginxの定義ファイル設定
$ vi /etc/nginx/nginx.conf

nginx.confの中身は以下のように記述する。

worker_processes  1;

events {
worker_connections 1024;
}

http {
upstream unicornapp {
server unix:/tmp/unicorn_app.sock;
}

server {
listen 80;
server_name localhost;

location / {
proxy_pass http://unicornapp;
}
}
}


2.Unicornの定義ファイル設定
$ cd アプリフォルダ
$ vi config/unicorn.conf

unicorn.confの中身は以下のように記述する。

worker_processes 2
listen '/tmp/unicorn_app.sock'
stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__) + '/../log')
stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__) + '/../log')
preload_app true

重要なのは、nginx.confの「server unix:/tmp/unicorn_app.sock;」と
unicorn.confの「listen '/tmp/unicorn_app.sock'」で指定するsocketのパスが
一致することです。

■Nginx、Unicornの起動
1.Nginxを起動する。
$ /etc/init.d/nginx start

2.Unicornを起動する。
$ cd アプリフォルダ
unicorn -c config/unicorn.conf -D

■アプリの稼動確認
ブラウザにてEC2のURLを叩き、アプリの画面が表示されることを確認します。
http://xxx.compute.amazonaws.com/


参考サイト
http://blog.yatm.info/?p=608
http://qiita.com/KazuyoshiUeno@github/items
http://qiita.com/KazuyoshiUeno@github/items/296aa3af986b4bffe7d8
https://gist.github.com/honjo2/5023446
http://prototype-beta.com/server/entry/12_ubuntuでnginx_+_unicorn_-_設定編