TÀI LIỆU · 05/09/2026

Deploy Next.js lên VPS

Deploy Next.js từ repo public đã LIVE qua CLI, MCP hoặc API. App host riêng tạo lần đầu ~150 giây; deploy repo mẫu 10–20 giây, có URL HTTPS. Host tính phí như VPS, app không tính thêm; repo private đang mở.

Cần chuẩn bị gì cho Next.js?

Đọc package.json, build/start command, phiên bản Node, image optimization, route API, cron và biến môi trường. Kiểm tra phần phụ thuộc Vercel.

Bước 1–3 để deploy repo là gì?

1. Đăng nhập, đọc dự án và thử bằng MCP

Đăng nhập MONA Pass bằng npx -y monacloud-mcp login. Dùng MCP monacloud-mcp 0.3.2 và CLI monacloud 0.3.1. Giao prompt sau cho AI:

Đọc repo của tôi. Gọi cloud_app_list và cloud_app_host_list để tránh tạo trùng, cloud_prices, cloud_plan_list và cloud_balance để tính phí. Nếu chưa có host, gọi cloud_app_create với repo_url, branch, build_type, port đúng dự án và sandbox=true. Báo ước tính để tôi duyệt. Sau khi được duyệt, gọi cloud_app_create với sandbox=false, poll bằng cloud_job_status, kiểm cloud_app_get/cloud_app_logs và HTTPS rồi trả URL.

2. Deploy bằng CLI thế nào?

CLI dùng npx monacloud deploy --repo <url>. Ví dụ dưới đây dùng repo Node.js mẫu có Dockerfile; thay URL, nhánh, kiểu build và cổng theo dự án của bạn:

npx monacloud deploy --repo https://github.com/themonagroup/monacloud-example-node --branch main --build dockerfile --sandbox
npx monacloud deploy --repo https://github.com/themonagroup/monacloud-example-node --branch main --build dockerfile

Lần đầu thử 0đ; lệnh thứ hai hiển thị ước tính và hỏi duyệt trước khi tạo thật. --build nhận dockerfile, nixpacks hoặc static. Với repo hiện tại có remote và nhánh, có thể chạy npx monacloud deploy. Chọn một công cụ tạo app: nếu AI đã deploy ở bước 1 thì dùng ID đó để kiểm tra, không tạo lại bằng CLI.

3. Gọi API và đọc kết quả thế nào?

Nếu dùng curl thay cho MCP/CLI, đặt token theo bắt đầu nhanh và thử POST /api/apps:

curl -sS -X POST "$MONACLOUD_API/api/apps" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN" \
  -H "X-Vibecloud-Sandbox: 1" \
  -H "Content-Type: application/json" \
  -d '{"repo_url":"https://github.com/themonagroup/monacloud-example-node","branch":"main","build_type":"dockerfile","dockerfile":"Dockerfile","port":3000}'

Sau khi duyệt phí, bỏ header X-Vibecloud-Sandbox: 1 để tạo thật. API trả job có id; thay JOB_ID bằng ID nhận được và đọc tới trạng thái cuối:

export JOB_ID="<job-id-tra-ve>"
curl -sS "$MONACLOUD_API/api/jobs/$JOB_ID" \
  -H "Authorization: Bearer $MONACLOUD_TOKEN"

Lấy result.app_id, đọc GET /api/apps/{app_id} để kiểm tra status, url, last_deployerrorMessage. Khi timeout, đọc lại job cũ trước; không gửi create lặp. Quản lý app tại console /apps.

Kết quả mong đợi là gì?

App từ git đã LIVE, đo ngày 05/09/2026: repo git public → app host riêng của user (LXC + Dokploy, tạo lần đầu ~150 giây) → deploy 10–20 giây → URL https://<repo>-<mã>.app.monacloud.vn có cert Let's Encrypt.

Ví dụ thật: https://monacloud-example-node-3fb5b2.app.monacloud.vn, từ repo mẫu Node.js. Xoá app → tạo lại: 31 giây khi đã có app host. Đây là số đo của repo mẫu; thời gian build dự án của bạn phụ thuộc source, dependency và tài nguyên.

Job thật kết thúc ở succeeded; trạng thái app là done. Sandbox kết thúc ở done, có sandbox: true và URL giả; không có website thật. Kiểm tra HTTPS và chức năng app trước khi chuyển traffic.

