Node.js + Express + forever を構成して nginx から流す

  • 151
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

「半年前の自分は他人」という自戒の元、丁寧に書くのを癖にしたい今日この頃。

Node.js

node.js とは何かによると、「JavaScriptを用いたNon-blocking I/O環境」だそうです。
バックエンドで動作。

Express

Sinatra ライクな Node.js 用Webアプリケーションフレームワーク、軽量アプリケーション向け。
Node.js + Express で最低限のWebページが作れます。
ちなみに Sinatra は Ruby です。

forever

Node.js をデーモン化して、プロセスを監視してくれます。
最近は pm2 という更に高機能な監視ツールもあるのですが、移行は今後考えるとして日本語文献の多い forever を使う。

今回は、nginx から pm2 で動かした Node.js サービスに流すまでを目指します。

環境

ゲスト: CentOS 6.2
ホスト: MacBookAir MacOS 10.8
VM: Parallels Desktop 9 for mac
ゲストを対象とし、IPアドレスは 10.211.55.2 とする。

Node.js インストール

CentOSでndenvをシステムワイドにインストールした時のメモを参考に ndenv で Node.js のバージョン管理を行います。作者riywoさんの元記事です。ありがとうございます。
必要であれば適時sudoしてください。
記述通りのバージョン、構成にしました。
/usr/local/ndenv
/usr/local/ndenv/plugins/node-build

$ node -v
v0.10.20

別のバージョンを入れたい場合は、リストを見て検討しましょう。

$ ndenv install --list

Express インストール

npm を使用して、Express をグローバルインストールします。

$ sudo npm install express -g

ここでexpress --helpを実行してみたら express が見つからないよと言われたのでndenv rehashしようとしたのだが、

$ sudo ndenv rehash

ではダメだった。仕方なく、

$ sudo -s
$ ndenv rehash
$ exit

で一部をrootユーザーとして実行したら成功したのだが、まだ原因は解っていない。
とりあえず、以降はこれでrehashしていく。
一応確認も。

$ which express
/usr/local/ndenv/shims/express

forever インストール

同じく npm を使用して、forever をグローバルインストールします。

$ sudo npm install forever -g
$ sudo -s
$ ndenv rehash
$ exit
$ which forever
/usr/local/ndenv/shims/forever

サンプルアプリを作って走らせる

HOME直下に作って、必要なライブラリをローカルインストールします。

$ cd
$ express -e SampleApp
$ cd SampleApp
$ npm install

そのまま forever で起動。
node.jsスクリプトをforeverでデーモン化するの通りに実行しました。
ちゃんと理解してないのですが、app.js が根幹って事でしょうか。

$ forever start app.js

止めたい時と、再起動したい時は単純にこれ。

$ forever stop app.js
$ forever restart app.js

nginx でリバースプロキシ

app.js の中身を見ると、このサンプルアプリはポート3000で動作しているので、ホストOSから
http://10.211.55.2:3000/
にアクセスすれば表示されるのですが、これでまたいちいちiptables編集するのもなってのと、実際はサブドメイン切ってリバースプロキシあてがうだろうなって事で、ローカル環境でもそれに似た状況を作った。
既にあった /etc/nginx/conf.d/default.conf と、nginxでリバースプロキシ。を参考に、このようにしました。

/etc/nginx/conf.d/node-app.conf
upstream node-sampleapp {
    server localhost:3000;
}

server {
    listen       80;
    server_name  10.211.55.2;
    proxy_redirect                          off;
    proxy_set_header Host                   $host;
    proxy_set_header X-Real-IP              $remote_addr;
    proxy_set_header X-Forwarded-Host       $host;
    proxy_set_header X-Forwarded-Server     $host;
    proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
    location / {
        proxy_pass http://node-sampleapp/;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {  
    root   /usr/share/nginx/html;
    }
}

再読み込み。

$ sudo service nginx reload

ホストから
http://10.211.55.2/
にアクセス。

Welcome to Express

コングラッチュレーション…!

感謝

参考にさせていただいたサイト管理人の皆様、誠にありがとうございました。