DEV Community

Mahinur Rahman
Mahinur Rahman

Posted on

πŸš€ Deploying Node.js Application with PM2, NGINX, and SSL Configuration πŸš€

Today, I deployed a new Node.js app on AWS using a smooth setup process with Node.js, PM2, NGINX, and Certbot for SSL(no need to touch cpanel). Only 5 steps to deploy your app in AWS. Here’s the step-by-step guide that can save time for you!

  1. Install Node.js & NPM:
sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg NODE_MAJOR=20 echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/nodesource.list > /dev/null sudo apt-get update sudo apt-get install nodejs -y sudo apt install npm -y npm i -g n sudo n lts 
Enter fullscreen mode Exit fullscreen mode
  1. Clone Your Repo and Setup PM2:
git clone <your-repo> cd <your-repo-directory> git checkout <branch-name> npm install sudo npm i -g pm2@latest pm2 init 
Enter fullscreen mode Exit fullscreen mode
  1. Configure PM2 with a Template:
module.exports = { apps: [ { name: 'your-app-name', cwd: '/home/ubuntu/my-project', script: 'npm', args: 'start', env: { "KEY": "value", }, }, ], }; 
Enter fullscreen mode Exit fullscreen mode
  • Make a subdomain first, then
  • Now add A record in your DNS - CPANEL for the public IP where your instance is live (example 3.107.76.239) and set TTL to 300
  1. Configure NGINX for Reverse Proxy:
sudo apt install nginx sudo nano /etc/nginx/sites-available/default 
Enter fullscreen mode Exit fullscreen mode
  • Set the domain and point your port in NGINX config:
server { listen 80; server_name yourdomain.com; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 
Enter fullscreen mode Exit fullscreen mode
  • Restart NGINX:
sudo systemctl restart nginx 
Enter fullscreen mode Exit fullscreen mode
  1. SSL Configuration with Certbot (NO TOUCH NEEDED IN CPANEL):
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com 
Enter fullscreen mode Exit fullscreen mode

Now you have your Node.js app running securely with an SSL-enabled domain πŸŽ‰
πŸ”— DM me if you'd like more tips on server setup, Node.js deployment, or other dev-related topics.

Nodejs #AWS #DevOps #PM2 #Nginx #SSL #FullStack #WebDev

Top comments (0)