DEV Community

Shanu
Shanu

Posted on

How to Deploy a Node.js API with Nginx on a VPS

Deploying a Node.js API on a Virtual Private Server (VPS) can seem daunting, but it's a crucial step in making your application accessible to users worldwide. Nginx, a powerful and widely-used web server, acts as a reverse proxy to manage incoming traffic and route it to your Node.js application. This guide will walk you through the process of deploying your Node.js API with Nginx on a VPS, from setting up your server to configuring Nginx and securing your application.

Step 1: Setting Up Your VPS

Before deploying your Node.js API, you'll need to set up your VPS. Most hosting providers like DigitalOcean, AWS, and Linode offer easy-to-use VPS options. Once you've chosen a provider and created your VPS, follow these steps:

  • Access Your VPS: Use SSH to connect to your VPS. You can do this with a command like:
   ssh root@your_vps_ip_address
Enter fullscreen mode Exit fullscreen mode

Replace your_vps_ip_address with your VPS's actual IP address.

  • Update Your Server: It's good practice to update your server's packages to the latest versions:
   sudo apt update && sudo apt upgrade -y
Enter fullscreen mode Exit fullscreen mode
  • Install Node.js: Install Node.js on your VPS. You can use NodeSource, a popular repository, to get the latest version:
   curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
   sudo apt install -y nodejs
Enter fullscreen mode Exit fullscreen mode

This command installs Node.js along with npm (Node Package Manager).

Step 2: Setting Up Your Node.js API

With Node.js installed, the next step is to set up your Node.js API on the VPS.

  • Upload Your API: You can upload your Node.js API to the VPS using SCP, Git, or any other preferred method. If you're using Git, clone your repository directly on the VPS:
   git clone https://github.com/your-username/your-repo.git
Enter fullscreen mode Exit fullscreen mode
  • Install Dependencies: Navigate to your API directory and install the necessary dependencies:
   cd your-repo
   npm install
Enter fullscreen mode Exit fullscreen mode
  • Start Your API: To ensure your API is working, start it using Node.js:
   node index.js
Enter fullscreen mode Exit fullscreen mode

Replace index.js with the entry point of your API. If everything is set up correctly, your API should be running, but only accessible via localhost.

Step 3: Setting Up Nginx as a Reverse Proxy

To make your Node.js API accessible over the web, you'll configure Nginx to act as a reverse proxy.

  • Install Nginx: If Nginx isn't already installed on your VPS, you can install it with:
   sudo apt install nginx
Enter fullscreen mode Exit fullscreen mode
  • Configure Nginx: Create a new configuration file for your Node.js API. Start by navigating to the Nginx sites-available directory:
   sudo nano /etc/nginx/sites-available/your-api
Enter fullscreen mode Exit fullscreen mode

Add the following configuration:

   server {
       listen 80;
       server_name your_domain_or_ip;

       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;
       }
   }
Enter fullscreen mode Exit fullscreen mode

Replace your_domain_or_ip with your actual domain name or IP address, and 3000 with the port your Node.js API is running on.

  • Enable the Configuration: Create a symbolic link to the sites-enabled directory to enable your configuration:
   sudo ln -s /etc/nginx/sites-available/your-api /etc/nginx/sites-enabled/
Enter fullscreen mode Exit fullscreen mode
  • Test and Restart Nginx: Test the Nginx configuration to ensure there are no errors:
   sudo nginx -t
Enter fullscreen mode Exit fullscreen mode

If the test is successful, restart Nginx to apply the changes:

   sudo systemctl restart nginx
Enter fullscreen mode Exit fullscreen mode

Step 4: Securing Your Node.js API with SSL

To secure your Node.js API, you'll need to set up SSL/TLS encryption using Let's Encrypt.

  • Install Certbot: Certbot is a tool that simplifies the process of obtaining and installing SSL certificates. Install it with:
   sudo apt install certbot python3-certbot-nginx
Enter fullscreen mode Exit fullscreen mode
  • Obtain an SSL Certificate: Run the following command to obtain and automatically configure the SSL certificate:
   sudo certbot --nginx -d your_domain_or_ip
Enter fullscreen mode Exit fullscreen mode

Follow the prompts to complete the installation. Certbot will handle the Nginx configuration for you.

  • Auto-Renewal: Certbot will automatically renew your SSL certificates. To ensure this works correctly, you can test the renewal process:
   sudo certbot renew --dry-run
Enter fullscreen mode Exit fullscreen mode

Conclusion:

Deploying a Node.js API on a VPS with Nginx may seem complex, but breaking it down into these manageable steps makes it straightforward. By setting up your VPS, configuring Nginx as a reverse proxy, and securing your API with SSL, you can ensure your application is reliable, performant, and secure. With these steps, your Node.js API will be live and ready to serve users across the globe.

Frequently Asked Questions (FAQs):

Why do we use Nginx as a reverse proxy for a Node.js API?

Nginx acts as a reverse proxy to efficiently manage incoming traffic, balance the load, and serve static content. It ensures that requests are routed correctly to your Node.js server, reducing the direct exposure of your app to the internet and enhancing security and performance.

When should you deploy a Node.js API on a VPS?

Deploying on a VPS is ideal when you need full control over the server environment, scalability, and security. It's particularly suitable for production environments where stability and performance are critical.

How does using Nginx help in optimizing the performance of a Node.js API?

Nginx can handle a large number of concurrent connections efficiently, offloading tasks such as SSL termination and static content serving from the Node.js server, which helps reduce server load and latency.

What issues can deploying on a VPS eliminate or reduce?

Deploying on a VPS can eliminate the limitations of shared hosting environments, providing more control over resources, enhanced security, and the ability to handle higher traffic loads. It also reduces the risks of downtime due to server resource competition.

How does securing your API with SSL benefit your application?

SSL encrypts the data exchanged between your server and clients, ensuring that sensitive information is protected from interception and tampering. It also helps build trust with users and improves your application's SEO ranking.

Top comments (0)