pm2 を使用したExpressアプリケーションのデプロイ
データベースはmongodbです
コマンドでアプリを実行すると:
NODE_ENV=production pm2 start app.js -i max
aftenにはエラーがあります:EADDRINUSEをバインドします。これはログです。エラーの場合、
[app err (l0)] js:1073:26
[app err (l1)] at Object.30:1 (cluster.js:587:5)
[app err (l2)] at handleResponse (cluster.js:171:41)
[app err (l3)] at respond (cluster.js:192:5)
[app err (l4)] at handleMessage (cluster.js:202:5)
[app err (l5)] at process.EventEmitter.emit (events.js:117:20)
[app err (l6)] at handleMessage (child_process.js:318:10)
[app err (l7)] at child_process.js:392:7
[app err (l8)] at process.handleConversion.net.Native.got (child_process.js:91:7)Error: bind EADDRINUSE
[app err (l9)] at errnoException (net.js:901:11)
[app err (l10)] at net.js:1073:26
[app err (l11)] at Object.31:1 (cluster.js:587:5)
[app err (l12)] at handleResponse (cluster.js:171:41)
[app err (l13)] at respond (cluster.js:192:5)
[app err (l14)] at handleMessage (cluster.js:202:5)
[app err (l15)] at process.EventEmitter.emit (events.js:117:20)
[app err (l16)] at handleMessage (child_process.js:318:10)
[app err (l17)] at child_process.js:392:7
[app err (l18)] at process.handleConversion.net.Native.got (child_process.js:91:7)
これにより、アプリが遅くなります。この問題の解決方法、ありがとうございました
アプリケーションで使用されているポートがわかりません。それはあなたのコードに依存します。この例では、ポートが3000
であると想定します。
システムでポートがすでに使用されているかどうかを確認する必要があります。それを行うには:
Sudo netstat -nltp | grep 3000
Sudo lsof -i -P | grep 3000
結果がある場合は、プロセスを終了する必要があります(kill <pid>
)。
pm2 list
が0プロセスを返すかどうかを確認する必要があります。また、pm2 stopAll
を実行しても、ソケットは解放されません。デーモンが確実に強制終了されるように、pm2 kill
を実行することを忘れないでください。
$ pm2 kill
Daemon killed