Checklist hoàn chỉnh trước khi đưa website Next.js chạy trên VPS vào production
Đưa một website Next.js lên VPS production không chỉ là npm run build rồi chạy pm2 start. Production = môi trường thật, traffic thật, bot thật, lỗi thật, tiền thật. Một cấu hình thiếu HTTPS, env lộ, process chết không tự restart, log phình đầy disk, DB không backup → website có thể sập bất cứ lúc nào.
Checklist dưới đây giúp bạn rà soát toàn bộ trước khi “go live”: code, build, server, bảo mật, reverse proxy, SSL, monitoring, backup, performance.
1. Kiểm tra code trước khi build
Dependency → sạch
Chạy:
npm audit
npm outdated
Fix lỗi bảo mật nghiêm trọng:
npm audit fix
Không update mù major version trước production. Test kỹ nếu nâng cấp framework, auth, ORM, payment SDK.
Lint/type → không lỗi
npm run lint
npm run type-check
Nếu dùng TypeScript, tránh any bừa bãi ở phần auth, API, payment, DB. Lỗi type nhỏ → bug runtime lớn.
– Không commit .env
– Biến client chỉ dùng prefix NEXT_PUBLIC_
– Secret/API key chỉ ở server
– AUTH_SECRET, JWT_SECRET, webhook secret phải mạnh
– URL production khác staging/dev
Kiểm tra .gitignore:
.env
.env.*
!.env.example
2. Build Next.js chuẩn production
Build local trước
npm run build
Nếu lỗi ở VPS mới phát hiện → deploy chậm, downtime cao. Build local/CI trước.
Kiểm tra mode chạy
Next.js production thường chạy:
npm run start
Hoặc:
next start
Không dùng:
npm run dev
dev → chậm, memory cao, debug info, không phù hợp public internet.
– httpOnly
– secure
– sameSite
– path/domain đúng
– maxAge hợp lý
Nếu dùng NextAuth/Auth.js:
– NEXTAUTH_URL/AUTH_URL đúng domain HTTPS
– AUTH_SECRET mạnh
– callback URL trong Google/GitHub/Facebook khớp production
CORS
Không dùng:
origin: '*'
với credential. Chỉ allow domain cần thiết.
8. Database, migration, backup
Migration → có kế hoạch
Trước deploy:
npx prisma migrate deploy
Không dùng migrate dev trên production.
Checklist DB:
– connection string production đúng
– user DB không có quyền quá rộng nếu không cần
– index đủ cho query chính
– migration đã test staging
– rollback plan có
Backup → không optional
Tối thiểu:
– backup DB hằng ngày
– giữ nhiều phiên bản
– test restore định kỳ
– backup ngoài VPS
Ví dụ PostgreSQL:
pg_dump "$DATABASE_URL" > backup.sql
Backup chưa từng restore = chưa chắc dùng được.
9. Logging, monitoring, alert
Log app
PM2 logs:
pm2 logs next-app
Cấu hình log rotate:
pm2 install pm2-logrotate
Nếu không rotate → disk đầy → app chết.
Monitor tài nguyên
Kiểm tra:
htop
df -h
free -m
Theo dõi:
– CPU spike
– RAM leak
– disk usage
– response time
– error rate
– 5xx từ Nginx
– DB connection count
Dùng Uptime Kuma, Better Stack, Grafana, Sentry tùy quy mô.
Error tracking
Cài Sentry hoặc tương đương. Production không thể dựa vào user báo lỗi qua chat.
Ảnh lớn → LCP xấu. Dùng CDN/object storage nếu nhiều media.
Bundle size
Phân tích:
npm install @next/bundle-analyzer
Loại bỏ lib nặng ở client. Chart/editor/date lib thường làm bundle phình.
Cache headers
Static assets của Next thường có hash → cache dài được. Với API/data dynamic, set cache rõ. Không cache nhầm dữ liệu user.
11. Deploy workflow an toàn
Không sửa trực tiếp trên VPS
Luồng tốt:
1. Code → Git
2. CI test/build
3. Deploy VPS
4. Run migration
5. Restart app
6. Health check
7. Rollback nếu fail
Deploy tay vẫn được, nhưng phải script hóa:
git pull
npm ci
npm run build
pm2 restart next-app
Zero/low downtime
PM2 reload:
pm2 reload next-app
Với app nhỏ, restart vài giây có thể chấp nhận. Với app có traffic thật, cần health check, blue-green, Docker, hoặc load balancer.
12. Kiểm thử cuối trước khi mở traffic
Checklist nhanh:
– Domain trỏ đúng IP
– HTTPS xanh
– HTTP redirect HTTPS
– www/non-www thống nhất
– login/logout OK
– form gửi được
– upload OK
– payment/webhook OK
– email production gửi được
– sitemap/robots đúng
– metadata/social preview đúng
– 404/500 page ổn
– mobile responsive
– Lighthouse đủ tốt
– backup chạy
– monitoring báo được
– reboot VPS app tự chạy lại
Test reboot thật:
sudo reboot
Sau đó kiểm tra:
pm2 status
sudo systemctl status nginx
Kết luận
Production không phải một lệnh deploy. Production là hệ thống: code ổn, env đúng, server khóa, HTTPS bật, process tự phục hồi, DB có backup, log có kiểm soát, monitoring có cảnh báo.
Nếu website Next.js của bạn chạy trên VPS, hãy xem checklist này như “cửa kiểm soát cuối”. Làm đủ ngay từ đầu → ít sự cố, dễ debug, dễ mở rộng. Bỏ qua vài mục nhỏ → có thể trả giá bằng downtime, mất dữ liệu, hoặc lộ secret.
Trước khi public link cho khách hàng/người dùng: build sạch, deploy có script, reboot test, backup test, monitoring bật. Khi đó, bạn không chỉ “đưa website lên mạng” — bạn đang vận hành một sản phẩm production đúng nghĩa.