Running Node app via PM2 on port 80

Alex Bollbach picture Alex Bollbach · Jul 4, 2017 · Viewed 12.7k times · Source

I have an express that I want to run on port 80. --> app.listen(80);

I'm using PM2 to manage the app (restarting, stopping, monitoring, etc.) . I have a deployment shell script whose last command is PM2 restart index. From the console output, I see no errors and PM2 reports that it successfully completed the command. Yet when I got to my.ec2.ip.address:80 the site is not up. Furthermore, if I run node index.js in my server project directory, I get a Error: listen EACCES 0.0.0.0:80. This makes some sense to me as port 80 is below 1024 and therefore a privileged port. sudo node index.js will allow the launch to work.

I'm a newbie to unix, servers, permissions, and deployment, so in addition to the solution, an explanation of the fundamental concepts contributing to my problem would be greatly appreciated. For instance.. is it bad to simply run my node app as super-user? Is it good practice to run PM2 (therefore possibly running node as..?) root/super-user? The command sudo PM2 restart index leads to sudo: pm2: command not found. Why is PM2 not found when running sudo PM2.. if PM2 is in my path?

Ultimately though, when using PM2 how can I ensure that my server runs on port 80? not found.

Answer

Ashutosh Jha picture Ashutosh Jha · Aug 21, 2017

Dont use port 80, run on other port like 8080 and redirect 80 to that port with this command

  sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080