DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

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