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.
Mục lục bài viết(20)
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:
- Bật đèn, mở cửa
- Kích hoạt máy POS
- Bảng hiệu chỉnh sáng
- 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 mainCode đượ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:
- Checkout code
- Install dependencies (
pnpm install) - Chạy linter + type check (
pnpm lint && pnpm typecheck) - Chạy test (
pnpm test) - Build production bundle (
pnpm build) - Build Docker image (nếu dùng container)
- 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:
- Health check tự động:
curl https://vietcodex.com/api/health→ kỳ vọng200 OK. - Smoke test: 5 tác vụ chính (load homepage, login, view dashboard) chạy đúng.
- 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ằng | Người gõ lệnh | Mỗi git push (hoặc cron) |
| Thời gian | 5-30 phút (gõ + chờ + verify) | 1-5 phút (auto) |
| Risk human error | Cao — quên copy file, lệnh sai | Thấp — script chạy lại y hệt |
| Tần suất | 1 lần/tuần là nhiều | Nhiều lần/ngày |
| Rollback | Khó — phải nhớ file cũ ở đâu | 1 click hoặc 1 commit |
| Audit log | Không có | Đầy đủ — ai push commit nào, deploy lúc nào |
| Setup ban đầu | 0 phút (chỉ cần biết FTP) | 2-8 giờ setup GitHub Actions / Vercel |
| Phù hợp | Dự án siêu nhỏ + 1 dev | Mọ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ường | Mục đích | URL điển hình | Dữ liệu |
|---|---|---|---|
Development (dev) | Lập trình viên code + test trên máy mình | localhost:3000 | DB local hoặc seed data |
Staging (stg) | Test với DB giả production trước khi go-live | staging.vietcodex.com | DB clone production (xoá data nhạy cảm) |
| Preview | Mỗi PR có URL riêng để review | pr-123.vietcodex.com | Shared DB staging hoặc dev |
Production (prod) | User thực dùng — phải uptime cao | vietcodex.com | DB 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:
| Provider | Loại | Giá khởi điểm | Setup time | Latency VN | Phù hợp |
|---|---|---|---|---|---|
| Vercel | Serverless | $0 free → $20/mo | 5 phút | Tốt (CDN edge SG) | Next.js, marketing site, MVP |
| Netlify | Serverless | $0 free → $19/mo | 5 phút | OK (CDN HK) | Static site, JAMstack |
| Cloudflare Pages | Serverless | $0 free unlimited | 5 phút | Xuất sắc (HK + VN edge) | Static + edge function |
| Railway | PaaS container | $5/mo trial → trial pay-as-go | 15 phút | OK (SG) | Backend API + DB |
| Fly.io | PaaS global | $0 free → ~$5/mo | 30 phút | Tốt (region SIN/HKG) | Backend low-latency |
| Hetzner Cloud | VPS Đức | €4.51/mo CX22 | 2-4 giờ | Trung bình (~200ms VN→Đức) | Production VPS giá rẻ |
| Vultr | VPS global | $6/mo | 2-4 giờ | Tốt (SG, HK) | VPS rẻ, latency thấp VN |
| DigitalOcean | VPS + Managed | $4/mo Droplet | 2-4 giờ | OK (SG) | Phổ biến developer |
| AWS Lightsail | VPS đơn giản | $3.50/mo | 1-2 giờ | Tốt (SG) | Vào AWS từ từ |
| AWS EC2 | VPS enterprise | $0 free tier năm 1 | 1-3 ngày | Tốt (SG) | Scale lớn |
| Viettel IDC | VPS VN | 200k/mo | 2-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 production | 11 |
| Số commit | 47 |
| Thời gian trung bình mỗi deploy | 4 phút 12 giây |
| Tỉ lệ deploy fail (CI test fail) | 2/11 = 18% (chấp nhận được) |
| Số lần rollback | 0 |
| Downtime | 0 giây (zero-downtime qua Cloudflare Tunnel) |
| Bài wiki mới publish | 5 bài |
| Bug user báo cáo sau deploy | 1 (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.com → 192.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ứng | Cách phòng |
|---|---|---|
| Deploy fail vì missing env var | App start nhưng crash khi gọi tính năng | Validate env at startup (Zod schema), CI check env list |
| Build OK local nhưng fail trên CI | Local Mac/Windows, CI Linux khác behavior | Dockerize build, dev cũng dùng container giống production |
| Deploy version mới làm hỏng version cũ user đang dùng | Cache JS bundle cũ + API mới không match | Versioning bundle (hash file name) + backward compat API |
| Migration DB fail giữa chừng | Production DB trong trạng thái không nhất quán | Migration phải có DOWN script, test trên staging trước |
| Secrets leak vào CI log | API key public trên GitHub Actions log | Mark secrets *** qua GitHub Secrets, KHÔNG echo |
| Deploy lock bởi agency | Bạn không deploy được tự, lệ thuộc agency | Hợp đồng có quyền deploy + nhận credentials hosting |
| Zero monitoring sau deploy | Bug 6 tiếng mới ai báo cáo | Sentry / Datadog / UptimeRobot + alert Telegram/Slack |
| Quên ENV staging vs production | Test trên staging, production lại broken | Env 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:
- 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.
- Pipeline + script deploy đầy đủ tài liệu: README có lệnh
bash deploy.shchạy được, hoặc workflow GitHub Actions có sẵn — bạn deploy được mà không cần hỏi agency. - 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
- Codebase là gì — code phải có codebase trước rồi mới deploy được
- Git và GitHub là gì — git push là trigger của CI/CD pipeline
- Domain, Hosting, DNS — deploy xong cần domain trỏ về server
- Cloud, VPS, Shared hosting — nơi nào để deploy phù hợp dự án
- Web hoạt động thế nào — hành trình 200ms — sau deploy, user truy cập thế nào