MERN Stack Deployment Guide: Setting Up Backend on AWS EC2

MERN Stack Deployment Guide: Setting Up Backend on AWS EC2
Deploying a MERN stack application (MongoDB, Express.js, React, Node.js) requires a robust and scalable backend setup. AWS EC2 (Elastic Compute Cloud) is a popular choice for hosting the backend due to its flexibility, scalability, and reliability.

Why Deploy MERN Stack Backend on AWS EC2

AWS EC2 offers a secure, scalable, and cost-effective environment for hosting Node.js and Express.js servers with MongoDB integration. With EC2, you can:

  • Scale server resources based on demand.
  • Ensure high availability with AWS’s global infrastructure.
  • Secure your backend with AWS security groups and VPC configurations.
  • Integrate seamlessly with other AWS services like RDS, S3, or Elastic Load Balancer.
This guide is designed for developers looking to deploy a MERN stack backend on AWS EC2 efficiently, with clear steps and best practices for a production-ready setup.

Prerequisites

Before starting, ensure you have:

  • An AWS account.
  • Basic knowledge of MERN stack development (MongoDB, Express.js, Node.js).
  • A MERN stack application ready for deployment.
  • Familiarity with SSH, Git, and Linux commands.
  • A domain name (optional for custom URLs).

Step-by-Step Guide to Deploying MERN

Step 1: Launch an AWS EC2 Instance

  • Sign in to AWS Management Console: Navigate to the EC2 dashboard.
  • Choose an AMI: Select an Amazon Linux 2 or Ubuntu Server AMI for compatibility with Node.js.
  • Select Instance Type: For small-scale MERN apps, a t2.micro instance (free tier eligible) is sufficient. For larger apps, choose a higher-tier instance like t3.medium.
  • Configure Instance Details: Set up a VPC and subnet for network isolation.
  • Enable auto-assign public IP for external access.
  • Add Storage: Allocate sufficient storage (e.g., 10-20 GB) for your app and database.
  • Configure Security Group:Allow inbound traffic on ports
  • 22: (SSH for remote access).
  • 80 (HTTP for web traffic).
  • 443 (HTTPS for secure traffic).
  • 3000 or custom port for your Node.js app.
  • Launch Instance: Download the .pem key pair for SSH access.

Step 2: Connect to Your EC2 Instance​

 

  • Use an SSH client (e.g., Terminal on macOS/Linux or PuTTY on Windows).
  • Connect using the command:
				
					ssh -i your-key.pem ec2-user@<your-ec2-public-ip>console.log( 'Code is Poetry' );
				
			
  • Replace  your-key.pem with your key file and <your-ec2-public-ip> with the instance’s public IP.
  • Update the instance:
				
					sudo apt update && sudo apt upgrade -y  # For Ubuntu
 sudo yum update - # For Amazon Linux
				
			

Step 3: Set Up the Backend Environment

  • Install Node.js and npm:For Ubuntu:
				
					curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs
				
			
  • For Amazon Linux:
				
					curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo yum install -y nodejs
				
			
  • Verify installation:
				
					node -v  # for verify node version in server
npm -v   # for npm version in server
				
			

Install MongoDB (if hosting the database on the same EC2 instance):

  • Follow MongoDB’s official installation guide for your OS.
  • Alternatively, use MongoDB Atlas for a cloud-hosted database to reduce EC2 load.
  • Install Git:
				
					sudo apt install git -y  # Ubuntu oprating System lts 
   sudo yum install git -y  # Amazon Linux
				
			

Step 4: Deploy Your MERN Backend Code

Clone Your Repository

  • Navigate to your desired directory (e.g., `/home/ubuntu`).
  • Clone your backend code
				
					git clone <your-repo-url>
				
			

Install Dependencies

  • Navigate to your backend folder
				
					cd <your-backend-folder>
 npm install
				
			

Configure Environment Variables

  • Create a .env file in the backend folder
				
					 touch .env
				
			
  • Add necessary variables, e.g.
				
					PORT=3000
     MONGODB_URI=<your-mongodb-connection-string>
     JWT_SECRET=<your-secret-key>
				
			

Test the Backend

  • Start the server
				
					node server.js  # or npm start
				
			
  • Access  http://<your-ec2-public-ip>:<port> to verify the backend is running.

Step 5: Set Up a Process Manager (PM2)

To ensure your Node.js app runs continuously and restarts on failure:

  •  Install PM2 globally:
				
					 npm install -g pm2
				
			
  • Start your app with PM2:
				
					 pm2 start server.js --name "mern-backend"
				
			
  •  Save PM2 configuration:
				
					 pm2 save
   pm2 startup
				
			
  • Follow the generated command to enable PM2 on system boot.

Step 6: Configure Nginx as a Reverse Proxy

  • Install Nginx
				
					sudo apt install nginx -y  # Ubuntu
   sudo yum install nginx -y  # Amazon Linux
				
			
  • Configure Nginx
				
					 sudo nano /etc/nginx/sites-available/default  # Ubuntu
     sudo nano /etc/nginx/conf.d/mern.conf        # Amazon Linux
				
			
  •  Add the following configuration:
				
					 server {
         listen 80;
         server_name <your-ec2-public-ip or domain>;

         location / {
             proxy_pass http://localhost:3000;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection 'upgrade';
             proxy_set_header Host $host;
             proxy_cache_bypass $http_upgrade;
         }
     }
				
			
  • Restart Nginx
				
					sudo systemctl restart nginx
   sudo systemctl enable nginx
				
			

Step 7: Secure Your Backend with SSL (Optional)

For production, secure your app with HTTPS

  • Install Certbot for Let’s Encrypt:
				
					sudo apt install certbot python3-certbot-nginx -y  # Ubuntu
   sudo yum install certbot python3-certbot-nginx -y  # Amazon Linux
				
			
  • Obtain an SSL certificate:
				
					sudo certbot --nginx -d <your-domain>
				
			
  • Follow prompts to configure HTTPS. Certbot auto-updates Nginx for SSL.

Step 8: Monitor and Scale

  • Monitor Performance**: Use AWS CloudWatch to track EC2 metrics like CPU and memory usage.
  • Scale: Set up an Auto Scaling Group to handle traffic spikes.
  • Backup: Regularly back up your MongoDB database and EC2 instance snapshots.

Best Practices for MERN Stack Deployment on AWS EC2

  • Use Environment Variables: Store sensitive data like API keys and database URIs securely.
  • Enable Security Groups: Restrict access to only necessary ports (22, 80, 443).
  • Regular Updates: Keep Node.js, MongoDB, and OS packages updated.
  • CI/CD Pipeline: Integrate tools like GitHub Actions for automated deployments.
  • Load Balancing: Use AWS Elastic Load Balancer for high-traffic apps.

Finally

Deploying a MERN stack backend on AWS EC2 is a straightforward process when following this guide. By setting up Node.js, MongoDB, PM2, and Nginx, you can create a scalable, secure, and high-performance backend for your MERN application. For advanced setups, consider integrating AWS services like RDS for MongoDB or Route 53 for domain management.

“Happy Coding”

Leave a Reply

Your email address will not be published. Required fields are marked *