Hosting a NodeJS/ExpressJS application using Nginx
Node.js is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine.
NodeJS applications can be hosted in many different ways but the most preferred way is using Nginx reverse proxy server. Following this article you will be able to host your own NodeJS + Express application for free on any cloud provide if you have Free credits available ( Which mostly have if you are creating your account for the first time).
For this replication you will need a account on any cloud provider. I will be using AWS.
Let's get started:
Step 1: Setting up cloud environment 👽:
Goto your cloud console and create a Virtual machine. The below commands I have shared are using Ubuntu 18.x on Amazon EC2. But Feel free to choose any machine and install the below mentioned packages accordingly.
Step 2: Installing and setting up NodeJS:
As mentioned above NodeJS is an open-sources. Hence, it is available for free for any different machine. To install NodeJS in Ubuntu follow:
Check for latest updates:
sudo apt update
Now, Install Node.js:
sudo apt install nodejs
Check if Node.js is successfully installed and the version:
node --version
Now, Install node package manager
sudo apt install npm
Step 3: Create a simple Node & Express application
The below mentioned code will serve Hello World if anyone visit your webpage:
Initialize your Nodejs application:
cd ~
mkdir mynodeapp && cd mynodeapp
npm init -y
Install Express
npm i express
Copy the following code into your app.js file:
vim app.js
const express = require("express");
const app = express(); // Initializing Express App
// Sending Hello World when anyone browse your webpage
app.get("/*", (req, res)=>{
res.send('Hello World');
});
app.listen(3000, ()=> console.log("App Listening on port 3000"));
Save the above code and exit by pressing esc button with :wq
Test your application:
node app.js
Expected Output:
App Listening on port 3000
To close the above application press Ctrl-C
We can see that if we run the above application, it blocks all other commands and we are not able to perform any other activities. Further, if we will close the terminal the app will be closed. To fix this issue we will be using pm2, this will help us to run multiple NodeJS/ExpressJS applications on different ports at single time without blocking the resources or us
Installing PM2
sudo npm install -g pm2
Start the above application using pm2:
pm2 start app.js
Check if you application is running or not:
pm2 status
To stop your application you can do:
pm2 stop <application_name/ID>
Your application name for us it is app.js or ID will be 0 as shown above in Output of pm2 status
To restart your application:
pm2 restart <application_name/ID>
--
After starting your application using pm2; Test your application using CURL if it is running successfully running locally or not
curl localhost:3000
Step 3: Setting up Nginx Proxy
We can see that our application is currently running on port 3000. However, we want whenever anyone comes to our application they just directly open our website let say example.com and they should be redirected to our application. To do so, we will use Nginx which redirect users coming on our website to our application which is running on port 3000. Using nginx we can setup multiple different websites quickly and store/manage logs easily.
For Ubuntu, Nginx is available in it's default repositories, hence we simply need to install nginx directly
sudo apt install nginx
In-order to setup Nginx open defult nginx file and setup a reverse proxy to localhost:3000
sudo vim /etc/nginx/sites-available/default
In the default file, under the server block you can see pre-existing location block. Remove the content of location / with the below mentioned code:
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;
}
Start your nginx server
sudo systemctl restart nginx
wuhoo!! 🎉 we successfully hosted your application which is now running on:
http://your_virtual_machine_IP
Add your_virtual_machine_IP to your domain name provider as ** A name** and anyone visiting your website will be able to see your NodeJS application.
For, daily content follow me on Instagram @mr_javascript
Refer to the below link for Step by step video tutorial
Top comments (1)
Thank you!!🤗