Node.js

2018-12-03 23:07:15

UbuntuでNode.jsの10系統を使用し、Nginxと連携するところまでを解説する

インストール

2018-12-03 23:07:44

Node.jsの10系統を選択(デフォルトでは8系統が選択されている)
curl -sL https://deb.nodesource.com/setup_10.x | bash -


インストール
apt -y install nodejs



インストール結果の確認

2018-12-03 23:10:00

nodejs -v

テストアプリケーションの作成

2018-12-03 23:13:15

これ以降の操作は一般ユーザ&ホームディレクトリで行う

前提条件として以下のような構成を作る

node_app   Node.jsアプリ作成用親ディレクトリ
 app           Node.jsのプログラム置き場
 sock          UNIXドメインソケット置き場

  
まずは必要なディレクトリを作成する
mkdir node_app
cd node_app
mkdir app
mkdir sock

テストプログラムの作成
vi app/index.js
const SOCK_PATH = 'sock/app.sock' //ドメインソケット用パス
var fs = require('fs')
var http = require('http')

var server = http.createServer()
server.on('request',function(req,res) {
    res.writeHead(200)
    res.write('<html><body>Hello world</body></html>\n')
    res.end()
})
try{fs.unlinkSync(SOCK_PATH)}catch(e){}    //ソケットファイルの削除
server.listen(SOCK_PATH)                //ソケットの待ち受け設定
fs.chmodSync(SOCK_PATH, '666')            //アクセス権の変更


プログラムはUNIXドメインソケットを使用している
面倒なのは二回目の実行時に前回のソケットファイルが残っていると正常に動作しないので、削除しなければならないことだ
また、実行ユーザとNginxのIDが異なると、アクセス権の問題で接続できないので、Otherに書き込み権限を与える必要がある
Otherにアクセス権を与えたくない場合は、
usermod -Ga ユーザ名 www-data
で、実行ユーザのグループにnginxのユーザIDを追加して対処を行う
グループへの追加コマンドを実行したらnginxの再起動を行わないと、アクセス権が更新されないので注意すること

Nginxの設定

2018-12-04 11:59:13

/etc/nginx/sites-enabled/default に以下の設定を追加

その他の場所に組み込みたい場合は、適宜設定を置き換える

upstream nodesock{
     server unix:/対象ディレクトリ/node_app/sock/app.sock;
}

server {
        listen 80 default_server;
        listen [::]:80 default_server;
    ・
    ・
    ・
        location = /nodejs/ {
            proxy_pass http://nodesock/;
        }
}


upstreamでUNIXドメインソケットのファイルパスを指定し、locationでnode.jsのパスを設定する

結果の確認

2018-12-04 12:03:23

node_appフォルダをカレントディレクトリに設定し、以下のコマンドを実行
nodejs app/index.js 


確認
http://アドレス/nodejs/


ログアウトしても動作させたい場合は、コマンドを以下のようにする
nohup nodejs app/index.js &


ただしこの方法をテスト以外の目的で使用するのはお勧めしない