🚀 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.

Updated 2026-05-09 · Zeni Cloud v124

📌 Tóm 1 dòng: Bạn có CODE thật → Upload ZIP. Bạn có Docker IMAGE rồi → Docker URL. Bạn chỉ test → Quick Demo. Bạn cần custom config → Wizard 4-step. Đã deploy rồi muốn đổi → Update Image.

Câu hỏi đầu tiên: bạn ĐANG có gì?

Bạn có gì?Cách deployBao 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)

Production OK

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.

[Code folder] → zip → upload qua UI → Zeni: · Detect framework (next.config.js → Next.js, requirements.txt → FastAPI, ...) · Generate Dockerfile chuẩn · Build image trên Cloud Build · Push lên Artifact Registry · Deploy Cloud Run · Trả URL https://zeni-{ws}-{name}.run.app

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

Production OK

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.

[Local] docker build -t myname/app:v1 . [Local] docker push myname/app:v1 [Zeni UI] paste image URL: docker.io/myname/app:v1 [Zeni] pull image → deploy Cloud Run → URL live (~30s)

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

Native

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-rs
  • electron-builder — Electron app
  • go-modules — Go 1.23+
  • flutter-stable — Flutter mobile + desktop
  • dotnet-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

Demo only
⚠️ KHÔNG phải production deploy. Click → Zeni deploy 1 image MẪU (nginx welcome page hoặc Google hello-app) chỉ để verify Cloud Run hoạt động. Image KHÔNG phải code của bạn.

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

Production OK

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 ZIPDocker URLBuild FarmQuick Demo
Có code source?✅ Có✅ Có
Có Docker image?✅ Có
Cần native build (.exe/.dmg)?
Time to deploy1-2 phút30 giây3-10 phút30 giây
Production-ready?✅ Yes✅ Yes✅ Yes (binary)❌ Demo only
Skill cần có?Biết zip codeBiết DockerBiết Rust/TauriClick 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