Skip to content

DevOps & Deployment

How to Deploy a React Application on Ubuntu Server with Nginx and SSL: A Comprehensive Guide

This guide walks you through deploying a React application on an Ubuntu server using Nginx and securing it with SSL via Certbot. It covers essential steps like connecting to an EC2 instance, installing dependencies, cloning the project, con...

AT App Technologies 3 min read

About this article

Topic
DevOps & Deployment
Published
Mar 20, 2025
Reading time
3 min
Written by
App Technologies
How to Deploy a React Application on Ubuntu Server with Nginx and SSL: A Comprehensive Guide

Deploying your React application on a server might seem overwhelming at first, but with the right tools and steps, it's easier than you think. In this guide, we'll walk you through how to deploy a React app on an Ubuntu server, using Nginx as your web server and securing your site with SSL using Certbot. Whether you're a beginner or a seasoned web developer, this step-by-step guide will make the process simple and efficient.

Prerequisites

Before you start, ensure you have the following:

  • An AWS EC2 instance (Ubuntu recommended)
  • SSH access to the EC2 instance
  • A domain name (recommended, but optional)
  • A React.js project ready for deployment


Step 1: Connect to Your EC2 Instance

To begin, you'll need to connect to your EC2 instance via SSH. Run the following command in your terminal:

ssh -i your-key.pem ubuntu@your-ec2-instance-ip


Step 2: Prepare Your Server

Start by updating your server and installing the necessary packages for deployment, including Nginx, Git, and Curl:

sudo apt update -y && sudo apt upgrade -y

sudo apt install -y nginx git curl


These tools are essential for serving your React app and downloading files from your repository.


Step 3: Clone Your React Application

Next, clone your React project repository to the server. Use the following command, replacing the URL with your Git repository:

git clone --depth 1 --filter=blob:none --sparse https://github.com/your-repo-url

cd repo

git sparse-checkout set /build


This process will only clone the latest build files, optimizing your deployment. The sparse-checkout mode ensures only the build folder is pulled from the repository.


Step 4: Move Build Files to Nginx's Directory

Now, move your React build files to Nginx’s root directory:

sudo mv /var/www/repo /var/www/react

sudo chown -R www-data:www-data /var/www/react

sudo chmod -R 755 /var/www/react


This ensures Nginx has the necessary permissions to serve your React application from the /var/www/react directory.


Step 5: Configure Nginx to Serve Your React App

Now it's time to configure Nginx to serve your React app. Open the configuration file using the following command:

sudo vim /etc/nginx/sites-available/react-app


Add the following configuration:

server {

    listen 80;

    server_name yourdomain.com www.yourdomain.com;


    # Redirect www to non-www

    if ($host = www.yourdomain.com) {

        return 301 http://yourdomain.com$request_uri;

    }


    root /var/www/react;

    index index.html;

    location / {

        try_files $uri /index.html;

    }

}


This ensures that Nginx will route all requests to the index.html of your React application, making it compatible with React's single-page application (SPA) structure.


Step 6: Enable Nginx Configuration

Enable the site configuration and restart Nginx:

sudo ln -s /etc/nginx/sites-available/react-app /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl restart nginx


The nginx -t command checks the configuration for errors, and restarting Nginx applies the changes.


Step 7: Allow Traffic on HTTP and HTTPS Ports

Ensure that your server's firewall allows both HTTP (port 80) and HTTPS (port 443) traffic:

sudo ufw allow 'Nginx Full'


Step 8: Secure Your Website with SSL (HTTPS)

To secure your website with SSL, install Certbot and the Certbot Nginx plugin:

sudo apt install -y certbot python3-certbot-nginx

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com --non-interactive --agree-tos -m [email protected]


This will automatically configure SSL certificates for your domain, encrypting the traffic between your server and visitors, which is crucial for security and SEO.


Step 9: Restart Nginx

After SSL is set up, restart Nginx to apply the SSL configuration:

sudo systemctl restart nginx


Step 10: Check Your Website

Finally, navigate to https://yourdomain.com to ensure that your React app is live and securely accessible via HTTPS.


Conclusion

Congratulations! You've successfully deployed your React app on an Ubuntu server using Nginx and secured it with SSL. By following this guide, you’ve set up a fast and secure environment for your React app, ensuring a smooth experience for your users. With Nginx and Certbot, you can rest assured that your app will be served quickly and securely.


Need expert help with deploying your React app? Contact us for professional assistance and ensure a smooth, secure deployment!

AT

Written by

App Technologies

A software studio in Lalitpur, Nepal, designing and building websites, mobile apps and custom systems since 2014 for startups, SMEs and NGOs.

Keep reading

Latest articles

More guides and insights from our team.

Chat with us