Cách tự host Next.js với PM2
Tác giả: Đoạn Mã Khách
Đăng nhập để đánh giá bài viết

Để chạy một ứng dụng Next.js bằng PM2 (Process Manager 2), bạn có thể làm theo các bước sau để thiết lập môi trường production ổn định.
PM2 giúp quản lý tiến trình ứng dụng, đảm bảo:
Tự động khởi động lại khi bị crash
Xử lý lỗi rò rỉ bộ nhớ
Tự restart khi server reboot
1. Cài đặt PM2 toàn cục
Trước tiên, cài đặt PM2 trên server:
npm install -g pm22. Chuẩn bị ứng dụng Next.js cho môi trường production
Trước khi chạy với PM2, bạn cần build ứng dụng:
# Cài dependencies
npm install
# Build cho production
npm run build3. Tạo script khởi động
Cách 1: Dùng package.json
Thêm script vào file package.json:
{
"scripts": {
"start": "next start -p 3000"
}
}Cách 2: Tạo file riêng (start.js)
Nếu cần linh hoạt hơn, bạn có thể tạo file:
// start.js
const { exec } = require('child_process');
exec('next start -p 3000', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
return;
}
console.log(`Stdout: ${stdout}`);
});4. Chạy ứng dụng với PM2
Dùng script trong package.json:
pm2 start npm --name "nextjs-app" -- startHoặc dùng file start.js:
pm2 start start.js --name "nextjs-app"5. Quản lý ứng dụng với PM2
Một số lệnh hữu ích:
pm2 list # Xem danh sách process
pm2 stop nextjs-app # Dừng app
pm2 restart nextjs-app # Restart app
pm2 logs nextjs-app # Xem log6. Tự động chạy khi server khởi động
Để đảm bảo app tự chạy lại khi reboot:
pm2 save
pm2 startupSau khi chạy pm2 startup, làm theo hướng dẫn bổ sung mà PM2 cung cấp.
Ưu và nhược điểm của self-host Next.js
Việc tự host Next.js không đơn giản vì:
Node.js nói chung khó self-host
Cần cấu hình nhiều thứ:
Web server (Apache/Nginx)
Load balancing (PM2)
Graceful shutdown
Routing URL
Public assets
Domain & DNS
1. Triển khai và bảo trì
Vercel
Ưu điểm:
Tích hợp sẵn cho Next.js
Deploy nhanh (1-click)
Build tự động, CI/CD sẵn
Nhược điểm:
Hạn chế cấu hình nâng cao
Khó tùy biến cho hệ thống phức tạp
Self-host
Ưu điểm:
Toàn quyền kiểm soát server
Tùy chỉnh linh hoạt
Nhược điểm:
Phải tự setup CI/CD
Quản lý server phức tạp
2. Hiệu năng và khả năng mở rộng
Vercel
Ưu điểm:
Tối ưu sẵn cho Next.js
CDN toàn cầu
Edge function giảm độ trễ
Nhược điểm:
Bị giới hạn theo hệ thống của họ
Self-host
Ưu điểm:
Tự tối ưu theo nhu cầu
Chọn hạ tầng, CDN tùy ý
Nhược điểm:
Phải tự build hệ thống tối ưu (CDN, cache...)
3. Chi phí
Vercel
Ưu điểm:
Có gói free
Phù hợp dự án nhỏ
Nhược điểm:
Chi phí tăng nhanh khi scale
Self-host
Ưu điểm:
Kiểm soát chi phí tốt hơn
Tối ưu theo nhu cầu
Nhược điểm:
Có chi phí ẩn (DevOps, maintenance)
4. Bảo mật và tuân thủ
Vercel
Ưu điểm:
Có sẵn:
SSL
chống DDoS
cập nhật hệ thống
Nhược điểm:
Không phù hợp với yêu cầu compliance đặc thù
Self-host
Ưu điểm:
Toàn quyền kiểm soát bảo mật
Có thể đáp ứng chuẩn như GDPR, HIPAA
Nhược điểm:
Cần nhiều công sức và chuyên môn
5. Tính linh hoạt
Vercel
Ưu điểm:
Dễ dùng
Tích hợp sẵn nhiều tính năng
Nhược điểm:
Hạn chế custom (DB, server phức tạp...)
Self-host
Ưu điểm:
Linh hoạt tối đa
Dùng bất kỳ công nghệ nào
Nhược điểm:
Phải tự cấu hình và bảo trì
Kết luận
Sử dụng PM2 với Next.js trong production giúp:
Quản lý tiến trình
Tự động restart
Theo dõi log
→ Đây là giải pháp hiệu quả để đảm bảo ứng dụng ổn định và hoạt động liên tục.
