Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Run Node.js App as Ubuntu Upstart Service

###The Issue With Forever Forever is great for running node services, with a minor setback: the word "forever" doesn't apply to system reboots.

###The solution, run node apps as a system service logged in as root

vim /etc/init/node-app.conf

Contents for node-app.conf

start on filesystem and started networking
chdir /home/deploy/node-app  #deployment directory
env NODE_ENV=production
env PORT=3000
exec /usr/local/bin/node server/cluster.js  #start command - no forever needed, if it fails, the service restarts

SUCCESS! Now the app runs on reboot! You can also control the app as a service

service node-app start #node-app is filename of service.conf file
service node-app stop
service node-app restart #run this one command on deploy to either start | restart the service

###So how does my deploy script change? Run visudo to give deploy user permission to run only the node service without a password

echo "deploy ALL=(root) NOPASSWD: /sbin/restart node-app" >> /etc/sudoers
#this can be edited later by running visudo as root user

Now, run this with your deploy script as your deploy user

sudo restart node-app
Copy link

This Gist is DANGEROUS.

If you use this Gist as-is, it will run your application as root, which is a serious security issue. You will want to use setuid to run it under a limited user (you can use the adduser command to create one), like demonstrated in this post.

Copy link

VLZH commented Jun 24, 2016


Copy link


Copy link

aniqi commented Jan 25, 2018


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment