Setup a Node.js Application sử dụng PM2

Nội dung bài viết

Video học lập trình mỗi ngày

PM2 là gì? Bạn đã biết và làm việc với pm2 trong ứng dụng nodejs? Cũng giống như nodemon, nhưng pm2 sở hữu những chức năng còn ghê gớm hơn bất kỳ open source nào mà tôi từng kinh qua. Với PM2 tôi có thể quản lý cluster trong nodejs cũng như biết được pm2 ngốn hết bao nhiêu RAM mỗi cluster.

PM2 là gì?

PM2 là một free open source, hiện đại, hiệu quả, cross-platform và quan trọng là nó free cho ứng dụng sử dụng Node.js với load balancer thích hợp. Nó hoạt động trên Linux, MacOS cũng như Windows. Nó hỗ trợ giám sát Application, quản lý hiệu quả các dịch vụ / quy trình vi mô, chạy các ứng dụng ở chế độ cluster, khởi động và tắt Application nodejs một cách gọn gàng.


Nếu bạn đã từng sử dụng nodemon, hay forever thì pm2 cũng sẽ tương tự nhưng khác chức năng rất nhiều.

PM2 giữ cho ứng dụng của bạn “alive forever” với tính năng tự động khởi động lại và có thể được kích hoạt để khởi động khi khởi động system, do đó cho phép cấu hình với một file hoặc kiến trúc có High Availability (HA).

Tại sao sử dụng pm2

Giả sử bạn có một micro service trong nodejs với file index.js chạy với port 8000, như code dưới đây.

const http = require('http');

const hostname = '192.168.43.31';
const port = 8000;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
  	res.setHeader('Content-Type', 'text/plain');
  	res.end('This is the Main App!\n');
});

server.listen(port, hostname, () => {
  	console.log(`Server running at http://${hostname}:${port}/`);
});

Đoạn code trên sẽ chạy nếu bạn sử dụng  node index.js , nhưng điều gì sẽ xảy ra nếu thỉnh thoảng devjs quên một thứ gì đó thì sẽ crashes app. Nếu như vậy, chúng ta sẽ phải restart bằng thủ công một cách bực tức. PM2 xuất hiện để làm thay bạn điều đó, pm2 sẽ tự động restart nếu có chuyện gì xảy ra với code của bạn.

Cách dùng PM2

Sử dụng npm để cài đặt trình quản lý quy trình cho Node.js bằng lệnh sau. Điều này sẽ cài đặt phiên bản mới nhất của pm2 trên hệ thống của bạn.

npm install pm2@latest -g

Sau khi install thì các thư mục sau sẽ tự động được tạo: 

$HOME/.pm2/logs // Lưu log 
$HOME/.pm2/pids // Bao gồm những ứng dụng pids
$HOME/.pm2/dump.pm2 // Khơi động cấu hình
$HOME/.pm2/pm2.log // pm2 log
$HOME/.pm2/pm2.pid // pm2 pid

Sau khi bạn làm điều đó, thì rất đơn giản để start node API của bạn. Điều này tương tự với command node index.js 

pm2 start index.js

Nhưng pm2 không dừng lại tại đó, nó có thể làm nhiều thứ hơn như:

pm2 start index.js --name  --watch

Trong đó:

  • --name  Bạn muốn đặt tên cho ứng dụng quản lý của bạn, nếu có nhiều port chạy trên server của bạn. 
  • --watch có giá trị true hoặc  false Điều này có nghĩa là, nếu bạn up code của bạn thì node sẽ tự hiểu là reload nếu value là true 
  • -i hoặc --instance: Số lượng phiên bản được bật, có thể được sử dụng để tạo cluster. Nếu -i 0 hoặc -i max, số phiên bản được xác định theo số lõi máy hiện tại. --ignore-watch: loại trừ các thư mục hoặc tệp khỏi giám sát, có thể là một tên tệp cụ thể hoặc thông thường. 
  • -o hoặc --output path: Đường dẫn của tệp nhật ký đầu ra tiêu chuẩn. 
  • -e hoặc --error path: Đường dẫn của tệp nhật ký xuất lỗi.

Câu lệnh sẽ hoàn chỉnh như sau: 

$ pm2 start app.js --watch -i max -n first_app

Quản lý Process với PM2

Quản lý trạng thái ứng dụng rất đơn giản, đây là các lệnh:

$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name

Liệt kê trạng thái của tất cả các ứng dụng được quản lý bởi PM2:

$ pm2 [list|ls|status]

Hiện thị log với realtime

$ pm2 logs

Setup cluster cho nodejs sử dụng PM2

Cluster mode cho phép Nodejs application (http(s)/tcp/udp server) sử dụng và mở rộng all CPUs một cách hợp lệ. Bạn không cần phải làm bất kỳ điều gì, kể cả sửa code của bạn. Điều này làm tăng đáng kể hiệu năng và độ tin cậy của các ứng dụng của bạn, tùy thuộc vào số lượng CPU có sẵn.

Nếu bạn chưa hiểu về vì sao cần cluster cho nodejs, thì có lẽ tôi sẽ làm một demo vì sao nodejs cần cluster

Để sử dụng cluster mode thì bạn chỉ cần thêm options -i

pm2 start server.js -i max

Trong đó max có nghĩa là PM2 sẽ tự động phát hiện số lượng CPU có sẵn và chạy càng nhiều process càng tốt.


Tự động khởi động lại khi bộ nhớ vượt quá giới hạn 

Chúng ta có thể sử dụng tham số --max-memory-restart để giới hạn giới hạn trên của việc sử dụng bộ nhớ và tự động khởi động lại khi vượt quá giới hạn trên của việc sử dụng bộ nhớ;

$ pm2 start app.js --max-memory-restart 100M

Tự khởi động nodejs khi server reboot

Trong linux, để thiết lập khởi động tự động, bạn chỉ cần thực hiện hai bước sau:

  • Chạy pm2 startup, nghĩa là, tạo tập lệnh khởi động của pm2-root trong thư mục /etc/init.d/ và tự động đặt pm2-root làm dịch vụ;
  • Chạy pm2 save, nó sẽ lưu ứng dụng hiện đang chạy trong pm2 dưới /root/.pm2/dump.pm2, khi máy khởi động lại, chạy pm2-root service script và đọc ứng dụng trong /root/.pm2/dump.pm2 Và bắt đầu


Lời kết

Trên đây là những điều cơ bản để sử dụng PM2 trong nodejs. Nếu điều đó chưa làm bạn hiểu sâu hơn hoặc còn nhiều điều thắc mắc thì bạn có thể ghé qua trang home của pm2.

 pm2 , hackernoon.com

Có thể bạn đã bị missing