How to Install Node.js on AWS EC2 and Make Node.js App Keep Running
In this post, I will show you how to install Node.js and use PM2 as process manager to make node.js app keep running, I use my AWS EC2 instance of Ubuntu 18.04 for the installation, you can follow this post to launch an EC2 instance or you can use your local computer for the installation.
If you use an AWS EC2 instance to follow this post, you have to connect to instance first and add Custom TCP at port 3000 in inbound rules, this port is used for test to run node.js app.
Install Node.js using NVM
Install NVM
If you’ve connected to your instance or use your local computer, now time to install node.js. In this post I’ll install node.js using nvm, nvm is a version manager for node.js.
The reasons I install node.js using nvm are that I can easily switch node.js version that currently running to another version, and I can install global packages npm i -g
without doing sudo.
Run the following commands in a terminal to install or update nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
The command above will download a script and runs it. The script clones the nvm repository to ~/.nvm
, and attempts to add the source lines to the correct profile file (~/.bash_profile
, ~/.zshrc
, ~/.profile
, or ~/.bashrc
).
You can find the updated version of nvm here
Run the command below to check that nvm was successfully installed
nvm --version
The terminal will show Command ’nvm’ not found
as the code has been added to your profile but hasn’t run yet
Just close the currently opened terminal and launch a new terminal and run nvm –version
again
Install Node.js
To install node.js using nvm, you can use nvm install
node to install the latest version of node, or use nvm install 6.14.4
to install a specific version of node, or use nvm install –lts
to install the latest LTS version of node.
NVM will install Node.js include with NPM (Node Package Manager), see the complete guide to use nvm here.
Install the latest LTS version of Node.js
nvm install --lts
Check the installed version of Node.js
node --version
Check the installed version of NPM
npm --version
Run Example Node.js App
Node.js has successfully installed in your system, now time to run some node.js application. I’ll run an application that cloning from my github repository, the app is quite simple, it just a ‘Hello World’ app, it use just for test that node.js running correctly.
The main code app.js
of this repository looks like this:
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
Clone the repository
git clone https://github.com/budimanfajarf/node-hello-world.git
Change directory to node-hello-world
cd node-hello-world
Install packages using npm
npm install
Run Node.js app
node app.js
Open a browser and navigate to localhost:3000
if you’re using a local computer, or navigate to public-dns-or-ip-address:3000
if you’re using an AWS EC2 Instance.
Make Node.js App Keep Running
Install PM2
The app will run as long as you open the terminal, but when you close the terminal or press Ctrl-C
, the app will stop running. To make node.js app keep running, we can use a process manager called PM2, find more information about PM2 here.
First, stop the app.js
running before by press Ctrl-C
Install PM2 globally using npm
npm install pm2 -g
Start Node.js app using PM2
pm2 start ~/node-hello-world/app.js
Now even if you close the terminal, the app will keep running and can access using a browser on a url like localhost:3000
if you use a local computer, or public-dns-or-ip-address:3000
if you use an AWS EC2 instance.
Configure Startup
When you reboot your server, the app won’t automatically be running, we can set up startup configuration by generating startup script using pm2.
To generate the startup script, use the following command:
pm2 startup
Copy the generated script and hit enter to run it
Save the configuration
pm2 save
Now when you reboot your server, the pm2 will automatically running and start node.js app! :)
If you want to remove the startup configuration, the steps are similar, generate unstartup script with the command below
pm2 unstartup
Copy and run the generated script, then save the configuration with pm2 save
.
Useful PM2 Commands
List all running apps:
pm2 list
Managing apps:
pm2 stop <app_name|namespace|id|'all'|json_conf>
pm2 restart <app_name|namespace|id|'all'|json_conf>
pm2 delete <app_name|namespace|id|'all'|json_conf>
Details on a specific app:
pm2 describe <id|app_name>
Monitor logs, custom metrics, apps information:
pm2 monit
Find more info about PM2 on npmjs or keymetrics