Skip to main content
0
Software Development

Deploy ไวแบบติดจรวดด้วย PM2

หลายคนที่เคย deploy ระบบอาจเคยเจอปัญหาเซิร์ฟล่ม แอปหยุดทำงานโดยไม่สามารถ restart ได้เอง พอจะ debug ก็เจอกับการจัดการ logs ที่ไม่เป็นระเบียบทำให้หาสาเหตุยาก หรือบางครั้งก็รู้สึกว่าเครื่องทำงานไม่เต็มที่ เพราะโปรแกรมรันอยู่แค่ single thread ซึ่งแปลว่าเราไม่ได้ใช้ทรัพยากรทั้งหมดที่มี ยิ่งไปกว่านั้น เมื่อถึงเวลาต้องอัพเดทโค้ดใหม่ ก็กลายเป็นว่าต้องหยุดระบบ (downtime) โดยไม่จำเป็น หรืออาจเจอปัญหาที่ไม่รู้ตัวเพราะขาดการ monitor performance อย่างเหมาะสม

ในบทความนี้ เราจะพามาทำความรู้จักกับ PM2 เครื่องมือเด็ดที่จะช่วยให้การ deploy แอปของคุณกลายเป็นเรื่องง่ายและเร็วขึ้นในทุกขั้นตอน

รู้จักกับ PM2

PM2 คือ Advanced Production Process Manager ที่ทำหน้าที่เป็น daemon process manager ช่วยจัดการและทำให้แอปพลิเคชันของคุณสามารถทำงานได้ตลอด 24/7 ตามที่ในเว็บของ PM2 ได้แนะนำตัวเองเอาไว้

ฟีเจอร์ที่น่าสนใจ

  • Cluster Mode ทำงานแบบ multiple processes โดยใช้ทุก CPU cores ที่มี ช่วยเพิ่มประสิทธิภาพและความเสถียรของแอพ
  • Hot Reload & Zero Downtime อัพเดทแอพโดยไม่มี downtime ผู้ใช้สามารถใช้งานได้ต่อเนื่องแม้ขณะ deploy โค้ดใหม่
  • Auto Restart & Max Memory รีสตาร์ทอัตโนมัติเมื่อแอพล่มหรือใช้ memory เกินที่กำหนด ช่วยให้แอพทำงานได้ตลอด 24/7
  • Built-in Load Balancer กระจาย load ระหว่าง processes อัตโนมัติ ทำให้รองรับผู้ใช้จำนวนมากได้อย่างมีประสิทธิภาพ
  • Real-time Monitoring ดู metrics สำคัญแบบ real-time เช่น CPU, Memory, HTTP requests ช่วยให้จัดการปัญหาได้ทันท่วงที

PM2 ใช้กับอะไรได้บ้าง

ตัว PM2 เองทำงานเป็น Process Manager เพราะฉะนั้นมันสามารถเอาไปรันได้หลากหลายมาก แค่จากในเว็บที่มีตัวอย่างคำสั่งก็ได้ตั้งแต่ Node, Bash Script, Python ไปจนถึง Binary File ตามคำสั่งตัวอย่างนี้เลย

$ pm2 start app.js
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520

ลองใช้แบบไว ๆ

สมมติว่าเรามีโค้ด app.js หน้าตาแบบนี้

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.send("Hello");
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});
JavaScript

ติดตั้ง PM2 ก็ทำผ่าน npm ได้เลย

npm install -g pm2@latest
Bash

สั่งรัน

pm2 start app.js
Bash

ก็จะโชว์ว่าตอนนี้รัน app.js ของเราเรียบร้อย

เรียก API ได้เหมือนรันด้วย node แบบปกติเลย

ใช้แทน Docker ได้รึเปล่า ?

สำหรับการ deploy แอปพลิเคชันใน production environment หลายคนอาจสงสัยว่า PM2 จะสามารถใช้แทน Docker ได้หรือไม่ ต้องเข้าใจว่า PM2 และ Docker นั้นมีบทบาทที่ต่างกันในภาพรวมของการจัดการแอปพลิเคชัน แม้ว่า PM2 จะจัดการเรื่องการ deploy และ monitor application ได้ดี โดยเฉพาะในส่วนของการจัดการ process การทำ load balancing และการ restart แอปอัตโนมัติ แต่ Docker นั้นถูกออกแบบมาเพื่อทำหน้าที่เป็น containerization solution ซึ่งมีจุดประสงค์หลักในการแยก environment ระหว่างแอปพลิเคชันและระบบปฏิบัติการ

Docker จะเหมาะสำหรับการจัดการ dependencies และ environment isolation อย่างสมบูรณ์ ทำให้แอปพลิเคชันทำงานได้อย่างอิสระโดยไม่ต้องกังวลเรื่องการชนกันของ dependencies ในหลายกรณี การใช้ Docker ร่วมกับ PM2 ก็เป็นตัวเลือกนึงที่สามารถนำมาใช้ได้ โดย PM2 ทำหน้าที่จัดการ process ใน container ของ Docker ช่วยเพิ่มประสิทธิภาพและความยืดหยุ่นให้กับระบบ

สรุป

PM2 เป็นเครื่องมือที่ทรงพลังสำหรับการ deploy Node.js applications ช่วยให้การจัดการ process ทำได้ง่าย มี features ครบครันสำหรับ production และช่วยให้แอปพลิเคชันทำงานได้อย่างมีประสิทธิภาพ เหมาะสำหรับทั้งโปรเจกต์ขนาดเล็กและขนาดใหญ่

Develeper

Author Develeper

More posts by Develeper
Close Menu

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า