[ConoHaVPS(CentOS)] Nginx, nodebrew を利用してnode.jsサーバを動かす・デーモン化

カタログ
  1. 1. 1. nodebrew と Node.js のインストール
  2. 2. 2. Node.js のアプリケーションを適当に作成
  3. 3. 3. firewalld の設定(HTTPのアクセスを許可)
  4. 4. 4. nginxサービスのインストールと設定
  5. 5. 5. アクセスする
  6. 6. 6. Node.jsサーバをデーモン化

Nginxのインストールからnode.jsサーバのデーモン化まで。

1. nodebrew と Node.js のインストール

nodebrew を使ってNode.jsをインストールして利用する。

nodebrewはNode.jsをバージョン管理できるソフトで、 異なるバージョンのNode.jsに切り替えたりできる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 非rootユーザで

# インストール
$ curl -L git.io/nodebrew | perl - setup

# パスを通す
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile

# ただしくインストールされていればヘルプが表示される
$ nodebrew help

# Node.js をインストール
$ nodebrew install-binary stable
$ nodebrew use stable

# Node.js のインストール確認(バージョンが表示される)
$ node -v

2. Node.js のアプリケーションを適当に作成

1
2
3
4
5
6
$ mkdir ~/foobar_app
$ chmod 770 ~/foobar_app
$ cd ~/foobar_app

$ vi index.js
後述の内容を記述

index.js のソースを下記のように入力。 <Node.jsサーバのLISTENポート番号> は適当なポートの数値に置き換える(Nginxのconf.dの設定で利用する)ので覚えておくこと

1
2
3
4
5
6
7
8
9
10
11
var http = require('http');

var server = http.createServer();
server.on('request', function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World\n');
res.end();
});

/* ポートは適当な数値で。nginxの設定で使う。*/
server.listen(<Node.jsサーバのLISTENポート番号>);

3. firewalld の設定(HTTPのアクセスを許可)

1
2
3
4
5
6
7
8
9
10
11
# publicのサービス確認
$ firewall-cmd --list-service --zone=public

# HTTPが含まれていなければサービスを追加する
$ sudo firewall-cmd --add-service=http --zone=public --permanent

# 設定の反映
$ sudo firewall-cmd --reload

# 設定にHTTPが追加されているのを確認
$ sudo cat /etc/firewalld/zones/public.xml | grep http

4. nginxサービスのインストールと設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# sudo ばっかなのでrootでやったほうがいいかも

# インストール
$ sudo yum install -y nginx

# サービスの開始
$ sudo systemctl start nginx

# サービスの自動起動の設定
$ sudo systemctl enable nginx

# conf.d に設定を追加
# conf.d のフォルダにある設定ファイルはnginx起動時に全部読み込まれるので
# ファイル名は何でもよいし、ファイルが複数存在してもよい
$ sudo vi /etc/nginx/conf.d/foobar.conf

# サービス再起動
$ sudo systemctl restart nginx

foobar.conf は下記のようなファイルを新規作成する。

1
2
3
4
5
6
7
server {
listen 80;
server_name <IPアドレス(ブラウザからアクセスするときのホスト名)>;
location / {
proxy_pass http://127.0.0.1:<Node.jsサーバのLISTENポート番号>;
}
}

server_name は ConoHaVPSのサーバ情報のIPアドレス(下の画像を参照)を指定する。 (あるいは、独自ドメインを設定しているならそのドメインなど)

5. アクセスする

$ node ~/foobar_app/index.js でNode.jsのサーバを起動した状態で、 ブラウザで http://<IPアドレス>/ にアクセスして Hello World というテキストが表示されれば Node.jsサーバの動作確認OK

6. Node.jsサーバをデーモン化

デーモン化しないとサーバを立ち上げっぱなしにできないのでデーモン化する。 CentOS7はsystemdを利用すればOK。

参考サイト: Run node.js service with systemd » Axllent.org

sudo vi /etc/systemd/system/foobar_app.service で新規ファイルを作成。

<ユーザ名>は foobar_app を作成したユーザに置き換える。

<Node.jsの場所>は適当に指定。nodebrewなら/home/<ユーザ名>/.nodebrew/node/v6.1.0/bin/node など

ExecStart に指定した値は一度コマンドラインからたたいてみてパスなどに問題がないか確かめたほうがいいかもしれない。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=FoobarApp
After=syslog.target network.target

[Service]

Type=simple
ExecStart=<Node.jsの場所> /home/<ユーザ名>/foobar_app/index.js
WorkingDirectory=/home/centos/server
KillMode=process
Restart=always
User=<ユーザ名>
Group=<ユーザ名>

[Install]

WantedBy=multi-user.target

上記のファイルを作成後にサーバが自動起動するように設定

1
2
$ sudo systemctl start foobar_app
$ sudo systemctl enable foobar_app

で、$ sudo reboot などでサーバ再起動後に、 ブラウザでアクセスして表示されればデーモン化&自動起動の設定は問題ない。