In this blog article, we will walk you through the steps to deploy a Node.js application on an Nginx web server. We will install the necessary dependencies, fetch the project from GitHub, set up SSL, and ensure the application runs continuously using PM2.
Prerequisites
- A virtual machine (VM) running Ubuntu (or any other Linux distribution).
- A domain name (
dtechnologies.co.ke
in this case). Ensure the DNS of the domain name are well set. - Basic knowledge of SSH and terminal commands.
- Location of our project root folder: /home/ubuntu/dtechnologies.co.ke/ #Adjust this to what you prefer.
Step 1: Update Your System
Ensure your system is up-to-date. Run the following commands to update.
sudo apt update
sudo apt upgrade -y
Step 2: Install Node.js and npm
This being a node application, we need to install node js and the node package manager- npm. Run the following to install and verify the installation
sudo apt install -y nodejs npm
node -v #to check node version
npm -v #to check npm version.
Step 3: Install and enable Nginx
We need to install nginx, which will act as a reverse proxy for our Node.js application.
sudo apt install -y nginx
Step 4: Upload website files
Use the convenient method to upload your website files. The popular options are cloning from a github repository or scp method.
1. Using github method: your project needs to be pushed to github
- ensure you are in the project root folder: eg /home/ubuntu/dtechnologies.co.ke/
- Clone your project. eg:
- git clone https://github.com/danielnjama/node-js.git
- move your project files to the working directory.
- mv node-js/* .
2. Using SCP method
- scp filename.zip username@serverIP:/home/ubuntu/dtechnologies.co.ke/
- unzip the files in the working directory.
where filename.zip is the file containing your web files, username and your serverIP and your SSH login details and /home/ubuntu/dtechnologies.co.ke/ is the working directory.
Step 5: Install Project Dependencies
Ensure you are still in the working directory of your project. Run the following to install dependencies.
npm install
Step 6: Set Up PM2(Process Manager 2)
PM2 is a process manager for Node.js applications that keep your application running and restarts it if it crashes. Install PM2 globally by running the following command:
#Install PM2
sudo npm install -g pm2
#Start your application with PM2. Note app.js is the startup file. update that incase you have a different one. I have named my app dtechnologies.co.ke, update that to any other.
pm2 start app.js --name dtechnologies.co.ke
#Set PM2 to start on system boot
pm2 startup systemd
pm2 save
Step 7: Configure Nginx
Create an Nginx configuration file for your application and update with the referenced code.
- open/create configuration file
sudo nano /etc/nginx/sites-available/dtechnologies.co.ke
- Add the following. Replace the domain with your domain,or the IP for the VM.
server {
listen 80;
server_name dtechnologies.co.ke www.dtechnologies.co.ke; #update as needed
location / {
proxy_pass http://localhost:3000; #adjust the port if needed.
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;
}
}
Enable the configuration by creating a symbolic link:
sudo ln -s /etc/nginx/sites-available/dtechnologies.co.ke /etc/nginx/sites-enabled/
Test the Nginx configuration for syntax errors and restart for the changes to reflect:
sudo nginx -t
sudo systemctl reload nginx
Step 8: Secure Your Application with Free SSL
We will use Certbot to obtain a free SSL certificate from Let’s Encrypt. Install Certbot and the Nginx plugin and proceed to issue an SSL certificate:
sudo apt install certbot python3-certbot-nginx
#Replace with your domain name and follow the prompts.
sudo certbot --nginx -d dtechnologies.co.ke -d www.dtechnologies.co.ke
The above process installs an SSL certificate to the provided domain and automatically configures the HTTPS redirect.
Step 9: Monitor and Manage Your Application with PM2
PM2 provides various commands to manage your application: Use these commands to manage your application.
- List all running applications
pm2 list
- View logs for your application
pm2 logs myapp #where myapp is the name of your app as assigned in Step 6.
- Restart your application. This should happen when you make any modification to ensure the changes take effect.
pm2 restart myapp
- Stop your application
pm2 stop myapp
- Delete your application
pm2 delete myapp
If your application requires connection to a database, install the database server of your choice, create your database, the required tables, and the users. Map data if required. See some reference guides below:
Make a donation to support us
Web Hosting and email hosting Packages
Related content:
- Deploy a Django Application on EC2 Instance with Nginx
- How to Install and configure Apache Tomcat server on Linux
- How to deploy Django project on an Apache Server
- A Practical Tutorial for Dockerizing Software Applications
- How to Install MySQL Database on Linux
- 10 factors to consider when choosing a hosting company