「半年前の自分は他人」という自戒の元、丁寧に書くのを癖にしたい今日この頃。
####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でリバースプロキシ。を参考に、このようにしました。
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
コングラッチュレーション…!
##感謝
参考にさせていただいたサイト管理人の皆様、誠にありがとうございました。