PM2 là một mã nguồn mở miễn phí dùng cho Node.js (Nodejs), dùng để quản lý các tiến trình trong ứng dụng Nodejs của bạn. PM2 hoạt động trên cả Linux, MacOS và Windows. PM2 hỗ trợ giao diện theo dõi các tiến trình của ứng dụng, quản lý hiệu quả các micro-services/processes.
PM2 giúp cho ứng dụng của bạn “luôn chạy“, với tính năng auto start và có thể được kích hoạt khởi động cùng hệ thống (system boot), do đó cho phép các cấu hình hoặc kiến trúc High Availability (HA).
Đáng chú ý, PM2 cho phép bạn chạy các ứng dụng của mình ở cluster mode mà không thực hiện bất kỳ thay đổi nào trong code (điều này cũng phụ thuộc vào số lượng lõi CPU trên máy chủ của bạn). Nó cũng cho phép bạn dễ dàng quản lý nhật ký ứng dụng (app logs), v.v.
Ngoài ra, PM2 cũng hỗ trợ các frameworks Nodejs như Express, Adonis Js, Sails, Hapi… mà không cần có bất kỳ thay đổi nào về code. PM2 đang được sử dụng bởi các công ty, tập đoàn lớn như IBM, Microsoft, PayPal, v.v.
Trong bài viết này, tôi sẽ hướng dẫn cách cài đặt và sử dụng PM2 để chạy (deploy) các ứng dụng Nodejs trên môi trường Production Server. Tôi sẽ tạo một ứng dụng để minh họa một số tính năng cơ bản của PM2 để bạn dễ dàng bắt đầu với nó.
Bước 1: Cài đặt Nodejs và NPM trên Linux
Trước khi bắt đầu chúng ta hãy chạy cập nhật hệ thống và cài đặt các gói cần thiết trước:
1 2 3 4 5 6 7 |
---------- CentOS/RHEL and Fedora ---------- # yum update -y # yum install gcc-c++ make -y ---------- Debian/Ubuntu ---------- $ apt-get update -y $ apt-get install gcc-c++ make -y |
Để cài đặt Node.js và NPM bạn cần tải về gói cài đặt sau đó chạy lệnh cài đặt theo hướng dẫn bên dưới. Mình thấy bản Node.js v16.x chạy ổn định nên mình hướng dẫn cài bản này nhé.
Đối với Debian/Ubuntu
1 2 |
$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - $ sudo apt-get install -y nodejs |
Đối với CentOS/RHEL và Fedora
1 2 |
# curl -sL https://rpm.nodesource.com/setup_16.x | bash - # sudo yum install -y nodejs |
Bước 2: Tạo ứng dụng Nodejs
Bây giờ, chúng ta sẽ tạo ứng dụng Nodejs chạy thử (giả sử cả phía client và admin đều sử dụng chung batabase), các micro-services sẽ chạy trên cổng 3000 và 3001.
1 2 3 4 |
$ sudo mkdir -p /var/www/html/app $ sudo mkdir -p /var/www/html/adminside $ sudo vim /var/www/html/app/server.js $ sudo vim /var/www/html/adminside/server.js |
Tiếp theo, hãy dán đoạn mã sau vào file /var/www/html/app/server.js (hãy thay địa chỉ IP 192.168.43.31 thành địa chỉ IP máy chủ của bạn)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const http = require('http'); const hostname = '192.168.43.31'; const port = 3000; 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}/`); }); |
Và dán đoạn mã sau vào file /var/www/html/adminside/server.js (hãy thay địa chỉ IP 192.168.43.31 thành địa chỉ IP máy chủ của bạn)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const http = require('http'); const hostname = '192.168.43.31'; const port = 3001; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('This is the Admin Side!\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); |
Lưu lại và thoát.
Bước 3: Cài đặt PM2 Product Process Manager trên Linux
Cài đặt phiên bản mới nhất của PM2 bằng cú pháp sau:
1 |
$ sudo npm i -g pm2 |
Với môi trường Development thông thường bạn sẽ chạy ứng dụng bằng cách này:
1 2 |
$ sudo node /var/www/html/app/server.js $ sudo node /var/www/html/adminside/server.js |
Với môi trường Production bạn đã cài PM2 thì bạn sẽ chạy ứng dụng bằng cách này:
1 2 |
$ sudo pm2 start /var/www/html/app/server.js $ sudo pm2 start /var/www/html/adminside/server.js |
(Có thể bạn sẽ không cần sử dụng lệnh “sudo” nếu ứng dụng của bạn được lưu trữ ở vị trí mà người dùng bình thường có quyền read và write).
Bước 4: Sử dụng và Quản lý PM2 trên Linux
Để chạy ứng dụng ở cluster mode thì sử dụng -i để chỉ định số lượng process:
1 2 |
$ sudo pm2 start /var/www/html/app/server.js -i 4 $ sudo pm2 scale 0 8 #scale cluster app to 8 processes |
Để xem danh sách toàn bộ tiến trình (process/mircro-services) bạn sử dụng lệnh sau:
1 |
$ sudo pm2 list |
Để theo dõi nhật ký, số liệu tùy chỉnh, xử lý thông tin từ tất cả các quy trình bằng cách chạy lệnh sau:
1 |
$ sudo pm2 monit |
Để xem chi tiết của một tiến trình Node như được hiển thị, sử dụng ID hoặc name
1 |
$ sudo pm2 show 0 |
Sau đây là danh sách một số lệnh quản lý tiến trình phổ biến mà bạn nên lưu ý:
1 2 3 4 5 6 |
$ sudo pm2 stop all #stop all apps $ sudo pm2 stop 0 #stop process with ID 0 $ sudo pm2 restart all #restart all apps $ sudo pm2 reset 0 #reset all counters $ sudo pm2 delete all #kill and remove all apps $ sudo pm2 delete 1 #kill and delete app with ID 1 |
Để quản lý nhật ký ứng dụng, hãy sử dụng các lệnh sau:
1 2 3 4 |
$ sudo pm2 logs #view logs for all processes $ sudo pm2 logs 1 #view logs for app 1 $ sudo pm2 logs --json #view logs for all processes in JSON format $ sudo pm2 flush #flush all logs |
1 2 3 4 5 |
$ sudo pm2 startup #enable PM2 to start at system boot $ sudo pm2 startup systemd #or explicitly specify systemd as startup system $ sudo pm2 save #save current process list on reboot $ sudo pm2 unstartup #disable PM2 from starting at system boot $ sudo pm2 update #update PM2 package |
Bước 5: Truy cập Node Apps từ trình duyệt web
Mặc định bạn sẽ truy cập được luôn, nhưng đôi khi bạn cần mở các cổng sau trên tường lửa hệ thống của mình, để cho phép máy khách kết nối với các ứng dụng như được hiển thị.
1 2 3 4 5 6 7 8 9 |
-------- Debian and Ubuntu -------- $ sudo ufw allow 3000/tcp $ sudo ufw allow 3001/tcp $ sudo ufw reload -------- RHEL and CentOS -------- # firewall-cmd --permanent --add-port=3000/tcp # firewall-cmd --permanent --add-port=3001/tcp # firewall-cmd --reload |
Sau đó, truy cập ứng dụng của bạn từ trình duyệt web bằng các URL sau:
1 2 |
http://198.168.43.31:3000 http://198.168.43.31:3001 |
Cuối cùng nhưng không kém phần quan trọng, PM2 là một hệ thống mô-đun tích hợp, đơn giản để mở rộng các khả năng cốt lõi của nó, một số mô-đun bao gồm pm2-logrotate, pm2-webshell, pm2-server-monit, v.v. – bạn cũng có thể tạo và sử dụng mô-đun riêng.
Để biết thêm thông tin hãy truy cập kho lưu trữ GitHub PM2.
Trong bài viết này, tôi đã hướng dẫn cách cài đặt và sử dụng PM2 để quản lý các ứng dụng Nodejs trong Linux. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại ở bình luận bên dưới nhé.