How can I run node.js Express in production mode via sudo? How can I run node.js Express in production mode via sudo? express express

How can I run node.js Express in production mode via sudo?


Most environment variables are unset when using sudo for security reasons. So you cannot pass that environment variable to node without modifying your sudoers file to allow that variable to passt through.

However, you shouldn't run node as root anyway. So here's a good workaround:
If you just need it for port 80, run node on an unprivileged port and setup an iptables forward to map port 80 to that port:

iptables -A PREROUTING -d 1.2.3.4/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 2.3.4.5:1234

Replace 1.2.3.4 with your public IP, 2.3.4.5 with the IP node runs on (could be the public one or 127.0.0.1) and 1234 with the port node runs on.


With a sufficiently recent kernel that has capability support you could also grant the node executable the CAP_NET_BIND_SERVICE privilege using the following command as root:

setcap 'cap_net_bind_service=+ep' /usr/bin/node 

Note that this will allow any user on your system to open privileged ports using node!


sudo NODE_ENV=production /usr/local/bin/node  /usr/local/apps/test/app.js