Deploy là gì? Đưa code từ máy lập trình viên lên server cho khách dùng

Deploy = đưa phiên bản code mới chạy trên server cho người dùng cuối truy cập. Hiểu deploy giúp bạn biết bao lâu thì tính năng mới lên live, vì sao site đôi khi 'đang bảo trì', và phân biệt 4 môi trường dev/staging/production.

12 phút đọcCập nhật 2026-05-30
Nghe bài viết
Để Claude đọc bài cho bạn — vừa nghe vừa làm việc khác
Mục lục bài viết(20)
5 bước deploy code: viết code local, push lên Git, CI/CD chạy test+build, deploy server, user truy cập qua HTTPS

Quy trình deploy 5 bước điển hình 2026: code viết trên máy lập trình viên → push lên Git → CI/CD pipeline tự chạy test và build → đưa lên server production → user truy cập qua HTTPS. Tổng thời gian: 3-10 phút từ commit cuối tới user thấy thay đổi. Đây là pipeline thực của vietcodex.com — bài bạn đang đọc cũng đi qua đúng 5 bước này.

Hiểu đơn giản nhất

Deploy = đưa phiên bản code mới chạy trên server cho người dùng thực sự dùng được.

Tưởng tượng bạn mở một quán cà phê mới. Bạn đã:

  • Soạn xong menu món
  • Tập pha chế ở nhà 2 tuần
  • Mua đủ máy móc nguyên liệu
  • Treo bảng hiệu

Nhưng quán chưa mở cửa — không khách nào uống được cà phê của bạn. Để khách đến, bạn cần:

  1. Bật đèn, mở cửa
  2. Kích hoạt máy POS
  3. Bảng hiệu chỉnh sáng
  4. Bắt đầu nhận order

Hành động "bật đèn, mở cửa, sẵn sàng đón khách" = deploy. Trước đó code chỉ chạy trên máy lập trình viên (như công thức cà phê trong nhà bạn), không ai bên ngoài tiếp cận được.

Deploy ≠ upload. Upload chỉ là gửi file lên (như giao nguyên liệu tới kho quán). Deploy là toàn bộ quá trình: gửi code + cài dependencies + build + khởi động server + chuyển traffic sang phiên bản mới.

Tại sao bạn cần biết

  • Biết bao lâu thì tính năng mới lên live. Dev báo "code xong rồi" KHÔNG có nghĩa user đã thấy. Phải chờ deploy mới live.
  • Hiểu vì sao site đôi khi "đang bảo trì". Đa số là do deploy gặp lỗi hoặc đang migrate database. Pattern modern không cần bảo trì — nếu hosting bạn vẫn cần, agency đang dùng cách cũ.
  • Đánh giá DevOps maturity của agency. Agency tốt deploy 5-10 lần/tuần tự động. Agency tệ deploy 1 lần/tháng bằng FileZilla — cứ deploy là sập site.
  • Quyết định lựa chọn hosting hợp lý. Vercel deploy 30s vs VPS 5 phút vs AWS 30 phút — chọn theo skill team + budget + traffic.
  • Phòng tránh "deploy thứ Sáu chiều". Quy tắc bất thành văn: KHÔNG deploy production thứ Sáu chiều, lễ Tết, đêm. Nếu lỗi, team đi ăn rồi, không ai sửa được tới sáng thứ Hai.
  • Biết quyền của bạn trong hợp đồng. Agency có quyền lock deploy (chỉ họ deploy được) — đây là red flag. Bạn phải có quyền tự deploy hoặc thuê agency khác deploy mà không cần xin phép.

5 bước deploy điển hình

Mỗi lần deploy production của dự án web 2026 đi qua 5 bước. Lấy ví dụ vietcodex.com:

Bước 1 — Code trên máy dev

Lập trình viên viết code mới trong IDE (Cursor/VS Code/Windsurf) trên máy mình. Test local: pnpm dev, mở localhost:3000 xem chạy đúng.

Bước 2 — Push lên Git

git add .
git commit -m "feat: add codebase article to wiki"
git push origin main

Code được đẩy lên GitHub. Đây là điểm "không quay lại" — code đã lên cloud.

