あけましておめでとうございます。
この記事を編集していたら年を越していました。
EC2を作成
key | value |
---|---|
インスタンスタイプ | t2.micro |
vCPU | 1 |
Node.js, pm2をインストール
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
yum install nodejs -y
node -v
> v12.20.0
npm -v
> 6.14.8
npm install pm2 -g
> 4.5.1
pm2の設定
# 再帰的にディレクトリを作成する
mkdir -p /var/www/test
# pm2の設定ファイルを作成
touch pm2.yaml
# pm2の設定ファイルを編集
vi pm2.yaml
pm2.yaml
apps:-script :./app.jsname :'tes-app'instances:-1# cpuの数-1のプロセスを起動。(clusterモードに限る)# instances: 0 # cpuの数に応じて最大のプロセスを起動。(clusterモードに限る)exec_mode:cluster# n個のインスタンスを起動し、クラスターモジュールに負荷分散を処理させます。
コア数、環境もによりますが、instances: -1
がよさそうです。(コア数8なら7プロセス起動)(脳死でMaxはNG)
またt2.micro
は1コアのはずですが、instances: 4
にするとプロセスが4つ起動しました。(どういう状態?)
参考: Optimising NginX, Node.JS and networking for heavy workloads - GoSquared Blog
Expressの準備
# expressをインストール(4.17.1: 2020/12/30)
npm install express
Node.js アプリケーションの簡単なプロファイリング | Node.js
app.js
constexpress=require("express");constapp=express();server=app.listen(3000,function(){console.log("Node.js is listening to PORT:"+server.address().port);});app.get('/newUser',(req,res)=>{letusername=req.query.username||'';constpassword=req.query.password||'';username=username.replace(/[!@#$%^&*]/g,'');if(!username||!password||users.username){returnres.sendStatus(400);}constsalt=crypto.randomBytes(128).toString('base64');consthash=crypto.pbkdf2Sync(password,salt,10000,512,'sha512');users[username]={salt,hash};res.sendStatus(200);});
pm2を起動
pm2 start pm2.yaml
[PM2][WARN] Applications test-app not running, starting...
[PM2] App [test-app] launched (1 instances)
┌─────┬─────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼─────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ test-app │ default │ 1.0.0 │ cluster │ 24606 │ 0s │ 0 │ online │ 0% │ 30.1mb │ root │ disabled │
└─────┴─────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
設定を変更したい場合は一度レジストリを削除してから再度スタートします。(restartだと変更した設定は反映されない)
pm2 delete test-app
pm2 start pm2.yaml
今回はここまで。