Vì sao nhiều team chọn VPS + PM2 + Nginx cho Next.js?
Deploy Next.js lên Vercel rất nhanh. Nhưng khi cần toàn quyền kiểm soát server, tối ưu chi phí, gắn nhiều service trên cùng máy, hoặc phải đáp ứng yêu cầu nội bộ về hạ tầng, mô hình VPS + PM2 + Nginx gần như là lựa chọn thực chiến nhất.
Nếu cấu hình đúng, bạn sẽ có một stack vừa ổn định, vừa dễ vận hành, dễ mở rộng. Bài viết này đi theo hướng thực chiến: từ chuẩn bị VPS, build app, chạy bằng PM2, tới cấu hình Nginx “sạch”, ít lỗi, dễ bảo trì.
Kiến trúc triển khai chuẩn
Luồng cơ bản:
– User truy cập domain.
– Nginx nhận request ở cổng 80/443.
– Nginx reverse proxy vào app Next.js đang chạy ở 127.0.0.1:3000.
– PM2 quản lý tiến trình Next.js.
– SSL do Nginx xử lý.
Kiểu này có vài lợi ích rõ:
– Ẩn port app nội bộ → an toàn hơn.
– Restart app không ảnh hưởng public endpoint nhiều.
– Dễ thêm SSL, redirect, rate limit, cache.
– Thuận tiện deploy nhiều app trên cùng VPS.
Chuẩn bị VPS trước khi deploy
Một VPS Ubuntu LTS là đủ. Tối thiểu:
– RAM: 1GB–2GB cho app nhỏ/vừa.
– CPU: 1–2 vCPU.
– OS: Ubuntu 22.04 LTS hoặc tương đương.
Một số tinh chỉnh nên có trong môi trường production
Để hệ thống “bền” hơn, nên bổ sung:
– log rotation cho PM2:
pm2 install pm2-logrotate
– giới hạn upload/body trong Nginx nếu app có upload file.
– gzip/brotli để giảm bandwidth.
– fail2ban nếu VPS public internet.
– monitoring: Netdata, Uptime Kuma, Grafana, hoặc ít nhất alert ping.
Nếu traffic tăng mạnh:
– VPS nhỏ → CPU/RAM nghẽn.
– SSR nặng → response chậm.
– DB remote → latency tăng.
Lúc đó cần tối ưu sâu hơn:
– cache layer.
– giảm SSR không cần thiết.
– dùng CDN cho ảnh/tĩnh.
– scale app hoặc tách service.
Kết luận
Deploy Next.js trên VPS với PM2 + Nginx là mô hình rất đáng dùng khi bạn muốn chủ động hạ tầng, chi phí hợp lý, vận hành linh hoạt. Cấu hình chuẩn thực chiến không nằm ở việc “app chạy được”, mà ở chỗ:
– process sống ổn định với PM2
– request đi qua Nginx đúng chuẩn reverse proxy
– static asset được phục vụ tối ưu
– SSL đầy đủ
– deploy/update đơn giản, dễ rollback, dễ debug
Nếu làm đúng ngay từ đầu, bạn sẽ tránh được phần lớn lỗi kinh điển như 502 Bad Gateway, app chết sau reboot, hay domain hoạt động chập chờn. Với team nhỏ hoặc sản phẩm đang tăng trưởng, đây là setup cân bằng rất tốt giữa đơn giản, kiểm soát, hiệu năng.
Muốn đi xa hơn, bạn có thể bổ sung CI/CD, Docker, monitoring và chiến lược zero-downtime. Nhưng nền móng vẫn là: Next.js chạy gọn trong PM2, Nginx đứng ngoài làm lớp bảo vệ và tối ưu truy cập. Đây là cấu hình đủ thực chiến để chạy production nghiêm túc.