Bước 3 — CI/CD pipeline tự chạy

GitHub Actions (hoặc GitLab CI / Vercel) detect commit mới, tự động:

  1. Checkout code
  2. Install dependencies (pnpm install)
  3. Chạy linter + type check (pnpm lint && pnpm typecheck)
  4. Chạy test (pnpm test)
  5. Build production bundle (pnpm build)
  6. Build Docker image (nếu dùng container)
  7. Push image lên registry (Docker Hub, GitHub Container Registry)

Bước này 60-180 giây cho dự án vừa. Nếu test fail → DỪNG, không deploy. Nếu pass → đi tiếp.

Bước 4 — Deploy lên server production

Tuỳ stack:

  • Vercel/Netlify: tự pull build artifact, swap atomic. 5-30 giây.
  • Docker compose VPS: docker compose pull && docker compose up -d — replace container cũ. 10-60 giây.
  • Kubernetes: kubectl apply -f deployment.yaml — rolling update từng pod. 1-5 phút.

Trong bước này, load balancer chuyển traffic dần dần từ version cũ sang version mới — user không thấy gián đoạn.

Bước 5 — Verify + monitor

Sau deploy:

  1. Health check tự động: curl https://vietcodex.com/api/health → kỳ vọng 200 OK.
  2. Smoke test: 5 tác vụ chính (load homepage, login, view dashboard) chạy đúng.
  3. Monitor 15 phút đầu: error rate, response time, traffic. Nếu spike error → tự rollback.

Nếu mọi thứ OK → deploy thành công, đóng pipeline.

Manual deploy vs CI/CD tự động

Hai cách deploy chính:

Yếu tốManual deploy (FTP/SSH thủ công)CI/CD tự động
Triggered bằngNgười gõ lệnhMỗi git push (hoặc cron)
Thời gian5-30 phút (gõ + chờ + verify)1-5 phút (auto)
Risk human errorCao — quên copy file, lệnh saiThấp — script chạy lại y hệt
Tần suất1 lần/tuần là nhiềuNhiều lần/ngày
RollbackKhó — phải nhớ file cũ ở đâu1 click hoặc 1 commit
Audit logKhông cóĐầy đủ — ai push commit nào, deploy lúc nào
Setup ban đầu0 phút (chỉ cần biết FTP)2-8 giờ setup GitHub Actions / Vercel
Phù hợpDự án siêu nhỏ + 1 devMọi dự án có ≥2 dev hoặc deploy thường xuyên

Quy tắc 2026: mọi dự án nghiêm túc phải có CI/CD. Setup mất 1 buổi, save vài chục giờ trong năm và giảm bug đáng kể.

4 môi trường deploy chuẩn

Một dự án trưởng thành có 4 môi trường (environment) tách biệt:

Môi trườngMục đíchURL điển hìnhDữ liệu
Development (dev)Lập trình viên code + test trên máy mìnhlocalhost:3000DB local hoặc seed data
Staging (stg)Test với DB giả production trước khi go-livestaging.vietcodex.comDB clone production (xoá data nhạy cảm)
PreviewMỗi PR có URL riêng để reviewpr-123.vietcodex.comShared DB staging hoặc dev
Production (prod)User thực dùng — phải uptime caovietcodex.comDB thực, user thực, monitoring nghiêm túc

Một số team thêm môi trường thứ 5 — canary (deploy 5% user trước) hoặc internal (chỉ team nội bộ dùng).

Quy tắc vàng: code mới phải qua dev → staging → production. KHÔNG bao giờ deploy thẳng từ máy dev lên production. Vi phạm quy tắc này = nguyên nhân 80% sự cố production trong startup VN.

Rollback và zero-downtime — 3 chiến lược

Khi deploy version N gây lỗi, bạn cần quay về version Nāˆ’1 nhanh nhất. 3 chiến lược phổ biến:

Rolling update

Server: [v1] [v1] [v1] [v1]   ← traffic chia đều 4 instance
        ↓
Server: [v2] [v1] [v1] [v1]   ← replace 1 instance, check OK
        ↓
