Chạy Next.js trên VPS từ A-Z: Cách triển khai nhanh, ổn định cho người mới
Triển khai Next.js lên VPS nghe “devops”, dễ gây ngại cho người mới. Thực tế: nếu đi đúng quy trình, việc này khá thẳng. Bạn không cần Kubernetes, không cần CI/CD phức tạp, không cần hạ tầng đắt tiền. Chỉ cần 1 VPS sạch, domain, Node.js, Nginx, PM2 → đủ để đưa app Next.js chạy ổn định, truy cập qua HTTPS, tự restart khi lỗi.
Bài này đi từ A-Z: chọn VPS, chuẩn bị server, deploy app, reverse proxy bằng Nginx, bật SSL, tối ưu vận hành. Mục tiêu: nhanh triển khai, dễ hiểu, đủ chắc để chạy production nhỏ-vừa.
Khi nào nên chọn VPS cho Next.js?
VPS hợp khi bạn muốn:
– Toàn quyền server: cài gì cũng được. – Chi phí thấp: thường rẻ hơn nhiều nền tảng managed. – Dễ mở rộng từng bước: từ 1 app nhỏ → nhiều app. – Học deployment thực chiến: SSH, process manager, reverse proxy, SSL.
VPS đặc biệt hợp với:
– Website công ty – Landing page – Dashboard nội bộ – SaaS nhỏ – Blog, CMS headless
Nếu bạn cần “push code → auto live” cực nhanh, ít quản trị → Vercel dễ hơn. Nhưng nếu cần kiểm soát, tiết kiệm, linh hoạt → VPS rất đáng.
Tổng quan kiến trúc triển khai
Mô hình phổ biến, đơn giản:
– Next.js app chạy cổng 3000
– PM2 giữ tiến trình luôn sống
– Nginx làm reverse proxy cổng 80/443
– Certbot cấp SSL Let’s Encrypt
– Domain trỏ về IP VPS
Luồng request:
– User vào https://yourdomain.com
– Nginx nhận request
– Nginx chuyển tiếp tới 127.0.0.1:3000
– Next.js render/trả nội dung
– PM2 giữ app chạy nền, tự restart nếu crash
Bước 1: Chuẩn bị VPS
Cấu hình tối thiểu cho app nhỏ:
– 1 vCPU – 1-2 GB RAM – Ubuntu 22.04 LTS – 20 GB SSD
Nhà cung cấp nào cũng được: DigitalOcean, Vultr, Hetzner, Linode, Contabo.
Sau khi tạo VPS:
ssh root@your_server_ipCập nhật hệ thống:
apt update && apt upgrade -yTạo user riêng, tránh chạy toàn bộ bằng root:
adduser deploy
usermod -aG sudo deployNếu dùng SSH key, copy key sang user mới.
Bước 2: Cài Node.js, Nginx, PM2
Cài Node.js LTS. Cách gọn, ổn định: dùng NodeSource.
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt install -y nodejsKiểm tra:
node -v
npm -vCài Nginx:
apt install -y nginx
systemctl enable nginx
systemctl start nginxCài PM2 global:
npm install -g pm2PM2 → app chạy nền, reboot VPS → app tự lên lại.
Bước 3: Đưa source code Next.js lên VPS
Có 2 cách phổ biến:
Cách 1: Git clone trực tiếp
Cài Git nếu chưa có:
apt install -y gitClone project:
git clone https://github.com/yourname/your-next-app.git
cd your-next-appCách 2: Upload từ máy local
Dùng scp, rsync, hoặc SFTP. Với người mới, git clone thường dễ hơn.
Bước 4: Cài dependencies, build app
Trong thư mục project:
npm install
npm run buildNếu app dùng biến môi trường, tạo file .env.production hoặc .env trước khi build. Ví dụ:
NODE_ENV=production
PORT=3000
NEXT_PUBLIC_API_URL=https://api.yourdomain.comLưu ý:
– Biến NEXT_PUBLIC_* → expose ra client
– Biến khác → chỉ server dùng
– Sai env → app build được nhưng chạy lỗi logic
Test local trên VPS:
npm run startNếu truy cập được qua:
curl http://localhost:3000→ app ổn.
Dừng test tay, chuyển sang PM2.
Bước 5: Chạy Next.js bằng PM2
Start app:
pm2 start npm --name "next-app" -- startKiểm tra:
pm2 status
pm2 logs next-appLưu cấu hình để reboot vẫn tự chạy:
pm2 save
pm2 startupPM2 sẽ in ra 1 lệnh. Copy, chạy lại đúng lệnh đó.
Nếu app dùng port riêng:
PORT=3000 pm2 start npm --name "next-app" -- startMẹo thực tế:
– npm run dev chỉ dành dev
– Production phải dùng npm run build + npm run start
Bước 6: Cấu hình Nginx reverse proxy
Tạo file site config:
nano /etc/nginx/sites-available/next-appNội dung:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Kích hoạt config:
ln -s /etc/nginx/sites-available/next-app /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginxNếu thấy lỗi syntax → sửa rồi mới reload.
Xóa default site nếu bị đè:
rm /etc/nginx/sites-enabled/default
systemctl reload nginxBước 7: Trỏ domain về VPS
Vào nơi quản lý DNS, tạo:
– A record: @ → your_server_ip
– A record: www → your_server_ip
Chờ DNS propagate vài phút tới vài giờ.
Test:
ping yourdomain.comNếu domain trả đúng IP VPS → ổn.
Bước 8: Bật HTTPS bằng Let’s Encrypt
Cài Certbot:
apt install -y certbot python3-certbot-nginxCấp SSL:
certbot --nginx -d yourdomain.com -d www.yourdomain.comCertbot sẽ:
– xác thực domain – cấp chứng chỉ – tự sửa config Nginx – có thể redirect HTTP → HTTPS
Kiểm tra auto-renew:
systemctl status certbot.timerTest renew:
certbot renew --dry-runĐến đây, app Next.js đã chạy production cơ bản, có SSL, khá ổn cho người mới.
Bước 9: Quy trình cập nhật app sau này
Mỗi lần deploy bản mới:
cd your-next-app
git pull
npm install
npm run build
pm2 restart next-appNếu thay đổi env:
– sửa file .env.production
– build lại
– restart PM2
Quy trình chuẩn:
1. Pull code 2. Cài package mới nếu có 3. Build lại 4. Restart app 5. Check logs
Các lỗi phổ biến người mới hay gặp
1. App chạy local nhưng domain không vào được
Nguyên nhân thường là:
– DNS chưa trỏ đúng – Nginx config sai – firewall chặn cổng 80/443 – PM2 chưa chạy app
Kiểm tra:
pm2 status
nginx -t
systemctl status nginx
ss -tulpn2. Build lỗi vì thiếu biến môi trường
Biểu hiện:
– npm run build fail
– Trang trắng
– API gọi sai URL
Fix:
– kiểm tra .env.production
– phân biệt biến server/client
– rebuild sau khi sửa env
3. VPS ít RAM → app crash
Next.js build khá tốn RAM, nhất là app lớn.
Fix:
– chọn VPS 2 GB RAM nếu có thể – thêm swap – tránh chạy nhiều process thừa
4. Dùng npm run dev cho production
Sai rất phổ biến.
dev mode → chậm, không tối ưu, dễ lỗi.
Production đúng → npm run build rồi npm run start.
Mẹo tối ưu ổn định cho người mới
– Dùng Ubuntu LTS → ít lỗi vặt – Dùng Node LTS → tương thích tốt – Tách user deploy → an toàn hơn root – Backup file env → tránh mất config – Xem log định kỳ:
pm2 logs next-app– Giới hạn scope ban đầu: 1 VPS, 1 app, 1 Nginx config – Đừng tối ưu quá sớm: Docker, CI/CD, multi-server để sau
Nếu muốn gọn hơn nữa, bạn có thể viết script deploy. Nhưng với người mới, hiểu tay từng bước trước → rất quan trọng.
Có nên dùng Docker không?
Có thể, nhưng chưa bắt buộc.
Với người mới:
– Không Docker → dễ hiểu hơn – PM2 + Nginx → đủ tốt cho phần lớn case nhỏ-vừa
Docker hợp khi bạn cần:
– môi trường đồng nhất – nhiều service – team làm việc chung – CI/CD rõ ràng
Nếu mới bắt đầu triển khai Next.js, đi theo mô hình truyền thống trước thường ít rối hơn.
Kết luận
Chạy Next.js trên VPS không khó nếu chia đúng lớp:
– VPS → nơi chạy app – Node.js → runtime – PM2 → giữ app sống – Nginx → nhận traffic, proxy – Certbot → HTTPS
Cho người mới, đây là combo cân bằng nhất giữa dễ làm, rẻ, ổn định. Bạn không cần hạ tầng cầu kỳ để có một website chạy production tử tế. Chỉ cần làm đúng các bước: chuẩn bị VPS, build app, chạy bằng PM2, cấu hình Nginx, trỏ domain, bật SSL.
Sau khi quen, bạn có thể nâng cấp dần: deploy tự động bằng GitHub Actions, dùng Docker, thêm monitoring, backup, scale nhiều app. Nhưng điểm khởi đầu tốt nhất vẫn là: 1 VPS sạch, 1 app Next.js, 1 quy trình deploy rõ ràng.
Nếu mục tiêu của bạn là “đưa dự án lên mạng nhanh, ổn định, ít đau đầu” → cách làm trong bài này là lựa chọn rất thực tế.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!