Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

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

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

感謝

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

ogwmtnr
iPhone 3G が日本で発売開始した頃からスマホネイティブを開発し続け、2015年にドリコム入社。DRIP のエンジニアとして少人数チームでの開発を行い、新たなサービス価値の創出に尽力している。子煩悩。
http://ogwmtnr.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした