upstart is a new service manager that replacing old init.d in newer linux. In newer ubuntu, it is preinstalled. Otherwise you can installed in default package.
To deploy node.js app using upstart, create a script (e.g. node-your-app-name.conf) in /etc/init
description "Your app description" author "John Doe" start on runlevel  stop on runlevel [!2345] # setuid only avaiable after upstart 1.4, please check your version first setuid ubuntu respawn env NODE=/usr/bin/node env NODE_APP_PATH=/var/www/node-blog env LOG_FILE=/var/log/nodejs/node-blog.log env NODE_ENV=production env PORT=8105 # you can remove this if you don't want to pull from git before start the service pre-start script cd $NODE_APP_PATH git pull origin master >> $LOG_FILE 2>&1 end script script cd $NODE_APP_PATH $NODE lib/app.js >> $LOG_FILE 2>&1 end script
The script will:
- set as production environment.
- set the owner of the service, so no need to run as root.
- set the port if the node.js app. It's useful for express.js deployment.
- make a pull before start the app. You can remove it if you don't want to.
- respawn if the node crashed. So there is no need to monitor the health of the mode using other method like foreverd.
Now, the app will auto start when the server restart, or you can start service manually:
sudo service node-your-app-name start
Also, you can stop or restart the service using:
sudo service node-your-app-name stop sudo service node-your-app-name restart