EC2にruby + nginx+passengerをインストールする
Macからchefを用いてEC2にruby + nginx + passengerをインストールする方法
先日 nginx+unicorn の記事を書いたばかりなのですが、ActionController::Liveを使いたい状況になって ActionController::LiveはPassengerかPumaじゃないと動かないと知ったためPassenger環境を作る事にしました。
Passenver vs Pumaはこちらの記事を参考にPassengerにしようと。
参考
インストール後の全体的なバージョン
$ rbenv -v
rbenv 0.4.0-98-g13a474c$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]$ /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.4.7$ passenger -v
Phusion Passenger version 4.0.48
"Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
ハマったのは2つ
コンパイルが通らない
passenger-install-nginx-moduleが動き出して、だいぶ待ったあとにvirtual memory exhausted: Cannot allocate memory
rake aborted!
と出たのですが、これはもう言葉の通りでEC2のt2.microではメモリが足りなくてコンパイル出来ませんでした。
t2.small以上を選択する必要があります。
nginxが起動出来ない
nginx start
するとnginx: [alert] Unable to start the Phusion Passenger watchdog because its executable (/usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.48/buildout/agents/PassengerWatchdog) does not exist. This probably means that your Phusion Passenger installation
というエラーが出てしまう点で、それは結局はnginx.confのレシピのpassenger_rootの設定が間違っているためでした。
検索すると、SELinuxをdisableしろみたいなStackOverFlowがあるのですが結局は関係ありませんでした。(私は何も変更してないです)
その対応方法ですが、公式ドキュメントのここを読むと
2.3.3. Inserting passenger_root into nginx.conf
$ passenger-config --root
コマンドでnginx.confに設定すべきpassenger_rootがわかるのでご自身の環境に合わせてください。
$ passenger-config --root
/usr/local/share/ruby/gems/2.0/gems/passenger-4.0.48
passenger4nginxのレシピを変更しなければこうなるはずです。
このまま$ git clone
されるなら、コマンドは簡単です。
まずはいつも通り、knifeコマンドがssh出来るよう .ssh/config に設定を記載
$ vi ~/.ssh/config
Host server
Hostname 0.0.0.0
User ec2-user
IdentityFile ~/.ssh/server.pem`
sshが通ることを確認して
$ knife solo prepare server
$ knife solo cook server
今回の全レシピはここにあります
rbenvとnginxのコンパイルに超時間がかかるので、お昼休み前に実行される事をオススメします。
P.S
あとこの記事からMarkdown記法に変えましたw