I spent good amount of time last week to figure out how to make Expressjs app to listen on a specific port (say, 3005) for one of the projects. Regular PM2 setup involves creating a new config block in the ecosystem file.
{ "apps": [ { "name": "api", "script": "/var/www/api/app.js", "ignore_watch": ["frontend/", ".*"], "log_date_format": "YYYY-MM-DD HH:mm", "env": { "NODE_ENV": "production", "PORT": "3001" } } ] }
This works for regular nodejs app, however, if your APIs are using expressjs framework, its a bit different. All you need to change is, instead of app.js
as the start script, you have to use bin/www
in ecosystem config. So, the updated config looks like this:
{ "apps": [ { "name": "api", "script": "/var/www/api/bin/www", "ignore_watch": ["frontend/", ".*"], "log_date_format": "YYYY-MM-DD HH:mm", "env": { "NODE_ENV": "production", "PORT": "3005" } } ] }
And this will work like a charm!