Deploy app bằng Dockerfile lên VPS
Dự án có Dockerfile ở bất kỳ ngôn ngữ nào deploy từ thư mục trên máy hoặc repo public qua CLI, MCP hoặc API đã LIVE với --build dockerfile, nhận URL HTTPS. App host tính phí như VPS, app không tính thêm; repo private đang mở.
Cần chuẩn bị gì trong Dockerfile?
Đọc Dockerfile (base image, lệnh CMD, cổng EXPOSE), .dockerignore loại node_modules/, .git/, .env* để archive dưới 80 MB, biến môi trường cần khai lại, và thư mục ghi dữ liệu: dữ liệu trong container mất khi deploy lại nên dùng database hoặc thư mục gắn ngoài.
Có những cách deploy Dockerfile nào?
Chọn CLI nếu bạn tự chạy lệnh, MCP nếu giao cho AI, API nếu tự viết script. Cả ba cách đều thử được bằng sandbox trước.
Deploy bằng CLI trong thư mục dự án
Chạy npx -y monacloud deploy trong thư mục dự án (hoặc --repo nếu có GitHub). Đặt MONACLOUD_TOKEN trong môi trường theo bắt đầu nhanh; CLI monacloud 0.4.1 tự tải MCP qua npx. Chuẩn bị Dockerfile hoặc package.json phù hợp với stack.
Lệnh đầu thử miễn phí; sau khi bạn đồng ý với báo giá, lệnh thứ hai upload thư mục hiện tại và deploy lên máy chủ tính phí. Mặc định CLI deploy thư mục local kể cả khi có git remote. --git dùng remote hiện tại; --repo <url> dùng repo public chỉ định, ví dụ:
Bỏ --sandbox sau khi đồng ý với báo giá để deploy repo. --build nhận dockerfile, nixpacks hoặc static; chọn theo dự án. Repo mẫu trên có sẵn Dockerfile; với dự án của bạn, giữ --build dockerfile để hạ tầng build đúng image của bạn.
Deploy bằng MCP khi giao cho AI
MCP monacloud-mcp 0.5.0 có cloud_app_detect(local_dir) đoán stack, port và Dockerfile ngay trên máy; cloud_app_create({local_dir}) tự đóng zip và upload. Dùng đường dẫn tuyệt đối mà MCP đọc được. Nếu đã tạo bằng CLI, dùng app ID đó để kiểm tra, không tạo trùng.
Đọc cloud_app_list, cloud_app_host_list, cloud_prices, cloud_plan_list và cloud_balance trước khi tạo; số dư đọc qua /api/me. Thử sandbox: true rồi đồng ý phí app host. Với git public, truyền repo_url thay cho local_dir.
Deploy bằng API upload
Nếu chọn curl thay MCP hoặc CLI, xem hai lệnh tạo app và upload: POST /api/apps với source: "upload" không cần repo_url, trả id, upload_url, max_bytes: 83886080, job_id, status: "awaiting_upload" và url.
Gửi POST /api/apps/{id}/upload multipart archive (zip hoặc tar.gz tối đa 80 MB) và build_path mặc định /. Server tự loại node_modules/, .git/, .env*, *.pem; chặn zip-slip; file phải nằm ở gốc archive, không bọc thêm một thư mục.
Upload trả job id, sau đó poll GET /api/jobs/{id} tới succeeded hoặc failed. Đọc GET /api/apps/{app_id} và log, kiểm tra HTTPS rồi trả URL. Sandbox dùng X-Vibecloud-Sandbox: 1 khi tạo app, chỉ mô phỏng, không tính phí và không có website chạy được. Quản lý app tại console /apps.
Kết quả mong đợi là gì?
| Kết quả mong đợi | Thời gian đo ngày 05/09/2026 (tối) |
|---|---|
| Upload API tới URL HTTPS 200, gồm build image | 112 giây |
MCP cloud_app_create(local_dir) tới URL HTTPS, host đã có | 33 giây |
| App host đầu tiên | ~150 giây |
Số đo 05/09/2026 (tối): thời gian đo trên repo mẫu, không phải cam kết thời gian build cho mọi dự án. Thời gian build dự án của bạn phụ thuộc source, dependency và tài nguyên.
App từ git đã LIVE, đo ngày 05/09/2026: repo git public, app host riêng của bạn (LXC + Dokploy, tạo lần đầu ~150 giây), deploy 10–20 giây, URL https://<repo>-<mã>.app.monacloud.vn có chứng chỉ Let's Encrypt.
Ví dụ: monacloud-example-node-3fb5b2.app.monacloud.vn, từ repo mẫu Node.js. Xoá app rồi tạo lại mất 31 giây khi đã có app host.
Job tính phí kết thúc ở succeeded; trạng thái app là done. Sandbox kết thúc ở done, có sandbox: true và URL giả. Kiểm tra HTTPS và chức năng app trước khi chuyển traffic.
Kiểm tra container sau khi deploy thế nào?
Thử API, webhook, restart và xử lý lỗi. Repo mẫu trong bài là ứng dụng Node.js có Dockerfile dùng để lấy các số đo trên; image của bạn build nhanh hay chậm tuỳ base image và bước cài.
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 đã deploy.
Lỗi thường gặp khi upload và cách xử lý
| Lỗi thường gặp | Cách xử lý |
|---|---|
| Archive bọc thêm thư mục, trả 502 | Đóng lại từ bên trong thư mục dự án để file nằm ngay gốc archive; build_path mặc định / |
| Thiếu Dockerfile | Dùng cloud_app_detect để nhận diện stack, chọn build_type: "nixpacks" hoặc --build nixpacks nếu stack được hỗ trợ, hoặc thêm Dockerfile |
| Archive quá 80 MB (83886080 byte) | Loại dependency, cache và file không cần khỏi archive trước khi gửi; server chỉ lọc sau khi nhận, không thay bước giảm dung lượng |
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 hoặc 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 hoặc GET /api/apps/{app_id}/logs. Xem API reference và domain và SSL.
App host và gói tháng tính phí thế nào?
App host tính phí như VPS, theo 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đ/720 giờ. Đọc giá và cấu hình trả về trước khi đồng ý; 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đ mỗi tháng; trả năm bằng giá 10 tháng. Khách MONA có gói miễn phí; đăng ký được tặng 100.000đ credit. Hoá đơn VAT 10% mỗi tháng. Xem gói tháng và hoá đơ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 khi deploy bằng Dockerfile
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. Có source trên máy thì dùng local_dir hoặc npx -y monacloud deploy, không cần kết nối GitHub.
Thời gian deploy bao lâu?
Số đo 05/09/2026 (tối): upload API tới HTTPS 200 sau 112 giây, gồm build image; MCP local 33 giây khi host đã có. Host đầu tiên ~150 giây. Git repo mẫu deploy 10–20 giây; xoá app rồi tạo lại 31 giây. Thời gian mỗi 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 được không?
Không. Sandbox miễn phí trả job và URL giả, không chạy source. Chỉ xác nhận app online khi job trả succeeded, app ở trạng thái done và URL HTTPS hoạt động.