web-dev-qa-db-ja.com

PM2(Node.js)が指定されたポートでリッスンしていません

Node/ExpressアプリケーションをPM2で稼働させようとしています。次のコマンドでアプリケーションを正常に起動できます:npm start

これにより、ポート3000でアプリが正常に起動します。

pm2 start app.jsでアプリケーションを起動しようとすると、ログに次のように表示されます。

{ online: true, success: true, pid: 10714, pm2_version: '0.8.15' }
2014-06-12T19:52:06.789Z : [[[[ PM2/God daemon launched ]]]]
2014-06-12T19:52:06.800Z : RPC interface [READY] on 6666:localhost
2014-06-12T19:52:06.801Z : BUS system [READY] on  6667:localhost
2014-06-12T19:52:06.978Z : Entering in node wrap logic (cluster_mode) for script     /home/user/test/app.js
2014-06-12T19:52:07.115Z : /home/user/test/app.js - id0 worker online

私のbin/wwwファイルには、ポートを指定する次のものがあります。

app.set('port', process.env.PORT || 3000);

export PORT=3000も実行してみました

また、bin/wwwには次のものがあります。

app.set('port', 3000);

netstat -an | grep 3000を実行すると、何も返されません。

15
JamesE

Expressを使用している人にとって、これに対する答えは次のコマンドを実行することです。

pm2 start ./bin/www

私は走っていましたpm2 start app.js動作しませんでした。

37
JamesE

app.set('port'...呼び出しは直接関係ありません。 app.setは、キー/値の設定を格納する場所ですが、それ自体では機能がありません。あなたが見たいのは、app.listenを呼び出す場所です。これは、その関数がポートを引数として受け入れるためです。

3
Peter Lyons

同様の問題が発生しました。nginxがプロキシサーバーとして構成されていると、PM2で実行されているExpressアプリが表示されませんでした。 ~/.pm2フォルダーを削除すると、機能しました。

1
Pavlo Sadovyi

私はこれを使います

pm2.json

[
{
  "exec_mode": "fork_mode",
  "cwd" : "/opt/acme_service",
  "script": "acme_service.js",
  "name": "acme_service",
  "restart_delay":"9000",
  "port"       : 8081,
  "node_args": [ "--acme" ],
  "error_file": "/var/log/acme_service.err.log",
  "out_file": "/var/log/acme_service.out.log"
}
]

"port":8081-ポート接続を受け入れます。アプリでも同じ

var server = app.listen(8081 , '0.0.0.0');
0