ExpressJS - Elastic Beanstalk 502 Bad Gateway
I had the same problem tonight. It turned out that the node app had not been started even though the portal claims that it will run npm start
by default.
Here is what I did to fix it:
- Create a directory named .ebextensions in the root of my project
- Inside .ebextensions create a file named nodecommand.config
- Inside the nodecommand.config add the following yaml:
option_settings: - namespace: aws:elasticbeanstalk:container:nodejs option_name: NodeCommand value: "npm start"
The full instructions are available here: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_express.html
From the EB App Dashboard, go to Configuration -> Software Configuration -> add value "npm start", or "node 'yourmainfile'" to the Node Command.
Even though AWS shows "Command to start the Node.js application. If an empty string is specified, app.js is used, then server.js, then "npm start" in that order", it looks like it doesn't run unless you specify.
Add
"scripts": { "start": "node app.js" }
to yourpackage.json
.If your main js file is notapp.js
, don't forget to rename it! :)In Beanstalk console: Configuration->Software add new env var:
port: 8081 (PORT: 8081)
Important: even if you add env var as port
you still have to use PORT
(uppercase). That is what solved my problem.I tried to use process.env.port
, but it did not work.Use process.env.PORT
instead.
const port = process.env.PORT || 3000;app.listen(port, () => { console.log("Server is listening on: ", port);});