Kiểm tra Next.js chạy thật thế nào?

Thử trang động, đăng nhập, API, ảnh, upload và tác vụ nền. Đo RAM khi build trước khi chốt cấu hình.

Nếu cần database, xem tạo database. Sandbox chỉ thử API; dữ liệu và chức năng phải kiểm tra trên app thật.

Cập nhật env, domain và deploy lại thế nào?

Dùng cloud_app_env_set hoặc PUT /api/apps/{app_id}/env với toàn bộ map env cần giữ, rồi cloud_app_deploy hoặc POST /api/apps/{app_id}/deploy để áp dụng. Không commit secret vào repo.

cloud_app_domain_add / POST /api/apps/{app_id}/domains nhận host, trả hướng dẫn CNAME. Trỏ DNS đúng đích, chờ cấp chứng chỉ rồi kiểm tra HTTPS. Đọc log bằng cloud_app_logs / GET /api/apps/{app_id}/logs. Xem API referencedomain/SSL.

App host và gói tháng tính phí thế nào?

App host tính phí như VPS (giờ hoặc gói tháng); app không tính thêm. Mặc định tạo host mới dùng 2 core, 2 GB RAM, 30 GB disk: (2 × 250 + 2 × 150 + 30 × 15) = 1.250đ/giờ, ước tính 900.000đ cho 720 giờ. Đọc giá và cấu hình trả về trước khi duyệt; dùng lại host sẵn có thì phí host tiếp tục theo kỳ.

Để so với VPS tự quản nhỏ: 1 core, 1 GB RAM, 10 GB disk là 550đ/giờ, ước tính (250 + 150 + 10 × 15) × 720 = 396.000đ/tháng. Đây là mốc VPS, không phải cấu hình app host mặc định. Bảng giá chính dùng 730 giờ nên VPS đó ra 401.500đ/tháng. Database tách riêng và tài nguyên tăng thêm tính riêng.

Gói tháng đã LIVE: 399.000 · 999.000 · 1.990.000 · 3.990.000 đ/tháng; năm = 10 tháng. Khách MONA có gói 0đ; đăng ký được tặng 20.000đ credit. Hoá đơn VAT 10% mỗi tháng. Xem gói tháng và hóa đơn để chọn cấu hình đủ cho app.

Xoá app không xoá app host. Host còn tồn tại vẫn tính phí; stop giữ disk và IP nên còn phí. Chỉ xoá service host sau khi sao lưu và xác nhận không còn app cần dùng.

Câu hỏi thường gặp

Repo private thì sao?

Repo private đang mở qua GitHub App. Hiện luồng app từ git nhận repo public HTTPS; không đặt token hoặc mật khẩu vào URL repository.

Thời gian deploy bao lâu?

Số đo repo mẫu ngày 05/09/2026: app host đầu tiên ~150 giây, deploy 10–20 giây; xoá app → tạo lại trên host có sẵn 31 giây. Build của từng dự án có thể khác.

App có tính thêm phí không?

App không tính thêm. App host tính như VPS theo giờ hoặc gói tháng; xoá app vẫn giữ host tính phí. Database riêng tính riêng.

Sandbox có URL chạy thật không?

Không. Sandbox 0đ trả job và URL giả, không chạy source. Chỉ xác nhận app online khi job thật succeeded, app done và URL HTTPS hoạt động.

Prompt mẫu cho AI

Dán vào công cụ AI của bạn
Deploy Next.js từ repo public của tôi lên MONA Cloud bằng cloud_app_create. Đọc package.json, build/start command, phiên bản Node, image optimization, route API, cron và biến môi trường. Kiểm tra phần phụ thuộc Vercel. Đọc cloud_app_list, cloud_app_host_list, cloud_prices, cloud_plan_list và cloud_balance. Chưa có host thì thử sandbox=true; báo phí host giờ/tháng và chờ tôi duyệt trước khi tạo thật. Poll job, kiểm cloud_app_get, cloud_app_logs và HTTPS rồi trả URL. Thử trang động, đăng nhập, API, ảnh, upload và tác vụ nền. Đo RAM khi build trước khi chốt cấu hình. Không đưa secret vào chat. Repo private đang mở qua GitHub App.

Không gửi token hoặc mật khẩu vào chat.