187
183

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-11-03

「半年前の自分は他人」という自戒の元、丁寧に書くのを癖にしたい今日この頃。
####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
コングラッチュレーション…!

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

187
183
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
187
183

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?