Server: [v2] [v2] [v1] [v1]   ← replace tiếp
        ↓
Server: [v2] [v2] [v2] [v2]   ← hoàn tất

Vercel + Kubernetes default. Rollback = replace ngược lại.

Blue-Green

Blue:  [v1] [v1] [v1]   ← đang nhận traffic
Green: [v2] [v2] [v2]   ← deploy xong, idle

↓ Switch DNS / load balancer

Blue:  [v1] [v1] [v1]   ← idle
Green: [v2] [v2] [v2]   ← nhận traffic

Rollback = switch lại sang Blue. 0 giây.

Canary

Production: 95% user → [v1]
            5% user  → [v2]   ← canary, monitor 30 phút
↓ Nếu OK, mở dần
Production: 70% user → [v1]
            30% user → [v2]
↓
Production: 100% user → [v2]

Pattern Stripe, Facebook dùng. Phù hợp khi traffic lớn + risk cao.

Hosting provider so sánh — VN context

Lựa chọn nơi deploy phù hợp dự án VN 2026:

ProviderLoạiGiá khởi điểmSetup timeLatency VNPhù hợp
VercelServerless$0 free → $20/mo5 phútTốt (CDN edge SG)Next.js, marketing site, MVP
NetlifyServerless$0 free → $19/mo5 phútOK (CDN HK)Static site, JAMstack
Cloudflare PagesServerless$0 free unlimited5 phútXuất sắc (HK + VN edge)Static + edge function
RailwayPaaS container$5/mo trial → trial pay-as-go15 phútOK (SG)Backend API + DB
Fly.ioPaaS global$0 free → ~$5/mo30 phútTốt (region SIN/HKG)Backend low-latency
Hetzner CloudVPS Đức€4.51/mo CX222-4 giờTrung bình (~200ms VN→Đức)Production VPS giá rẻ
VultrVPS global$6/mo2-4 giờTốt (SG, HK)VPS rẻ, latency thấp VN
DigitalOceanVPS + Managed$4/mo Droplet2-4 giờOK (SG)Phổ biến developer
AWS LightsailVPS đơn giản$3.50/mo1-2 giờTốt (SG)Vào AWS từ từ
AWS EC2VPS enterprise$0 free tier năm 11-3 ngàyTốt (SG)Scale lớn
Viettel IDCVPS VN200k/mo2-4 giờXuất sắc (dưới 10ms)Khách hàng VN, KYC pháp lý

Khuyến nghị 90% startup VN 2026: Vercel + Cloudflare Pages cho frontend, Railway / Fly.io / Hetzner cho backend, Supabase / Neon cho database. Tổng $0-30/tháng cho MVP.

Ví dụ thực tế: deploy vietcodex.com mỗi tuần

Số liệu từ repo vietcodex-app tuần 25/05/2026:

Chỉ sốGiá trị
Số lần deploy production11
Số commit47
Thời gian trung bình mỗi deploy4 phút 12 giây
Tỉ lệ deploy fail (CI test fail)2/11 = 18% (chấp nhận được)
Số lần rollback0
Downtime0 giây (zero-downtime qua Cloudflare Tunnel)
Bài wiki mới publish5 bài
Bug user báo cáo sau deploy1 (sửa trong 2 giờ)

Pipeline deploy của vietcodex hiện tại:

1. git push origin main
2. SSH tar source → /srv/vietcodex/ trên homeserver
3. docker compose build app (~90s pnpm install + 85s next build)
4. docker compose up -d (rolling update — 0 downtime)
5. Health check curl /api/health → 200

Tổng 3-5 phút. Cloudflare Tunnel route vietcodex.com192.168.110.50:3050 — không cần public IP, không cần mở port firewall.

Cái gì có thể sai

