Trong quá trình deploy ứng dụng nodejs cho một số bạn dev, mình thấy một số bạn hay sử dụng cách basic là chạy node app.js, hay “tiên tiến” hơn là sử dụng tmux để tạo session rồi chạy lệnh trên. Tuy nhiên làm như vậy sẽ gặp vấn đề:
+ Không dễ dàng quản lý, monitor được ứng dụng
+ Ứng dụng sẽ stop khi đóng session terminal
+ Ứng dụng nếu bị crash sẽ không tự khởi động lại
+ Khi server khởi động lại thì ứng dụng không tự chạy (mặc dù vẫn có thể đặt cronjob hoặc gì đó để start nó lên)
Phần mềm pm2 được sinh ra để giải quyết tất cả các vấn đề đó.
1. Cài đặt:
Vào trang http://pm2.keymetrics.io/ nó sẽ cho 1 lệnh rất ngắn để cài đặt:
npm install pm2 -g
Như vậy là cài đặt xong.
2. Chạy ứng dụng với pm2
Giả dụ bạn đang chạy nó theo cách cũ là gõ node app.js
Thì với pm2 bạn có thể chạy:
pm2 start app.js --name ungdung --watch
Với ungdung là tên do bạn đặt để dễ quản lý.
–watch là tùy chọn giúp cho pm2 sẽ theo dõi, nếu code của bạn có thay đổi, ví dụ update code mới, nó sẽ tự reload lại ứng dụng.
Một số lệnh quản lý:
pm2 list: liệt kê các app đang chạy
pm2 stop/start/delete ungdung: đọc là hiểu khỏi giải thích
pm2 monit: monitor ứng dụng đang chiếm bao nhiêu RAM, CPU, xem log, nói chung là nhìn tổng thể
pm2 logs ungdung: xem log của app có tên là ungdung
Giao diện monitor pm2 (Bấm vào ảnh để xem cho rõ)
3. Tự khởi động pm2 và các app khi server khởi động lại
Centos 6, Ubuntu14:
sudo env PATH=$PATH:/usr/local/bin pm2 startup -u deploy
Với deploy là user (của OS) đã chạy ứng dụng.
Centos 7, Ubuntu 16 (sử dụng systemd)
sudo env PATH=$PATH:/usr/local/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u deploy --hp /home/deploy
Hoặc bạn gõ pm2 startup, nó sẽ ra câu lệnh hướng dẫn.
Chạy ứng dụng với pm2 rồi thì chỉ cần gõ:
pm2 save
Lệnh này sẽ lưu lại các app đang chạy và tự khởi động chúng lên sau khi bạn reboot server.
4. Lưu ý
pm2 command chỉ list ra các ứng dụng đã chạy với user đó. Ví dụ chạy app1 ở user deploy thì sang user khác, pm2 list sẽ không thấy.
Chao Admin
Minh muon chay pm2 voi ung dung nodejs https://github.com/contentful/the-example-app.nodejs
# pm2 start:dev
// not work
Nhung no khong duoc. Bac co cach nao khac ?
Thanks & Regards
Bạn chạy bằng lệnh pm2 start ./bin/www nhé