How can I automatically start a node.js application in Amazon Linux AMI on aws?

amazon-ec2, amazon-web-services, linux, node.js

Solution

One way is to create an upstart job. That way your app will start once Linux loads, will restart automatically if it crashes, and you can start / stop / restart it by `sudo start yourapp` / `sudo stop yourapp` / `sudo restart yourapp`.

Here are beginning steps:

1) Install upstart utility (may be pre-installed if you use a standard Amazon Linux AMI):

sudo yum install upstart

For Ubuntu:

sudo apt-get install upstart

2) Create upstart script for your node app:

in `/etc/init` add file `yourappname.conf` with the following lines of code:

#!upstart
description "your app name"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env NODE_ENV=development

# Warning: this runs node as root user, which is a security risk
# in many scenarios, but upstart-ing a process as a non-root user
# is outside the scope of this question
exec node /path_to_your_app/app.js >> /var/log/yourappname.log 2>&1

3) start your app by `sudo start yourappname`

Problem

Is there a brief guide to explain how to start up a application when the instance starts up and running? If it were one of the services installed through `yum` then I guess I can use `/sbin/chkconfig` to add it to the service. (To make it sure, is it correct?) However, I just want to run the program which was not installed through `yum`. To run node.js program, I will have to run script `sudo node app.js` at home directory whenever the system boots up. I am not used to Amazon Linux AMI so I am having little trouble finding a 'right' way to run some script automatically on every boot. Is there an elegant way to do this?

Original source

Related problems