ตั้งค่า NodeJS ให้ทำงานอัตโนมัติเมื่อ Boot Windows หรือ linux

การสั่งให้ nodejs ทำงานตอนที่ boot windows/linux ทำได้ด้วยกันหลายวิธี แต่ที่รู้สึกว่ามัน work สุดเท่าที่ได้ลองมาคือ start ผ่าน PM2 เครื่องมือสำหรับจัดการ process เพื่อให้โปรแกรมที่เราพัฒนาขึ้นมาด้วย node.js 

Windows Installation

ติดตั้ง Nodejs ให้เรียบร้อย จากนั้นเปิด cmd หรือ PowerShell ขึ้นมา พิมพ์คำสั่ง

npm install --global --production windows-build-tools

จากนั้นติดตั้ง pm2 และ pm2-windows-startup [Ref : https://www.npmjs.com/package/pm2-windows-startup]

npm install -g pm2 pm2-windows-startup
pm2-startup install

ไปยัง path ของ nodejs project เพื่อสั่งให้มันทำงาน เช่น

pm2 start src/index.js --name nodejs-demo

Saving current process list !

Once you started all the applications you want to manage, you have to save the list you wanna respawn at machine reboot with

ตรงนี้คือคำสั่งที่จะทำให้ nodejs app ทำงานอัตโตมัติ เมื่อเรา reboot เครื่อง โดยการบันทึก process list ที่เรา start เอาไว้แล้ว เพื่อให้มันจำว่าต้องเปิดอะไรบ้างเมื่อเริ่มต้นระบบ

pm2 save

เท่านี้ก็เรียบร้อย ลองทดสอบ rebook เครื่องและตรวจสอบสถานะว่า nodejs ของเราทำงานอยู่หรือไม่โดยพิมพ์คำสั่ง

pm2 list

Installation Linux

ในตัวอย่างนี้ใช้ Pi Raspbian ติดตั้ง nodejs ให้เรียบร้อยแล้ว ติดตั้ง pm2 เลยไม่ต้องมี windows-build-tools และ pm2-windows-startup แต่เราจะใช้คำสั่ง startup แทน

npm install -g pm2

ไปยัง path ของ nodejs project เพื่อสั่งให้มันทำงาน เช่น

pm2 start src/index.js --name nodejs-demo

ใช้คำสั่ง pm startup [Ref: https://pm2.keymetrics.io/docs/usage/startup/]

pm2 startup

pm2 จะสร้างคำสั่งมาให้ชุดหนึ่ง

pi@raspberrypi:~ $ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/pi/.nvm/versions/node/v10.16.3/bin /home/pi/.nvm/versions/node/v10.16.3/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi

จากนั้นคัดลอกเพื่อ run อีกครั้ง

sudo env PATH=$PATH:/home/pi/.nvm/versions/node/v10.16.3/bin /home/pi/.nvm/versions/node/v10.16.3/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi

สุดท้ายก็ save เป็นอันเรียบร้อย แต่ถ้า run คำสั่ง startup แล้ว pm2 จะสร้าง script และ save ให้อัตโนมัติ

pm2 save

reboot และลองทดสอบสถานะด้วย pm2 list

สรุป

pm2 ไม่ใช่แค่ตอบโจทย์ความขี้เกียจล้วน ๆ แต่มันยังช่วยจัดการเรื่อง thread ได้ด้วย เพื่อให้ app เราทำงานได้อย่างมีประสิทธิภาพมากขึ้น ไหนจะ watch ได้เช่นเดียวกับ nodemon ซึ่งช่วยอำนวยความสะดวกในตอน dev มาก ๆ อีกทั้งเรายัง restart service ด้วย id ก็ได้ หรือจาก alias ก็ได้ด้วย ไปดู document เต็มๆ ที่ https://pm2.keymetrics.io/