Quản lý ứng dụng Node.js với PM2

5 min read

Vấn đề

Node.js là một môi trường JavaScript phía máy chủ có thể được sử dụng để tạo ra các ứng dụng hiệu suất cao, thời gian thực cho web và các thiết bị di động. Quản lý các ứng dụng Node có thể yêu cầu các cân nhắc bổ sung ngoài những gì cần thiết khi chạy các máy chủ web tiêu chuẩn như Apache hoặc Nginx.

PM2 là một trình quản lý ứng dụng Node cho môi trường sản xuất với một số tính năng hữu ích như quản lý ứng dụng, khởi động lại tự động, và quản lý logs. Trong hướng dẫn này, chúng ta sẽ cài đặt PM2 và sử dụng nó để quản lý ứng dụng Node.js.

Yêu cầu

  • Một hệ thống máy chủ (Windows, Linux or MacOs) với Node.js và NPM cài đặt.
  • Đăng nhập vào hệ thống với một tài khoản có quyền sudo hoặc root.

Quản lý ứng dụng Node.js với PM2

Cài đặt PM2

Để cài đặt PM2, chạy lệnh sau:

npm install pm2 -g

Khởi động ứng dụng Node.js với PM2

Khỏi động ứng dụng Node.js với PM2, sử dụng lệnh sau:

pm2 start app.js

Ở đây, app.js là tên của file ứng dụng Node.js của bạn.

Ngoài ra, bạn cũng có thể thêm một số cờ để tùy chỉnh cách PM2 khởi động ứng dụng của bạn.

  • --name <app_name> để đặt tên cho ứng dụng.
  • --watch để theo dõi thay đổi trong ứng dụng và khởi động lại nó khi cần.
  • --max-memory-restart <100MB> để khởi động lại ứng dụng khi nó sử dụng quá nhiều bộ nhớ.
  • --log <log_file> để chỉ định nơi lưu trữ logs.
  • -- arg1 arg2 arg3 ... để truyền các đối số cho ứng dụng.
  • --restart-delay <2000ms> để khởi động lại ứng dụng sau một khoảng thời gian nhất định.
  • --time để hiển thị thời gian trong logs.
  • --no-autorestart để không khởi động lại ứng dụng khi nó dừng.
  • --cron để chạy ứng dụng theo một lịch trình nhất định.
  • --no-daemon để chạy ứng dụng trong chế độ không daemon.

Bạn có thể tham khảo thêm về các cờ khác tại đây.

Quản lý ứng dụng với PM2

Bạn có thể quản lý ứng dụng Node.js của mình với PM2 bằng cách sử dụng các lệnh sau:

  • pm2 restart <app_name> để khởi động lại ứng dụng.
  • pm2 stop <app_name> để dừng ứng dụng.
  • pm2 delete <app_name> để xóa ứng dụng.
  • pm2 reload <app_name> để tải lại ứng dụng.
  • pm2 list để liệt kê tất cả các ứng dụng đang chạy.
  • pm2 logs để xem logs của tất cả các ứng dụng.
  • pm2 monit để xem thông tin về tất cả các ứng dụng.

Thiết lập Dashboard PM2

PM2 cung cấp một dashboard web để quản lý ứng dụng của bạn. Để thiết lập dashboard, chạy lệnh sau:

pm2 plus

Câu lệnh này sẽ cần bạn phải đăng nhập hoặc đăng ký một tài khoản PM2. Sau khi đăng nhập, bạn sẽ được chuyển hướng đến dashboard PM2. Từ đó, bạn có thể quản lý ứng dụng của mình, xem logs, và theo dõi hiệu suất của ứng dụng.

Thiết lập PM2 khởi động cùng hệ thống

Để PM2 khởi động cùng hệ thống, chạy lệnh sau:

pm2 startup

Nếu bạn muốn dừng PM2 khởi động cùng hệ thống, chạy lệnh sau:

pm2 unstartup systemd

Thiết lập PM2 khởi động lại ứng dụng khi khởi động lại hệ thống

Để PM2 khởi động lại ứng dụng khi khởi động lại hệ thống, chạy lệnh sau:

pm2 save

Để khôi phục lại ứng dụng khi khởi động lại hệ thống, chạy lệnh sau:

pm2 resurrect

Ứng dụng và bảo mật

Ngăn chặn Downtime với Cluster mode

Ứng dụng của bạn sẽ khởi động lại nhiều lần trong suốt vòng đời của chúng. Một lần khởi động lại có thể gây ra thời gian ngừng hoạt động cho đến khi ứng dụng được khởi động lại.

Bạn có thể sử dụng tính năng chế độ cluster trong PM2 để tránh thời gian ngừng hoạt động.

Chế độ cluster chạy nhiều phiên bản của ứng dụng của bạn. Khi cần khởi động lại, chỉ một phiên bản tại một thời điểm bị dừng và khởi động lại, trong khi các phiên bản khác tiếp tục phục vụ ứng dụng của bạn.

Để chạy ứng dụng của bạn trong chế độ cluster, sử dụng lệnh sau:

pm2 start app.js -i 3

-i 3 ở đây chỉ định rằng ứng dụng của bạn sẽ chạy trong chế độ cluster với 3 phiên bản.

Để scale ứng dụng của bạn, cần chỉ định số lượng phiên bản bạn muốn chạy qua lệnh sau:

pm2 scale app 4

Loại bỏ các yêu cầu thất bại với Graceful Shutdown

Graceful Shutdown giúp ứng dụng của bạn xử lý các yêu cầu cuối cùng trước khi dừng. Điều này giúp tránh việc mất dữ liệu hoặc các yêu cầu thất bại.
Một Graceful Shutdown trong PM2 thực hiện theo các bước sau:

  • Trước khi dừng, PM2 sẽ gửi một tín hiệu SIGINT đến ứng dụng của bạn.
  • Ứng dụng của bạn sẽ xử lý tín hiệu này và kết thúc các yêu cầu cuối cùng.
  • Sau khi hoàn thành, ứng dụng sẽ dừng lại.

Bạn có thể thêm đoạn mã sau để kích hoạt Graceful Shutdown trong ứng dụng mà bạn đã tạo. Đoạn mã này sẽ chặn tín hiệu SIGINT, ghi một thông báo vào console, đóng máy chủ HTTP và thoát khỏi quá trình

process.on("SIGINT", function () {
  // sigint signal received, log a message to the console
  console.log("Shutdown signal intercepted");
  // close the http server
  server.close();
  // exit the process
  process.exit();
});

Kết luận

Trong hướng dẫn này, chúng ta đã cài đặt PM2 và sử dụng nó để quản lý ứng dụng Node.js. PM2 cung cấp một số tính năng hữu ích như khởi động lại tự động, quản lý logs, và chế độ cluster để giúp bạn quản lý ứng dụng của mình một cách hiệu quả. Bạn cũng có thể sử dụng dashboard PM2 để quản lý ứng dụng của mình một cách dễ dàng. Nếu bạn muốn tìm hiểu thêm về PM2, bạn có thể xem tài liệu chính thức của PM2 tại đây.

Tài liệu tham khảo

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

Your email address will not be published. Required fields are marked *