Hosting Next.js tại Việt Nam, deploy từ GitHub, có preview PR
Hosting Next.js tại Việt Nam trên ZoCloud chỉ cần kết nối repo GitHub, bấm Tạo và deploy, và ZoCloud tự nhận diện Next.js, build rồi chạy app với HTTPS. Bạn có biến môi trường, preview cho từng Pull Request, tên miền riêng, máy chủ đặt tại Việt Nam, thanh toán bằng ví VND và hoá đơn VAT điện tử.
Bài này dành cho developer và agency đang tìm một lựa chọn bên cạnh Vercel cho khách hàng ở Việt Nam.
Hosting Next.js trên ZoCloud hay Vercel?
Vercel là đội ngũ phát triển Next.js, có mạng edge toàn cầu và nhiều tính năng riêng cho framework này. Đó là lựa chọn rất tốt, đặc biệt khi người dùng của bạn ở nhiều quốc gia.
ZoCloud hướng tới một nhu cầu khác: app phục vụ chủ yếu người dùng ở Việt Nam và đội ngũ muốn mọi thứ ở một chỗ, trả tiền bằng VND.
| Tiêu chí | ZoCloud | Nền tảng quốc tế (như Vercel) |
|---|---|---|
| Vị trí máy chủ | Tại Việt Nam | Nhiều region và mạng edge toàn cầu |
| Thanh toán | Ví VND: VietQR, MoMo, VNPay, OnePay, PayPal | Thường bằng USD qua thẻ quốc tế |
| Hoá đơn | Hoá đơn GTGT điện tử theo thông tin xuất hoá đơn của tổ chức | Hoá đơn của công ty nước ngoài |
| Database đi kèm | PostgreSQL, MySQL (MariaDB), Redis (Valkey) trong cùng project | Qua dịch vụ hoặc đối tác tích hợp |
| Cách chạy Next.js | Một server Node.js (next start) hoặc site tĩnh |
Serverless/edge tối ưu riêng cho Next.js |
Điểm cần cân nhắc thật: trên ZoCloud, Next.js chạy như một server Node.js lâu dài, không phải hàm serverless. Một số tính năng gắn với hạ tầng riêng của Vercel (ví dụ edge middleware chạy trên mạng edge của họ, tối ưu ảnh do họ quản lý) sẽ hoạt động theo cách Next.js tự làm khi chạy bằng next start. Hãy thử app của bạn trước khi chuyển hẳn.
Về độ trễ: khi người dùng và máy chủ cùng ở Việt Nam, request không phải đi ra nước ngoài rồi quay về. Mức chênh lệch cụ thể tuỳ nhà mạng và vị trí, nên hãy đo với app của chính bạn.
Deploy Next.js lên ZoCloud từng bước
1. Tạo project
- Đăng ký, xác minh e-mail, rồi hoàn tất thiết lập (nạp tiền vào ví hoặc kết nối GitHub).
- Mục Project → Tạo project, nhập tên (ví dụ
shop), chọn Vị trí, bấm Tạo.
2. Kết nối GitHub và deploy
- Mục GitHub của tổ chức → Kết nối GitHub, cài ZoCloud cho các repo cần dùng. ZoCloud chỉ đọc mã nguồn, không ghi.
- Trên canvas, Thêm → Deploy từ Git → thẻ GitHub, chọn repo.
- Kiểm tra Tên service (ví dụ
web), Nhánh, Thư mục gốc (monorepo:apps/web), để trống Lệnh chạy. - Bấm Tạo và deploy.
ZoCloud nhận ra Next.js từ package.json, chọn trình quản lý gói theo lockfile (npm, pnpm, yarn), chạy build rồi chạy start (không có script start thì dùng next start). Nếu next.config dùng output: 'export', app được deploy thành site tĩnh từ thư mục out.
Khi xong, app có địa chỉ https://web-shop.zocloud.app. Bật Tự deploy khi push ở tab Cấu hình để mỗi lần push lên nhánh là deploy.
Thích dòng lệnh? Từ thư mục app:
curl -fsSL https://app.zocloud.io/install.sh | sh
zo login
zo detect # xem ZoCloud sẽ build thế nào
zo deploy -to myorg/shop/web
3. Ghi đè cấu hình bằng zocloud.json
Muốn cố định phiên bản Node.js hay lệnh build, đặt zocloud.json ở gốc repo:
{
"build": {
"install": "npm ci",
"build": "npm run build",
"runtime_version": "22"
},
"deploy": {
"start": "npm start",
"health_path": "/",
"replicas": 2
}
}
Giá trị trong file được ưu tiên hơn các ô trên portal. Với monorepo, thêm "watch_paths": ["apps/web/**"] trong build để chỉ deploy khi phần liên quan thay đổi.
Biến môi trường cho Next.js
Tab Biến môi trường của service: Thêm biến, hoặc Sửa dạng .env để dán nhiều dòng.
NEXT_PUBLIC_SITE_URL=https://www.example.vn
DATABASE_URL=${{pg.DATABASE_URL}}
API_URL=${{api.PRIVATE_URL}}
- Biến được mã hoá khi lưu, dùng cả lúc build và lúc chạy, nên
NEXT_PUBLIC_*được đưa vào bản build. - Biến có hiệu lực từ lần deploy sau: đổi xong hãy deploy lại.
${{pg.DATABASE_URL}}trỏ tới database tênpgtrong cùng environment;${{api.PRIVATE_URL}}là địa chỉ nội bộhttp://api.internalcủa serviceapi, gọi qua mạng riêng, không ra Internet.- ZoCloud đặt sẵn
PORT,ZOCLOUD_PUBLIC_DOMAIN,ZOCLOUD_GIT_COMMIT_SHA… Next.js đọcPORTkhi chạynext start.
Cần database cho Prisma hay Drizzle? Bấm Thêm → PostgreSQL, chi tiết ở bài deploy Node.js có PostgreSQL.
Preview cho từng Pull Request
Đây là tính năng nhiều đội quen dùng trên Vercel, và ZoCloud cũng có (cần repo kết nối qua GitHub App):
- Menu môi trường (cạnh
production) → Preview cho Pull Request → Bật preview. - Chọn Database của preview: Database riêng, trống (an toàn nhất), Dùng chung database production, hoặc Không có database.
Mỗi PR có environment pr-<số> với địa chỉ web-pr12-shop.zocloud.app, cập nhật theo mỗi lần push và tự xoá khi PR đóng hoặc merge. GitHub hiện trạng thái "ZoCloud preview / web" trên PR; bấm vào là mở bản preview. PR từ fork không có preview, vì preview chạy với biến môi trường của project.
Tên miền, HTTPS và bảo mật
- Tab Tên miền → nhập
www.example.vn→ Thêm. - Tạo
CNAMEvề địa chỉ….zocloud.appmà portal hiện; tên gốc dùng bản ghiA. - Chứng chỉ HTTPS được cấp tự động trong vài phút sau khi DNS đúng.
Tên miền mua tại ZoCloud, dùng ZoCloud DNS hoặc Cloudflare đã kết nối thì bản ghi tạo tự động. Tab Cấu hình → Bảo mật có tường lửa OWASP Core Rule Set (chế độ Chỉ ghi nhận hoặc Chặn), chặn quốc gia và chặn IP.
Vận hành app Next.js
- Scale: 2 bản chạy trở lên để app không gián đoạn khi một máy gặp sự cố; có Tự động scale theo CPU.
- Rollback: tab Deploy → Quay lại bản này, không cần build lại (
zo rollback 7). - Log: tìm theo chữ, lọc Request HTTP theo 2xx/4xx/5xx.
- Ngủ khi không có truy cập: hợp với bản demo cho khách, đánh thức sau vài giây khi có request.
Giá theo gói và mức dùng hiện trong portal (Bảng giá), trả từ ví VND.
Câu hỏi thường gặp
ZoCloud có chạy được Next.js có server (SSR, API routes) không?
Có. ZoCloud nhận diện Next.js, chạy lệnh build trong package.json rồi chạy app bằng script start (hoặc next start). Nếu next.config dùng output: 'export', app được deploy thành site tĩnh.
Biến NEXT_PUBLIC_ trên ZoCloud có hoạt động không?
Có. Biến môi trường của service được dùng cả lúc build và lúc chạy, nên biến NEXT_PUBLIC_ được đưa vào bản build. Đổi biến xong cần deploy lại vì biến có hiệu lực từ lần deploy sau.
Có preview cho từng Pull Request như Vercel không?
Có, khi repo kết nối qua GitHub App. Mỗi PR có environment pr-<số> và địa chỉ riêng, tự cập nhật theo mỗi lần push và tự xoá khi PR đóng hoặc merge.
Vì sao nên chọn hosting Next.js tại Việt Nam?
Nếu người dùng chủ yếu ở Việt Nam, máy chủ trong nước giúp đường đi của request ngắn hơn. ZoCloud còn cho trả bằng ví VND và xuất hoá đơn VAT điện tử, thuận tiện cho doanh nghiệp.
Thử deploy Next.js ngay
Đăng ký ZoCloud, kết nối GitHub và deploy app Next.js đầu tiên. Đọc thêm hướng dẫn app, tên miền và thanh toán. Đang cân nhắc giữa các nền tảng? Xem so sánh với Heroku, Railway, Render.