PM2 — Process Manager
এই page-এ শিখবেন PM2 দিয়ে app background-এ চালু করতে, crash হলে auto-restart করতে, server reboot-এ app আবার উঠানোর ব্যবস্থা করতে এবং real-time log দেখতে।
Why PM2?
আপনি যদি সরাসরি npm run start দিয়ে app চালান তবে তিনটি সমস্যা আছে:
সমস্যা ১ — Terminal বন্ধ হলে app বন্ধ: Terminal-এর সাথে app-এর connection আছে। Terminal বন্ধ করলে বা SSH disconnect হলে app মরে যায়।
সমস্যা ২ — Crash হলে কেউ restart করে না: কোনো error-এর কারণে app crash করলে সেটি বন্ধ হয়ে পড়ে থাকে — আপনি manually restart না করা পর্যন্ত।
সমস্যা ৩ — Server reboot হলে app উঠে না: VPS বা EC2 reboot (update, maintenance) হলে app আর চালু হয় না।
PM2 এই তিনটি সমস্যাই সমাধান করে। এটি আপনার app-কে একটি system service হিসেবে চালায়।
Install PM2
npm install -g pm2Installation verify করুন:
pm2 --versionBuild the App First
PM2 দিয়ে app চালু করার আগে অবশ্যই build করতে হবে।
npm run start কোনো code compile করে না — এটি শুধু .next folder-এ থাকা তৈরি করা production build চালায়। Build না করে pm2 start দিলে app চালু হবে না এবং PM2-তে errored status দেখাবে।
Error টি হবে: Could not find a production build in the '.next' directory
cd ~/myapp
npm install
npm run buildnpm install আপনার project-এর সব dependency নামিয়ে আনে, আর npm run build source code-কে optimized production bundle-এ রূপান্তর করে .next folder-এ রাখে।
Start the App
এবার PM2 দিয়ে app চালু করুন:
pm2 start npm --name "myapp" -- startCommand breakdown:
pm2 start— PM2-কে একটি নতুন process শুরু করতে বলছেnpm— process হিসেবেnpmচালাবে--name "myapp"— process-এর একটি নাম দিচ্ছে যাতে পরে সহজে manage করা যায়-- start— npm-কেstartscript চালাতে বলছে (অর্থাৎnpm run start)
App-এর status দেখুন:
pm2 liststatus column-এ online দেখলে app সফলভাবে চলছে। errored দেখলে বা restart count বাড়তে থাকলে pm2 logs myapp দিয়ে কারণ দেখুন।
Enable Auto-Restart on Reboot
Server reboot হলে PM2 যাতে নিজে থেকে app চালু করে তার জন্য দুটি কাজ করতে হবে:
প্রথমে current PM2 process list save করুন:
pm2 saveএরপর system startup script generate করুন:
pm2 startupএই command একটি দীর্ঘ command output করবে, দেখতে এরকম:
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/ubuntu/.nvm/versions/node/v20.x.x/bin pm2 startup systemd -u ubuntu --hp /home/ubuntuওই sudo env PATH=... দিয়ে শুরু হওয়া পুরো command-টি copy করে run করুন।
pm2 startup শুধু command print করে — নিজে execute করে না। আপনাকে সেই command manually run করতে হবে। অনেকে এই ধাপ মিস করেন।
উপরের output-এ লক্ষ্য করুন path-এ Node-এর version number লেখা আছে (v20.x.x)। ভবিষ্যতে nvm install --lts দিয়ে Node upgrade করলে এই path বদলে যাবে এবং পুরনো path আর থাকবে না।
ফলে server reboot হলে PM2 আপনার app চালু করতে পারবে না — কোনো error ছাড়াই site down হয়ে যাবে। Node upgrade করার পর সবসময় pm2 unstartup দিয়ে পুরনো setting মুছে আবার pm2 startup চালাবেন।
View Logs
App কি সঠিকভাবে চলছে? কোনো error আছে? Real-time log দেখুন:
pm2 logs myappশুধু error log দেখতে:
pm2 logs myapp --errLog বন্ধ করতে Ctrl+C চাপুন।
PM2-এর log ফাইলগুলো ~/.pm2/logs/ folder-এ থাকে। App-এর নাম অনুযায়ী দুটি ফাইল থাকে:
myapp-out.log— সাধারণ output (console.log)myapp-error.log— শুধু error messages
Essential Commands
pm2 list # সব running process দেখুন
pm2 logs myapp # real-time log দেখুন
pm2 logs myapp --lines 50 # শেষ ৫০ লাইন log দেখুন
pm2 restart myapp # app restart করুন
pm2 stop myapp # app বন্ধ করুন
pm2 start myapp # বন্ধ app চালু করুন
pm2 delete myapp # PM2 থেকে app সরিয়ে দিন
pm2 monit # real-time CPU ও memory দেখুনUpdate Workflow
নতুন code deploy করার সময় full workflow:
cd ~/myapp
git pull
npm install # নতুন package যোগ হলে
npm run build
pm2 restart myappnpm install কখন করবেন? যদি package.json-এ নতুন dependency যোগ হয়ে থাকে তবেই করতে হবে। শুধু code change হলে npm install skip করা যায়।
Real-World Note
Log Analysis হলো Security-র চোখ। pm2 logs দিয়ে আপনি দেখতে পাবেন কারা আপনার app-এ unusual request পাঠাচ্ছে। যেমন:
- বারবার
/admin,/wp-login.php,/phpmyadminrequest আসছে — এগুলো automated scanner-এর sign - অনেক বেশি 4xx error — কেউ আপনার API-তে brute-force করছে
- অস্বাভাবিক সময়ে (রাত ৩টায়) হঠাৎ traffic বাড়া
pm2 monit দিয়ে CPU ও memory একটু বেশি দেখলে সন্দেহ করুন — কোনো malicious process চলছে কিনা।
এই কারণেই log নিয়মিত দেখা একটি ভালো security practice।
Quick Check
-
pm2 listদেখাচ্ছে apponlinestatus-এ? -
pm2 startupcommand run করা হয়েছে? -
pm2 saveকরা হয়েছে? -
pm2 logs myappদেখালে কোনো critical error নেই?
পরবর্তী → First Deployment