Chạy Next.js trên VPS từ A-Z: Nhanh, Ổn Định, Ai Cũng Làm Được

09/05/2026 · P T P · Chung

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_ip

Cập nhật hệ thống:

apt update && apt upgrade -y

Tạo user riêng, tránh chạy toàn bộ bằng root:

adduser deploy
usermod -aG sudo deploy

Nế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 nodejs

Kiểm tra:

node -v
npm -v

Cài Nginx:

apt install -y nginx
systemctl enable nginx
systemctl start nginx

Cài PM2 global:

npm install -g pm2

PM2 → 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 git

Clone project:

git clone https://github.com/yourname/your-next-app.git
cd your-next-app

Cá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 build

Nế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.com

Lư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 start

Nế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" -- start

Kiểm tra:

pm2 status
pm2 logs next-app

Lưu cấu hình để reboot vẫn tự chạy:

pm2 save
pm2 startup

PM2 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" -- start

Mẹ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-app

Nộ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 nginx

Nế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 nginx

Bước 7: Trỏ domain về VPS

Vào nơi quản lý DNS, tạo:

A record: @your_server_ip
A record: wwwyour_server_ip

Chờ DNS propagate vài phút tới vài giờ.

Test:

ping yourdomain.com

Nế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-nginx

Cấp SSL:

certbot --nginx -d yourdomain.com -d www.yourdomain.com

Certbot 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.timer

Test 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-app

Nế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 -tulpn

2. 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ế.

#chay #dinh #next #nhanh #tren
Chia sẻ:
← Trước
Mẫu Dockerfile và Docker Compose chuẩn để deploy NodeJS trên VPS

Bài viết tương tự

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!