Effortless Node.js Deployment on Amazon EC2 with tmux: A Step-by-Step Guide
In this blog, we will have a clear and step-by-step understanding of how to host our node application on an Amazon EC2 instance and how to keep the application running.
Introduction: Imagine you're a chef in a busy kitchen, about to serve a delicious dish. But just as you're ready, someone unplugs the oven!
Problem: That's what it's like hosting an application on EC2. When you close the terminal, your app goes offline, leaving users in the lurch.
Solution: Enter tmux, your kitchen assistant! It keeps your app running in the background, like a backup generator for your oven. With tmux, your app stays online, serving users seamlessly.
So, when hosting on EC2, don't forget tmux. It's the secret ingredient for uninterrupted service!
Now Let's look at the steps to implement it..
The entire steps will be broadly classified into 3 main categories.
Step-1 Develop a Node JS Application.
Initiate a Node Application
npm init -y
Install express dotenv, express npm package.
npm install express dotenv
Create a .env file.
PORT=3000
Create a sample node application.
require("dotenv").config();
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3001;
app.get("/", (req, res) => {
res.send("Welcome to AWS World");
});
app.listen(PORT, () => {
console.log(`Server running on ${PORT}`);
});
Now your node application is ready to push into the remote repository.
Initialize a git repo using:
git init
Make sure to add .gitignore file and add node_modules folder inside .gitignore.
Create the main branch
git checkout -b main
Add the remote origin:
git remote add origin <repo-link>
Then Commit the changes with the following commands:
git add .git commit -m <commit message>
Push the commit into the remote repo using:
git push origin <branch-name>
Now we pushed the code successfully into the remote repository.
Step-2 It's time to start with the AWS EC2 hoisting part.
I have attached a video below which describes how to create an EC2 instance.
After you have the instance now it time to setup the ports to open for our application to display.
Head over to the security groups option in the instance dashboard.
Click on Edit Inbound Rules Option.
- Add a new rule.
Now we are ready with setting up the EC2 instance now let's move to connecting our instance and hoisting the application.
Setting up SSH and Hoisting
Set up SSH in your local system.
You can check whether SSH is present in your system by running ssh
in your command prompt.
If the output is not the same as above then you can setup SSH by following the steps mentioned in the provided blog link.
After you are done with SSH follow the below-mentioned steps.
- Run the bellow command to connect to the instance.
ssh -i <key-path> ubuntu@<public-ip>
Make a directory of your choice name.
mkdir node-app
Move inside the director.
cd node-app
You can check for git using the git --version
command. If not found you can install using sudo apt install git
- clone the remote app that we created previously.
- Move inside the cloned folder using
cd node-app
Then you can install packages using
npm install
It will install all necessary packages.
Install tmux using
sudo apt install tmux
- Start a new tmux session:
tmux new-session -s session_name
Run the node application in the tmux session using
node index.js
To detach from the tmux session without stopping the Node.js app, press Ctrl+b then d.
Hurray you have hoisted the application with continuous running.
- You can again attach to a pre-existing session using the following command.
tmux attach -t session_name
So we have pretty much covered how to host a node application in an EC2 instance and run it continuously with Node JS. If you have any doubt I will be more than happy to help. You can mail your queries to 'rajatnayak1582002@gmail.com'.
Subscribe to my newsletter
Read articles from Rajat Kumar Nayak directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Rajat Kumar Nayak
Rajat Kumar Nayak
Software Developer at NCompass TechStudio, specializing in scalable ETL pipelines and data processing solutions. Former intern at IG Drones and eLitmus, where I developed user-engaging front-end solutions and implemented multi-user video conferencing systems. Proficient in full-stack development with Python, JavaScript, React, Django, Node.js, and AWS. Experienced in database management (SQL, MongoDB, PostgreSQL) and cloud technologies. Skilled in building e-commerce platforms, real-time communication systems, and data analytics solutions.