Tổng quan về PM2

Mình vừa trở về sau khi tham gia chuyển đổi hệ thống cho một dự án. Ban đầu dự án này xây dựng dựa trên nền tảng duy nhất là PHP 5.5 build trên một VPS tại Singapore. Là thành viên trong bất kỳ dự án nào, mình luôn mong muốn đem lại những trải nghiệm tốt nhất tới người sử dụng, một khi họ truy cập vào website. Và các thành viên trong team đều ý thức được rằng đó là một trong những yếu tố quan trọng ảnh hưởng tới tỉ lệ giữ chân người dùng. Do đó hệ thống sẽ phải có những thay đổi, đặc biệt là tốc độ tải trang phải nhanh và ổn định trong khi dự án sẽ ngày một phình to hơn. Đó là lý do Nodejs được lựa chọn và áp dụng.

Tại sao sử dụng PM2?

Khi mới cài đặt, chưa có một tool nào được tích hợp để phục vụ cho deployment cho nodejs app. Và đó thực sự là vấn đề cần được giải quyết ngay. Khi bạn chạy một Nodejs app, tức là đang tạo ra một process mới (tiến trình mới) trên server. Chúng ta cần một trình quản lý process với nhiều yêu cầu được đặt ra:

  • Ổn định, tin cậy để giữ server luôn sống.
  • Có API trực quan, dễ sử dụng và có thể thực hiện được qua command line.
  • Có các bản update thường xuyên. Chứu không phải là một process manager cũ kỹ, đã lâu không người sử dụng.
  • Auto start các processes khi có reboot system.
  • Có các cài đặt nâng cao cho từng process thông qua các environment variables (biến mội trường). Và PM2 là công cụ đã được chúng tôi sử dụng để quản lý ứng dụng nodejs cho dự án vì nó đáp ứng được những gì mà chúng ta đang cần.

PM2 là gì?

PM2 là một trình quản lý các process (tiến trình) dành cho các ứng dụng Nodejs. Nó được viết bằng chính Nodejs và Shell. PM2 cũng được tích hợp bộ cân bằng tải (load balancer). Bạn có thể giữ cho các process của server còn sống và reload/restart với zero downtime. Và như bạn biết, zero downtime là cái chúng tôi đang rất cần lúc này. 😅

Chúng ta sử dụng PM2 qua các dòng lệnh trên command line đồng thời có thể quản lý bằng giao diện người dùng thông qua Key Metrics. Giao diện quản lý trên nên web giống như trong hình sau: Keymetrics Các thông số hiển thị rất trực quan giúp cho việc quản lý tốt được hơn, hay có thể reload/restart mà không cần phải connect SSH tới server rồi dùng command line.

Tính năng chính

Bây giờ, hãy cũng mình điểm qua các tính năng chính của PM2:

  • Quản lý các process, bao gồm tự động restart app khi bị chết hoặc reboot hệ thống.
  • Giám sát ứng dụng
  • Khai báo cấu hình qua JSON file
  • Quản lý log
  • Cluster mode
  • Chạy các kịch bản lệnh cho hệ thống
  • Seamless updates
  • Cho phép tích hợp các module cho hệ thống

Cài đặt PM2

PM2 được cài đặt thông qua NPM (Nodejs Package Management) bởi nó được viết bằng Javascript + Shell mà. 😄 Do đó system requirement đầu tiên là phải cài đặt NPM trước. Và tất nhiên là bạn phải cài Nodejs trước NPM. Nếu bạn chưa có Nodejs, NPM thì hãy xem qua bài viết này rồi quay trở lại đây để tiếp tục. Command cài đặt PM2 với NPM:

npm install -g pm2

Kiểm tra phiên bản PM2 sau khi cài đặt hoàn tất:

pm2 -v
2.9.1

Hướng dẫn sử dụng/tính năng:

pm2 -h

Usage: pm2 [cmd] app

  Options: ....

Basic Examples:

    Start an app using all CPUs available + set a name :
    $ pm2 start app.js -i 0 --name "api"

    Restart the previous app launched, by name :
    $ pm2 restart api

    Stop the app :
    $ pm2 stop api

    Restart the app that is stopped :
    $ pm2 restart api

    Remove the app from the process list :
    $ pm2 delete api

    Kill daemon pm2 :
    

    Update pm2 :
    $ npm install [email protected] -g ; pm2 update

    More examples in https://github.com/Unitech/pm2#usagefeatures

  Deployment help:

    $ pm2 deploy help

Cách sử dụng

Hầu hết các câu lệnh của PM2 đều dùng chung một cú pháp:

 pm2 [cmd] app

Với hai tham số, trong đó:

  • cmd: Tên commad của PM2 muốn thực hiện: start, restart, stop...
  • app: Tên ứng dụng hoặc tên file config của ứng dụng đó. Ví dụ cơ bản:
Chạy một app được cấu hình từ file app.js (hoặc có thể là file json) và được đặt tên là `"api"`:
$ pm2 start app.js --name "api"

Khởi động lại app thông qua tên:
$ pm2 restart "api"

Xóa pocess của app qua tên:
$ pm2 delete "api"

Kill các app đang chạy bởi pm2:
$ pm2 kill

Hay deploy:
$ pm2 deploy

Trên đây là bài viết tổng quan về PM2 và cách sử dụng cơ bản nhất của nó. Là điều kiện cần, trước khi bạn muốn hiểu nhiều hơn về nó.