Vấn đềTriệu chứngCách phòng
Deploy fail vì missing env varApp start nhưng crash khi gọi tính năngValidate env at startup (Zod schema), CI check env list
Build OK local nhưng fail trên CILocal Mac/Windows, CI Linux khác behaviorDockerize build, dev cũng dùng container giống production
Deploy version mới làm hỏng version cũ user đang dùngCache JS bundle cũ + API mới không matchVersioning bundle (hash file name) + backward compat API
Migration DB fail giữa chừngProduction DB trong trạng thái không nhất quánMigration phải có DOWN script, test trên staging trước
Secrets leak vào CI logAPI key public trên GitHub Actions logMark secrets *** qua GitHub Secrets, KHÔNG echo
Deploy lock bởi agencyBạn không deploy được tự, lệ thuộc agencyHợp đồng có quyền deploy + nhận credentials hosting
Zero monitoring sau deployBug 6 tiếng mới ai báo cáoSentry / Datadog / UptimeRobot + alert Telegram/Slack
Quên ENV staging vs productionTest trên staging, production lại brokenEnv vars khác biệt phải document + tự sync khi thêm mới

Quy trình hợp đồng — quyền deploy

Trong hợp đồng thuê dev/agency, đảm bảo 3 điều khoản về deploy:

  1. Quyền truy cập hosting: bạn nhận đủ credentials (Vercel/AWS account, server SSH key) trong vòng 7 ngày sau handover.
  2. Pipeline + script deploy đầy đủ tài liệu: README có lệnh bash deploy.sh chạy được, hoặc workflow GitHub Actions có sẵn — bạn deploy được mà không cần hỏi agency.
  3. Quyền chuyển hosting: bạn có quyền migrate từ hosting của agency sang hosting riêng (Vercel → AWS chẳng hạn) mà không cần xin phép.

Agency rẻ thường vi phạm điều khoản 1+2 — "bạn cứ trả tiền, deploy để tôi lo" → khi bạn muốn đổi agency, mất nguyên dự án vì không có quyền deploy.

Tóm tắt 1 dòng

Deploy = đưa code mới chạy trên server cho user dùng. Khác upload. Đi qua 5 bước: code → git push → CI/CD test+build → server → verify. Pattern modern zero-downtime, rollback nhanh, deploy nhiều lần/ngày. 4 môi trường chuẩn: dev/staging/preview/production. Hợp đồng agency PHẢI có quyền deploy + đủ credentials hosting.

Đọc tiếp

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

