การสั่งให้ 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/