Deploy Node.js applications with NGINX

Ye Min Ko
3 min readMay 12, 2020

node.js + nginx

Node application တွေရေးသားကြရမှာ ကိုယ်ရေးသားထားတဲ့ application run ဖို့အတွက် node app.js လို့ရေးလိုက်တာနဲ့ node server run သွားပြီး စတင်အသုံးပြုလို့ရမှာဖြစ်ပါတယ်။

ဒါပေမဲ့ အရေးကြီးတာက ဒီနည်းလမ်းက development လုပ်နေချိန်အတွင်းမှာ အဆင်ပြေ လွယ်ကူတယ် ဆိုပေမဲ့ ကိုယ့်ရဲ့ application ကို server ပေါ်ကို တင်တဲ့အချိန်မှာ ပြဿနာတက်ပါတော့တယ်။

ဘာလို့လဲ့ဆိုတော့ node server ကို run လိုက်ရင် command line မှာ အခုလိုပြနေမှာပါ။

node server is running

command line ကနေထွက်လိုက်တာနဲ့ node application ကရပ်သွားမှာဖြစ်ပါတယ်။ ဆိုတော့ command line ကလည်း ဒီတိုင်းကြီးဖွင့်ထားဖို့ အဆင်မပြေတဲ့အခါ အခုလို node application တွေကို အမြဲတမ်း run ပေးထားမဲ့ tool တစ်ခုလိုအပ်လာပါတယ်။

PM2

PM2 ဆိုတာ node js အတွက် process manager တစ်ခုပါ။ သူ့ကိုသုံးပြီးတော့ node application ကိုအမြဲတမ်း run နေအောင်လုပ်နိုင်ပါတယ်။ install လုပ်ဖို့ဆိုရင် ဒီလိုလုပ်လို့ရပါတယ်။

npm install pm2 -g

install လုပ်ပြီးသွားပြီဆိုရင် ကိုယ့်ရဲ့ node application ကို node app.js အစား ဒီလို run ပါ။

pm2 start app.js -n app

-n နဲ့ process name ကိုသတ်မှတ်လိုက်တာပါ။ Run လိုက်တာနဲ့အခုလို process table ပြပေးမှာဖြစ်ပါတယ်။

run node app with pm2

pm2 မှာ run နေတဲ့ application list ကိုသိချင်ရင် ဒီ command နဲ့ကြည့်ပါ။

pm2 list

ဒါဆိုရင်အခုလို run နေတဲ့ app list ကိုပြပေးမှာပါ။

pm2 app list

run နေတာရပ်ချင်ရင်တော့ အပေါ်ကသတ်မှတ်ခဲ့တဲ့ process name ကိုသုံးပြီးအခုလို ရပ်လို့ရပါတယ်။

pm2 stop app
pm2 stop app

Server restart ချလိုက်လည်း PM2 ကို auto ပြန်run အောင် အခုလို လုပ်နိုင်ပါတယ်။

pm2 startup

ဒါဆိုရင် run ဖို့ command ကို ပြောပေးပါလိမ့်မယ်။

pm2 auto restart

copy ကူးပြီးrun လိုက်ပါ။

pm2 auto restart configure

ဒီလိုပေါ်လာရင်တော့ ရပြီပဲဖြစ်ပါတယ်။

ခုဆိုရင် node application ဟာ server ပေါ်မှာအမြဲတမ်း run နေပြီဖြစ်ပါတယ်။ ဒါ့ကြောင့် Nginx နဲ့ proxy လုပ်ပေးဖို့ ဆက်လုပ်ပေးရပါမယ်။

Node application တွေကို Nginx မလိုပဲနဲ့ တိုက်ရိုက် သုံးလို့ရပါတယ်၊ ဒါပေမဲ့ production level မှာတော့ security နဲ့ performance ပိုကောင်းဖို့အတွက် Nginx ကို reverse proxy အနေနဲ့ထားသုံးသင့်ပါတယ်။ အသေးစိတ်ကို ဒီမှာ လေ့လာနိုင်ပါတယ်။

Nginx

Nginx ဆိုတာ web server တစ်ခုဖြစ်ပါတယ်။ install ပြုလုပ်ဖို့အတွက် run ပါ။

sudo apt-get install nginx

Install လုပ်ပြီးပြီဆိုရင် configure လုပ်ဖို့ ဒီဟာကို run ပေးပါ။

sudo nano /etc/nginx/sites-enabled/default

Configure ပြုလုပ်ဖို့အတွက် server block အတွင်းမှာ location /ကိုရှာပါ။ အဲ့ဒီ block အတွင်းမှာ အောက်က စာတွေကို replace လုပ်ပေးပါ။ ကိုယ့် application က port 8080 မဟုတ်ဘူးဆိုရင် ပြင်ပေးဖို့ မမေ့ပါနဲ့။

location /{ 
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:8080/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}

အကယ်၍ ကိုယ့်မှာ node application တွေအများကြီးရှိတယ်ဆိုရင် ဒီလို block တွေကို ထပ်ထည့်ပေးလို့ရပါတယ်။ ဥပမာ-

location /app2{ 
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:8081/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}

ဒီလိုရေးလိုက်တာနဲ့ app.example.com/app2 လို့ခေါ်ရင် port 8081 မှာ run နေတဲ့ node application ကိုခေါ်ပေးသွားမှာ ဖြစ်ပါတယ်။

ပြင်ပြီးသွားရင်တော့ nginx server ကိုမစခင် typo အမှားပါမပါနဲ့ configure လုပ်တာ အဆင်ပြေမပြေ သိစေဖို့အတွက်ဒီ command နဲ့ စစ်လို့ရပါတယ်။

sudo nginx -t

အားလုံးအဆင်ပြေရင်တော့ဒီလိုပေါ်လာမှာပါ။

nginx configure test is successful

အခုဆိုရင်တော့ nginx ကို စrun လို့ရပါပြီ။

sudo systemctl start nginx

ပြီးရင်တော့ browser ကနေသင့်ရဲ့ node application တွေကို ခေါ်ယူကြည့်လို့ ရပြီဖြစ်ပါတယ်။ အကယ်၍ Nginx ရဲ့ welcome screen ပဲ ပေါ်နေရင်တော့ sudo systemctl restart nginxနဲ့ restart ပြုလုပ်ပြီး browser ကို shift refresh ပြုလုပ်ပေးပါ။

ပြီးပါပြီ

ဒီလောက်ဆိုရင်တော့ node application တွေကို Nginx အသုံးပြုပြီး ဘယ်လို deploy လုပ်မလဲဆိုတာ သိလောက်ပြီလို့ ယူဆပါတယ်။

REFERENCE#1: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04

REFERENCE#2: https://www.npmjs.com/package/pm2

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Ye Min Ko
Ye Min Ko

Written by Ye Min Ko

Dedicated to crafting digital experiences, always learning, and thriving in peaceful, focused spaces.

No responses yet

Write a response