MERN Stack Deployment Guide: Setting Up Backend on AWS EC2

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.
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@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
Install Dependencies
- Navigate to your backend folder
cd
npm install
Configure Environment Variables
- Create a .env file in the backend folder
touch .env
- Add necessary variables, e.g.
PORT=3000
MONGODB_URI=
JWT_SECRET=
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 ;
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
- 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.





