Dùng PM2 để quản lý ứng dụng Node.js trên môi trường production

Giới thiệu

Trong quá trình develop một Node.js application, bạn có thể chạy app bằng cách: node app.js để test, nhưng khi đưa app lên môi trường production bạn không thể làm vậy được. App của bạn ngoài việc chạy lên, nó còn phải có khả năng tự khởi động lại khi xảy ra crash hoặc khởi động lại ngay khi hệ thống startup.
Bài này mình sẽ giới thiệu PM2, chạy ví dụ một Express app trên Ubuntu 14.04.

Tạo một Express app

package.json

helloworld.js

Bạn có thể clone app demo tại đây: https://github.com/havenvo/Express-Helloworld.git
Clone xong thì tiến hành cài đặt Node packages.

Xong chạy thử:

Vô thử localhost:3000 bạn sẽ nhận được Hello World! như thế này.

Open app in browser

Chạy demo với PM2

Không chạy kiểu truyền thống nữa, sang chạy với PM2 thử nào.

Cài PM2

Chạy helloworld bằng PM2

Run demo by Pm2

Xem thử bạn có bao nhiêu Node app

pm2 list

Xem log của app

pm2 logs
0 là id của app như bạn thấy trong kết quả của lệnh list.

Chạy thêm một instance của app trên port 3001

Hỏi ngu tí: Tại sao phải chạy nhiều hơn một instance?
Bạn có một server rất rồng và bạn không muốn nó chỉ chạy một app instance, bạn tạo ra nhiều instance rồi cân bằng tải chúng.

Xem trạng thái sử dụng tài nguyên của app

App monitor

Một mớ các lệnh hữu ích khác

Một số lệnh hữu ích khác như stop app, delete app, …
Tham khảo thêm ở đây nhé: https://github.com/Unitech/pm2#commands-overview

Tự khởi lại app lúc startup

Một chức năng vô cùng quan trọng của PM2 là tự chạy lại app trong list ngay khi khởi động lại hệ thống.
Một use case của chức năng này mà mình đã gặp là nếu các bạn dùng VPS giá rẻ để deploy app, lâu lâu vài ba tháng bạn sẽ nhận được email bảo trì hệ thống, VPS instance của bạn sẽ bị khởi động lại sau đó, lúc đó bạn bận gì đó, không thể chạy lại app được thì service của bạn bị downtime, ảnh huởng đến end user. Bạn đừng lo, bạn đã có PM2.

Cài đặt một chút để hệ thống đánh thức PM2

[user name]: Bạn bỏ tên user của bạn vào đây.
Kết quả của lệnh trên sẽ tương tự thế này:

Lưu PM2 app process

Save app processes
Mục đích của lệnh này là nói với PM2: Tao có bao nhiêu app đang chạy mày lưu hết lại cho tao, khi tao khởi động lại hệ thống thì mày chạy hết chúng nó lên.
Giờ thử khởi động lại hệ thống

Chờ một tí, bạn ssh vào hệ thống, gọi lệnh show list app, bạn sẽ thấy hai em helloworld

List app after restart
Tuyệt vời chưa! Hy vọng bài này sẽ giúp bạn quản lý một Node app trên môi trường production hiệu quả.

Thêm một tí

Còn một thằng nữa cũng có chức năng tương tự PM2, đó là Forever, bạn có thể tìm hiều thêm tại đây https://github.com/foreverjs/forever
Happy coding!

Spread the love
  • 31
  •  
  •  
  •  
  •  
    31
    Shares

Leave a Reply

Be the First to Comment!

avatar
  Subscribe  
Notify of