Bạn có bao giờ deploy Node.js app lên server rồi… đi ngủ, sáng dậy thấy app die không? Hoặc server restart mà app không tự động chạy lại? Nếu có, thì PM2 chính là thứ bạn cần!
PM2 là một process manager cực kỳ phổ biến cho Node.js, giúp bạn chạy app như một service thực thụ - tự động restart khi crash, tự động chạy lại sau khi server reboot, và còn nhiều tính năng hay ho khác nữa.
Hôm nay mình sẽ hướng dẫn các bạn sử dụng PM2 từ cơ bản đến nâng cao. Đi thôi!
Ảnh minh họa: Quản lý processes như một pro với PM2
Table of contents
Open Table of contents
PM2 là gì và tại sao bạn cần nó?
PM2 (Process Manager 2) là một production process manager cho Node.js applications. Nói đơn giản, nó giúp bạn:
- ✅ Chạy app như một service - Không cần mở terminal và giữ nó chạy
- ✅ Auto-restart khi crash - App bị lỗi? PM2 tự động khởi động lại
- ✅ Tự động chạy sau reboot - Server restart? App vẫn tự động chạy lại
- ✅ Load balancing - Chạy nhiều instances để tận dụng multi-core CPU
- ✅ Monitoring - Xem CPU, memory usage real-time
- ✅ Log management - Quản lý logs dễ dàng
Nghe có vẻ ngon phải không? Bắt đầu thôi!
Bước 1: Cài đặt PM2
Cài PM2 global bằng npm (hoặc yarn nếu bạn thích):
npm install -g pm2
Hoặc với yarn:
yarn global add pm2
Kiểm tra xem đã cài thành công chưa:
pm2 --version
Nếu thấy version hiện ra là OK rồi! 🎉
Cài đặt PM2 chỉ với một dòng lệnh đơn giản
Bước 2: Chạy app với PM2
Cách 1: Chạy trực tiếp file Node.js
Nếu bạn có file app.js hoặc index.js:
pm2 start app.js --name "my-app"
Cách 2: Chạy với npm script (Recommended)
Nếu bạn thường chạy app bằng npm start:
pm2 start npm --name "my-app" -- start
Giải thích một chút:
npm- Chạy npm command--name "my-app"- Đặt tên cho process (để dễ quản lý)-- start- Arguments truyền cho npm (tức lànpm start)
Cách 3: Chạy với ecosystem file (Pro level)
Tạo file ecosystem.config.js:
module.exports = {
apps: [{
name: 'my-app',
script: 'npm',
args: 'start',
instances: 2, // Chạy 2 instances
exec_mode: 'cluster', // Cluster mode để load balancing
env: {
NODE_ENV: 'production',
PORT: 3000
},
error_file: './logs/err.log',
out_file: './logs/out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true,
autorestart: true,
watch: false, // Không watch files trong production
max_memory_restart: '1G' // Restart nếu dùng quá 1GB RAM
}]
};
Sau đó chạy:
pm2 start ecosystem.config.js
Cách này pro hơn vì bạn có thể config mọi thứ trong file, dễ quản lý và version control!
Bước 3: Tự động khởi động sau khi reboot
Đây là phần quan trọng! Nếu không làm bước này, khi server restart thì app của bạn sẽ không tự động chạy lại.
3.1 Tạo startup script
pm2 startup
PM2 sẽ in ra một dòng lệnh, copy và chạy nó. Ví dụ:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u your-username --hp /home/your-username
3.2 Save danh sách processes
Sau khi đã start tất cả apps, chạy:
pm2 save
Lệnh này sẽ lưu lại danh sách các processes đang chạy. Khi server restart, PM2 sẽ tự động chạy lại các processes này.
Lưu ý: Mỗi khi bạn thêm/xóa app, nhớ chạy pm2 save lại nhé!
Monitoring app của bạn 24/7 với PM2
Bước 4: Quản lý app
Xem danh sách apps đang chạy
pm2 list
# hoặc
pm2 ls
Bạn sẽ thấy bảng đẹp đẽ với thông tin về tất cả apps:
- ID
- Name
- Status (online/stopped/errored)
- CPU usage
- Memory usage
- Uptime
Xem thông tin chi tiết
pm2 show my-app
Lệnh này hiển thị mọi thông tin về app: path, arguments, environment variables, logs location, v.v.
Restart app
pm2 restart my-app
Hoặc restart tất cả:
pm2 restart all
Stop app
pm2 stop my-app
Delete app khỏi PM2
pm2 delete my-app
Reload app (zero-downtime)
pm2 reload my-app
reload khác với restart ở chỗ nó sẽ reload từng instance một, đảm bảo luôn có ít nhất một instance đang chạy. Rất hữu ích cho production!
Bước 5: Xem logs
Xem logs real-time
pm2 logs
Xem logs của một app cụ thể:
pm2 logs my-app
Xem chỉ error logs:
pm2 logs my-app --err
Xóa logs cũ
pm2 flush
Lệnh này xóa tất cả logs. Hữu ích khi logs quá nhiều làm đầy ổ cứng.
Theo dõi logs real-time để debug nhanh chóng
Bước 6: Monitoring
Monitoring trong terminal
pm2 monit
Lệnh này mở một dashboard real-time trong terminal, hiển thị:
- CPU usage
- Memory usage
- Logs stream
Rất tiện để theo dõi app!
Web-based monitoring (PM2 Plus)
PM2 có service monitoring trên web (trước đây gọi là Keymetrics):
pm2 link [secret-key] [public-key]
Bạn có thể đăng ký miễn phí tại pm2.io để có dashboard đẹp mắt trên web.
Tips và tricks từ kinh nghiệm thực tế
1. Sử dụng cluster mode để tận dụng multi-core
pm2 start app.js -i max
-i max sẽ tạo số instances bằng số CPU cores. Ví dụ server có 4 cores thì sẽ chạy 4 instances.
2. Giới hạn memory để tránh memory leak
pm2 start app.js --max-memory-restart 500M
App sẽ tự động restart nếu dùng quá 500MB RAM. Rất hữu ích để handle memory leaks!
3. Watch mode cho development
pm2 start app.js --watch
PM2 sẽ tự động restart app khi có file thay đổi. Tiện cho development, nhưng đừng dùng trong production nhé!
4. Cron restart
Restart app vào thời điểm cố định:
pm2 start app.js --cron-restart="0 0 * * *"
Lệnh này restart app lúc 00:00 mỗi ngày. Hữu ích nếu app có memory leak nhẹ.
5. Update PM2
pm2 update
Chạy lệnh này sau khi update PM2 để đảm bảo daemon được update.
Troubleshooting - Những lỗi thường gặp
App không tự động start sau reboot
- Kiểm tra đã chạy
pm2 startupvàpm2 savechưa - Thử chạy lại
pm2 startupvà copy/paste lệnh nó in ra - Kiểm tra
pm2 listxem app có trong danh sách không
App bị restart liên tục
- Xem logs:
pm2 logs my-app - Có thể app bị crash ngay khi start
- Kiểm tra environment variables, database connection, v.v.
PM2 dùng quá nhiều memory
- Xóa logs cũ:
pm2 flush - Giảm số instances nếu đang chạy quá nhiều
- Update PM2 lên version mới nhất
Deploy thành công! App chạy ổn định 24/7
Kết luận
PM2 là một công cụ không thể thiếu khi bạn deploy Node.js app lên production. Nó giúp app của bạn chạy ổn định, tự động recover khi có lỗi, và dễ dàng quản lý.
Tóm tắt các lệnh quan trọng:
# Cài đặt
npm install -g pm2
# Chạy app
pm2 start npm --name "my-app" -- start
# Setup auto-start
pm2 startup
pm2 save
# Quản lý
pm2 list
pm2 restart my-app
pm2 logs my-app
pm2 monit
# Update PM2
pm2 update
Một vài best practices cuối cùng:
- Luôn dùng ecosystem file cho production - dễ quản lý và version control
- Setup monitoring - Dùng PM2 Plus hoặc tích hợp với monitoring tools khác
- Giới hạn memory - Tránh app dùng hết RAM server
- Backup logs - Logs rất quan trọng cho debugging
- Test trước khi deploy - Test kỹ trên staging trước khi lên production
Chúc bạn deploy thành công! Nếu có thắc mắc gì về PM2, cứ để lại comment nhé! 🚀
Bài viết được viết dựa trên kinh nghiệm thực tế deploy hàng chục Node.js apps lên production. Nếu thấy hữu ích, đừng quên chia sẻ cho team nhé!
TaDev