🚀 ZeniDeploy giải thích
4 cách deploy app trên Zeni Cloud — chọn cách nào, khi nào? Đọc 3 phút.
Câu hỏi đầu tiên: bạn ĐANG có gì?
| Bạn có gì? | Cách deploy | Bao lâu? |
|---|---|---|
| 📁 Source code (folder Next.js / FastAPI / Static HTML) | ① Upload ZIP source | ~1-2 phút (Zeni tự build) |
| 🐳 Docker image đã build (Docker Hub / Artifact Registry) | ② Docker Image URL | ~30 giây (chỉ pull + run) |
| 🦀 Tauri/Rust/Electron source (cần native build) | ③ Build Farm | ~3-10 phút (cross-compile) |
| 🤔 Chưa có gì, chỉ muốn TEST workflow | ④ Quick Demo | ~30 giây (image mẫu) |
| ✏️ Đã deploy rồi, muốn đổi image | ⑤ Update Image (project detail) | ~30-60s rollout |
5 cách chi tiết
① Upload ZIP source — Zeni tự build (RECOMMENDED)
Khi nào dùng: Bạn có source code (Next.js / Vite / FastAPI / Express / Static HTML) — KHÔNG có Docker image. Zeni auto-detect framework, sinh Dockerfile, build, push, deploy.
UI: "+ Project mới" wizard hoặc "Templates" gallery → tab "Upload ZIP source" → drag & drop file zip.
API: POST /api/v1/upload/source?ws=X&framework=auto với multipart file.
CLI: npm install -g @zenicloud/cli rồi zeni deploy trong folder code.
② Docker Image URL — bạn đã build sẵn
Khi nào dùng: Bạn đã build Docker image ở local hoặc CI/CD, push lên Docker Hub / Google Artifact Registry / private registry. Zeni chỉ pull và run.
UI: "+ Project mới" → Step 4 → modal hỏi image → nhập URL.
API: POST /api/v1/projects?ws=X với image: "docker.io/yourname/app:v1"
Image hỗ trợ: Docker Hub public + private (cần secret), Google Artifact Registry, Google Container Registry (gcr.io). Em validate image tồn tại trước khi deploy → fail-fast 422 nếu không tìm thấy.
③ Build Farm — Tauri / Rust / Electron / Go / Flutter / .NET
Khi nào dùng: Bạn build app native (.exe / .dmg / .AppImage / .apk / .ipa) — cần cross-compile với rustc / Xcode / Android NDK / .NET SDK. Build Farm chạy trên Cloud Build với 6 toolchain images, KHÔNG cần cài tool local.
6 toolchains hỗ trợ:
tauri-latest— Tauri 2.x (Rust + Webview)rust-stable— Rust 1.80+ với cross-rselectron-builder— Electron appgo-modules— Go 1.23+flutter-stable— Flutter mobile + desktopdotnet-8— .NET 8 self-contained
API: POST /api/v1/build-farm/jobs với toolchain + source_ref (GitHub URL / GCS ZIP).
Sau build: artifact file (.exe / .dmg) được upload lên GCS, trả signed URL 30 ngày để khách download.
④ Quick Demo — TEST workflow trong 30 giây
Khi nào dùng:
- Lần đầu thử Zeni Cloud — muốn xem Cloud Run hoạt động ra sao
- Verify workspace + billing setup OK
- Test custom domain mapping với image bất kỳ trước khi deploy code thật
- Demo cho boss/khách trong 30 giây ("nhìn nè, deploy chỉ click 1 nút")
Sau Quick Demo: Vào tab Projects → click project demo → button "🐳 Update Image" để đổi sang image thật của bạn.
UI: Click "Templates" topbar → tab "Quick Demo (test 30s)" → click 1 trong 4 cards (đều có badge ⚠️ DEMO).
⑤ Update Image — đổi image runtime cho project đã tạo
Khi nào dùng: Đã deploy project rồi (qua Quick Demo / wizard / API), giờ muốn đổi image (build mới, version mới, hoặc thay placeholder bằng code thật).
UI: Tab Projects → click vào project → modal detail mở → button "🐳 Update Image" → input image URL mới → Submit.
Logic: Frontend gửi POST /api/v1/projects với CÙNG name + image mới. Backend detect existing project → gọi update_service Cloud Run (rolling update, không downtime). Khoảng 30-60s sau, Cloud Run rollout xong.
So sánh nhanh — bảng ra quyết định
| Tiêu chí | Upload ZIP | Docker URL | Build Farm | Quick Demo |
|---|---|---|---|---|
| Có code source? | ✅ Có | — | ✅ Có | — |
| Có Docker image? | — | ✅ Có | — | — |
| Cần native build (.exe/.dmg)? | ❌ | ❌ | ✅ | ❌ |
| Time to deploy | 1-2 phút | 30 giây | 3-10 phút | 30 giây |
| Production-ready? | ✅ Yes | ✅ Yes | ✅ Yes (binary) | ❌ Demo only |
| Skill cần có? | Biết zip code | Biết Docker | Biết Rust/Tauri | Click chuột |
FAQ thường gặp
Tôi click Quick Demo "Next.js PWA" mà sao thấy nginx welcome?
Đúng! Vì image template hiện tại = docker.io/library/nginx:alpine (placeholder). Sau khi deploy demo, vào Projects → "🐳 Update Image" → upload code Next.js PWA của bạn. Hoặc dùng tab "Upload ZIP" thay vì Quick Demo.
Khi nào Zeni clone GitHub repo template như Vercel?
Đang trong roadmap (TOP1: Auto-build từ GitHub source — 1 ngày dev). Khi xong, click template = Zeni clone GitHub repo template → Build Farm build → deploy code thật.
Image nào hỗ trợ?
Docker Hub public, Google Container Registry (gcr.io), Google Artifact Registry. Private Docker Hub cần wire credentials qua /identity/secrets.
Cloud Run port mặc định?
App trong container phải listen $PORT env var (default 8080). Nếu app listen port khác (vd 3000 cho Next.js), khai báo port field khi tạo project.
📚 Đọc thêm
- Deploy Workflow A-Z — hướng dẫn 5 bước chi tiết
- Full Features — list 6 lớp + 11 services
- Quickstart 5 phút — Hello World
- Custom Domain — bind domain riêng
- PWA Templates — install-able web app