Deploy và upload khác nhau ở đâu?
Upload = đưa file lên server (FTP, S3, Google Drive — file ngồi đó). Deploy = đưa code VÀ chạy nó cho user dùng được — bao gồm install dependencies, build, restart server, có thể chạy migration DB. Upload file ZIP vào hosting bằng FileZilla = upload, không phải deploy. Push code lên GitHub → CI/CD tự build → chạy trên server cho user = deploy hoàn chỉnh. Deploy 2026 hầu hết tự động qua CI/CD, không còn upload thủ công.
Bao lâu thì deploy 1 lần?
Tuỳ team + tuỳ giai đoạn. Số liệu thực tế ngành: (1) **Elite team** (Google, Netflix, Stripe): deploy production nhiều lần/ngày — Amazon deploy mỗi 11.7 giây năm 2015. (2) **High team** (startup tốt): 1-10 lần/ngày. (3) **Medium team** (đa số): 1-3 lần/tuần. (4) **Low team** (legacy): 1 lần/tháng hoặc lâu hơn. State of DevOps Report 2024 chứng minh team deploy thường xuyên ÍT bug hơn team deploy ít — vì mỗi lần deploy ít thay đổi → dễ rollback. VietCodex deploy production trung bình 8-12 lần/tuần.
Deploy có cần down site (downtime) không?
KHÔNG cần với pattern modern. Zero-downtime deploy phổ biến: (1) **Rolling update** — replace từng container/instance một, load balancer route sang instance mới khi sẵn sàng; (2) **Blue-green** — chạy 2 phiên bản (Blue đang live, Green mới), switch DNS/load balancer khi Green ready; (3) **Canary** — deploy lên 1-5% user trước, nếu OK rollout 100%. Vercel, Fly.io, Railway tự động zero-downtime. VPS tự setup cần Nginx reverse proxy + 2 instance. Down site = pattern cũ 'maintenance window' chỉ còn cho migration DB lớn hoặc system upgrade — không phải deploy code thông thường.
Tôi deploy được trên cloud nào? Vercel, AWS, hay tự VPS?
Quy tắc: complexity tăng dần → kiểm soát tăng dần → cost tăng dần. (1) **Vercel/Netlify/Cloudflare Pages** — Next.js/static site, deploy 30s, 0 setup, free tier rộng, lock-in thấp. Lý tưởng MVP + marketing site. (2) **Fly.io/Railway/Render** — Docker container bất kỳ stack, free tier nhỏ hơn, control nhiều hơn Vercel. (3) **Hetzner/DigitalOcean/Vultr VPS** — Linux box bạn quản hoàn toàn, $5-20/tháng, cần biết Docker + Nginx + SSL. (4) **AWS/GCP/Azure** — enterprise scale, IAM phức tạp, dễ vượt $1.000/tháng nếu config sai. Khuyến nghị 90% startup VN 2026: Vercel cho FE, Railway/Fly cho BE — migrate AWS khi >100k user.
Rollback là gì? Khi nào dùng?
Rollback = quay về phiên bản code trước (production version Nāˆ’1) sau khi deploy version N gây lỗi. Cách rollback: (1) Vercel/Netlify — 1 click 'Promote to production' phiên bản cũ; (2) Docker — `docker compose up -d` với image tag cũ; (3) Git + CI — revert commit và deploy lại. Quy tắc 'rollback nhanh hơn fix forward' — nếu bug trên production gây revenue loss, rollback trong 5 phút thay vì sửa + redeploy mất 30 phút. Premium pattern: keep 5-10 phiên bản recent trên server, rollback chỉ tốn 30 giây. Database schema change KHÓ rollback hơn — cần migration đảo ngược (down migration).
Continuous Deployment (CD) khác Continuous Integration (CI) thế nào?
**CI** (Continuous Integration — tích hợp liên tục): mỗi push code → tự động chạy test + build → báo pass/fail. Mục tiêu: phát hiện bug sớm, code merge sớm + thường xuyên. **CD** có 2 nghĩa: (a) **Continuous Delivery** — build sẵn version có thể deploy bất cứ lúc nào, nhưng deploy bằng tay (bấm nút); (b) **Continuous Deployment** — mọi commit pass test tự deploy lên production luôn, không có bước bấm nút. Pipeline điển hình: CI → CD (delivery) → staging → manual approve → production. Hoặc Aggressive: CI → CD (deployment) → production. Stripe, Netflix dùng deployment (auto). Banking, healthcare dùng delivery (manual approve).
Deploy có chi phí gì?
Deploy CHẠY không tốn tiền nhiều, nhưng **chạy production** thì có: (1) **Hosting**: Vercel free đến 100GB bandwidth/tháng, sau đó $20/tháng Pro. VPS Hetzner CX22 €5/tháng. AWS ec2.t3.small ~$15/tháng + bandwidth. (2) **CI/CD compute**: GitHub Actions free 2.000 phút/tháng public repo, private 2.000 phút free. (3) **Database**: Supabase free 500MB, Neon free 0.5GB. (4) **CDN + bandwidth**: Cloudflare free unlimited (best deal). Tổng chi phí 1 startup VN typical 2026: $0-30/tháng tới khi có khách trả tiền. Sau đó scale theo traffic, thường $50-300/tháng cho 10k-100k user.
Lần đầu deploy 1 dự án mới mất bao lâu?
Tuỳ stack + người làm: (1) **Vercel + Next.js** (no DB): 10-20 phút — connect GitHub, deploy, configure domain DNS. (2) **Railway + Postgres + Node.js**: 30-60 phút — provision DB, set env vars, deploy. (3) **VPS Hetzner tự setup**: 2-6 giờ — install Docker, Nginx, SSL Let's Encrypt, deploy script, monitor. (4) **AWS từ scratch**: 1-3 ngày — VPC, IAM, EC2, RDS, ALB, ACM, Route53. Sau khi setup xong lần đầu, deploy version sau là 30s-5 phút. VietCodex deploy lần đầu lên Hetzner mất 3 giờ. Khuyến nghị: dùng Vercel cho lần đầu nếu không có DevOps experience.