Skip to main content

Nexjs App deployment on Red hat Server

Deployment of Nextjs Application.

You can follow this article as well.

https://medium.com/bina-nusantara-it-division/how-to-deploy-your-next-js-apps-on-linux-server-using-nginx-and-pm2-65834cfecd37

https://codebhaiya.com/blog/how-to-point-domain-and-host-a-next.js-app-in-production-on-an-ubuntu-vps

My searching on BlackBox Ai
Chat Blackbox: AI Code Generation, Code Chat, Code Search

 Step 1.

Setup Node environment on server

Now we will start installing following packages using commands

-sudo dnf install nodejs npm git 

After successful installations check these packages versions to verify.

Note: For installing latest/specific version on nodejs. we will use mvn package.

this is github official installation guide
https://github.com/nvm-sh/nvm

By using nvm command we can install nvm package. Its a Node Version Manager

-curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

To verify run command 

-nvm //hit enter

If it not found than close the terminal and re-login 

-nvm install node

Step 2.

Get pull of git project on your server.

you can go to your directory

.cd root

By this command your project will be download from your git repository to your server directory.

Inside root: -git pull your-project-url.git 

Step 3.

Go to the project root directory. Install node module in your project.

-npm install

or install latest on os recommend while npm install

npm install -g npm@10.8.3

Now test the app my this command 

-npm run dev

You app will run on local host at 3000 port.

Step 4

Install NGINX web server

dnf install nginx

Start NGINX

sudo systemctl start nginx

sudo systemctl status nginx

start nginx as an service

systemctl enable nginx

Configuration of virtual hosting

Step 5

NGINX configuration

go to /etc/nginx/conf.d directory

open conf.d directory and create a file with the name of <project_name>.conf

Add this configuration in this file.

Now here is the important this to under stand.

This is Next App that we are going to deploy. The next app can run directly through nginx. It must be run as an service in localhost at some port. Normally we run this next project on 3000 port.

What this configuration will do, it take the coming request from api url and redirect the request to the

localhost:3000 url. Basically with this configuration is working as a reverse proxy.

server {

        listen       80;

        listen       [::]:80;

        server_name  203.128.6.46;

location / {

                # reverse proxy for next server

                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;

       }

save this file with name of <project_name>.conf

Step 6

Run Next app as an service using pm2 package.

pm2 is the third party service that we use to run any program/app as an background service.

-npm install -g pm2

Now run your application. Go to the project root directory than run this command.

-pm2 start npm --name "react-todo-app" -- run preview //for react app
To run my app
-pm2 start npm  --name 'bsms_frontend_app' -- run start //for next app

Note:

Run the backend Nodejs(express) app with same command

-pm2 start npm --name "bsms_backend_service_app" -- run start

The App will start with the name of 'bsms_frontend_app'.

Step 7

Now reload the nginx
-systemctl reload nginx

Hit the url to check: You will definitely find live your app now ;)

Step 8

Big Challenge for me here!

In case the on hitting url you cant find your app to live or you get some error on 503 Bad gateway. Than there is the problem you have to configure and sort.

The error i face:

Go to the var/log/nginx directory where you will find error.log file.

-cat error.log or -tail -n 100 error.log
Get to know the what is the error you have.

What error i find in this file? 
Permission Denied: The connect() function failed to connect to 127.0.0.1:3000 due to permission denied (error code 13). This suggests that the Nginx process (PID 1206913) does not have the necessary permissions to connect to the upstream server at 127.0.0.1:3000.

here is the solution.

1) check in the /etc/nginx/default.conf file, the server block code.

you have to mention your server ip in server block code.

2) I'm providing the Stackoverflow link to fix this problem.

3) This link is very important to clear the understanding and building concept.


Comments

Popular posts from this blog

Install MariaDB Latest Version 11.4 in Red Hat Version 9

 This this post i will show you step by step the installation process of mariaDB in red hat version 9. Step1 Run the command to pull the latest updated packages on applications installed in your system. -dnf update If you get Kernal update than reboot the system -reboot Step2 Go to official mariaDB site Make mariadb repository in /etc/yum.repos.d Place the configuration in this file # MariaDB 11.4 RedHatEnterpriseLinux repository list - created 2024-09-24 11:12 UTC # https://mariadb.org/download/ [mariadb] name = MariaDB # rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details. # baseurl = https://rpm.mariadb.org/11.4/rhel/$releasever/$basearch baseurl = https://mirrors.aliyun.com/mariadb/yum/11.4/rhel/$releasever/$basearch # gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck = 1 Now install the mariaDB with its dependencies package...

Linux Commands

  Linux Commands 1.  OS-Release -cat /etc/os-release -cat /etc/redhat-release show os //kernal information -uname  show kernal middleware It is intermediator between hardware and software. -uname  -r what is process architect. -uname -p To show all information -uname -a 2.  Date-CAL -date -cal 3.  Booting in Linux (Run-Levels) Shutdown/Close pc -init 0  Single user mode -init 1 Multiple user mode -init 2 Multiple user mode with network plus full support Not use -init 4 Graphical mode init 5 Reboot the system -init 6 4.  Target command in Linux (systemctl) With the help of target we can manage system specific as well as user specific task. Target command is system Control (systemctl). Basically it is utility, which build to replace 'init' command. What systemctl can do ?  We can find its all commands with the help of single command. write systemctl enter twice TAB button. //it will list all its commands. Show current system mode - systemctl...