DEV Community

Cover image for From Code to the Cloud: A Step-by-Step Guide to Deploying Your Node.js App on AWS EC2 II
Abayomi Ogunnusi
Abayomi Ogunnusi

Posted on

From Code to the Cloud: A Step-by-Step Guide to Deploying Your Node.js App on AWS EC2 II

From Code to the Cloud:

A Step-by-Step Guide to Deploying Your Node.js App on AWS EC2 II

The part one dealt with the following:

  1. Setting up an AWS account
  2. Creating an EC2 instance
  3. Installing Node.js and NPM
  4. Creating a simple Node.js app
  5. Installing and configuring PM2
  6. Using SSH to connect to your EC2 instance
  7. Deploying your app to the EC2 instance

Read the part one here.

In this part, we will cover the following:

🎯 Using Nginx as a reverse proxy
🎯 Setting a subdomain for your app
🎯 Configuring SSL using certbot

Let's get the partyy started
started

Install the Nginx reverse proxy

ssh into your EC2 instance

ssh -i "your.pem" ubuntu@<your-ec2>
sudo su - # to get root access
Enter fullscreen mode Exit fullscreen mode

Install nginx

sudo apt-get update
sudo apt-get install nginx
Enter fullscreen mode Exit fullscreen mode

check if nginx is installed

nginx -v  #nginx version: nginx/1.18.0 (Ubuntu)
Enter fullscreen mode Exit fullscreen mode

start nginx

sudo service nginx start
Enter fullscreen mode Exit fullscreen mode

check if nginx is running

sudo service nginx status
Enter fullscreen mode Exit fullscreen mode

Image description

Configure Nginx as a reverse proxy

Go to the nginx configuration file

vi /etc/nginx/sites-available/default
Enter fullscreen mode Exit fullscreen mode

Add the following lines to the file

server {
    listen 80;
    server_name your-domain.com; # replace with your domain name

    location / {
        proxy_pass http://localhost:5000; # replace with your app's port
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Enter fullscreen mode Exit fullscreen mode

Save and exit the file

:wq
Enter fullscreen mode Exit fullscreen mode

Test the configuration

sudo nginx -t
Enter fullscreen mode Exit fullscreen mode

Restart nginx

sudo service nginx restart
Enter fullscreen mode Exit fullscreen mode

Go the Route 53 and add a new record

  • Create a new record and add the public IP address of your server Image description

Image description

Installing Core from Snap

This is a snap package that provides the core functionality of snapd and the snap command-line tool. It is required to install other snaps.

sudo snap install core; 
sudo snap refresh core
Enter fullscreen mode Exit fullscreen mode

Remove Certbot if it's already installed

sudo apt remove certbot
Enter fullscreen mode Exit fullscreen mode

Install Certbot

sudo snap install --classic certbot
Enter fullscreen mode Exit fullscreen mode

Create a symbolic link

sudo ln -s /snap/bin/certbot /usr/bin/certbot
Enter fullscreen mode Exit fullscreen mode

change the following lines to the server block

server {
    listen 80;
    server_name mysubdomain.com; # replace with your domain name

    location / {
        proxy_pass http://localhost:5000; # replace with your app's port
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Enter fullscreen mode Exit fullscreen mode

Check status and reload nginx

sudo nginx -t
sudo systemctl reload nginx
Enter fullscreen mode Exit fullscreen mode

Run Certbot (obtain free ssl)

sudo certbot certonly --nginx -d mysubdomain.com
Enter fullscreen mode Exit fullscreen mode

Verify certbot renewal

sudo systemctl status snap.certbot.renew.service
Enter fullscreen mode Exit fullscreen mode

Image description

Enable automatic renewal

sudo certbot renew --dry-run
Enter fullscreen mode Exit fullscreen mode

Conclusion

By following these steps, you can easily set up a subdomain on your server and obtain a free SSL certificate using Certbot. This will help you secure your website and improve its performance.

Top comments (0)