
Founder Việt làm SaaS thường rơi vào 2 trap: hoặc over-spec mua VPS 4 triệu/tháng từ MVP đầu tiên rồi đốt vốn, hoặc under-spec mua gói 200k để rồi khi launch có 500 user thì server sập. Bài này đưa ra framework cụ thể chọn cấu hình Cloud VPS Việt Nam theo từng giai đoạn startup, tính toán resource thật cho từng layer (web, database, queue, cache), và bảng cost ladder từ 0 đến 100k user.
Tại sao cần Cloud VPS thay vì shared hosting hay AWS?
Đa số startup Việt 2026 chọn Cloud VPS Việt Nam thay vì AWS/GCP cho giai đoạn 0-10k user vì 3 lý do:
- Giá rẻ hơn 5-10x: VPS 4vCPU/4GB ở VN ~639k/tháng vs AWS t3.xlarge ~2-3 triệu/tháng (chưa tính bandwidth out đắt khủng).
- Latency thấp với người dùng Việt: datacenter VN cho ping 5-15ms, AWS Singapore 30-50ms.
- Billing dự đoán được: 1 invoice/tháng cố định, không có bill bất ngờ vì bandwidth out như AWS.
Khi nào chuyển AWS/GCP? Khi cần multi-region, managed services (RDS, Lambda) tiết kiệm thời gian dev hơn cost server, hoặc khách hàng enterprise yêu cầu compliance đặc biệt. Trước đó, Cloud VPS Việt Nam là choice hợp lý.
Framework chọn cấu hình: tính từng layer
Đừng đoán "VPS 4GB chắc đủ". Tính cụ thể từng layer:
| Layer | RAM ước tính | Ghi chú |
|---|---|---|
| OS (Ubuntu/Debian) | ~300-500MB | Idle Linux server |
| Web server (Nginx, Caddy) | ~100-200MB | Reverse proxy nhẹ |
| App server (Node.js) | ~150-300MB per process | x N process |
| App server (Laravel-PHP-FPM) | ~50-80MB per worker | x N worker, scale theo concurrent request |
| App server (Python Gunicorn) | ~80-200MB per worker | Phụ thuộc framework |
| PostgreSQL idle | ~150MB + shared_buffers | shared_buffers thường 25% RAM |
| MySQL/MariaDB idle | ~200MB + innodb_buffer_pool | innodb_buffer_pool ~50% RAM cho DB-heavy |
| Redis cache | ~5MB base + data size | Data size phụ thuộc cache scope |
| Queue worker (BullMQ, Celery, Sidekiq) | ~80-200MB per worker | x N worker theo job rate |
| Monitoring (Netdata) | ~150-300MB | Optional nhưng nên có |
Cộng lại: một app SaaS Laravel cơ bản (Nginx + PHP-FPM 4 worker + PostgreSQL + Redis + 1 queue worker) đã chiếm ~1,5-2GB RAM idle. Cần thêm buffer 50% cho traffic burst. Vậy VPS 2GB chỉ đủ MVP nhẹ, sang traffic thật phải 4GB.
Cost ladder: VPS theo từng giai đoạn startup
Giai đoạn 0: MVP, validate idea (0-100 user)
Gói khuyến nghị: VPS 20 (1vCPU/1GB/20GB - 199k/tháng) hoặc VPS 30 (2vCPU/2GB/30GB - 299k/tháng).
Mục tiêu: validate idea nhanh nhất, đốt ít tiền nhất. Có thể chấp nhận downtime ngắn. Stack typical: Laravel/Express + SQLite hoặc PostgreSQL nhỏ + 1 process.
Mẹo: dùng SQLite cho MVP nếu app không multi-tenant phức tạp. Tiết kiệm RAM cho PostgreSQL, deploy đơn giản hơn (file backup).
Giai đoạn 1: Public launch, traffic 100-1000 user/ngày
Gói khuyến nghị: VPS 50 (4vCPU/4GB/50GB - 639k/tháng).
Mục tiêu: chạy mượt với 1k user/ngày, 50-100 concurrent request đỉnh. Stack: Nginx + 4 worker PHP-FPM hoặc 2 process Node.js + PostgreSQL với shared_buffers 1GB + Redis cache + 1-2 queue worker.
Bắt đầu setup monitoring: Netdata hoặc Grafana + Prometheus. Backup database hàng ngày.
Giai đoạn 2: Growth, traffic 1k-10k user/ngày
Gói khuyến nghị: VPS 80 (6vCPU/6GB/80GB - 999k/tháng) hoặc VPS 160 (8vCPU/8GB/160GB - 1.790.000đ/tháng).
Mục tiêu: chạy stable với 10k user/ngày, 500-1000 concurrent đỉnh. Stack có thể bắt đầu tách: database lên VPS riêng nếu PostgreSQL chiếm 50%+ RAM. Queue worker scale theo job rate.
Xem xét tách: 1 VPS cho web + 1 VPS cho database. Lợi ích: scale độc lập, restart web không ảnh hưởng DB. Chi phí: ~2x nhưng đáng nếu uptime quan trọng.
Giai đoạn 3: Scale, 10k-100k user/ngày
Gói khuyến nghị: VPS 250 (10vCPU/10GB/250GB - 2.190.000đ/tháng) hoặc cao hơn cho web + VPS riêng cho database.
Stack production: 2-3 VPS web đằng sau load balancer + 1-2 VPS database (primary + replica) + Redis cluster + queue workers tách riêng. Monitoring đầy đủ. CDN cho static assets (Cloudflare free tier).
Giai đoạn 4: Enterprise scale (100k+ user/ngày)
Cân nhắc multi-region, Kubernetes, managed database (DigitalOcean Managed PostgreSQL, AWS RDS), CDN trả phí (Cloudflare Pro/Business). Cost lên 10-30 triệu/tháng infra. Lúc này startup đã có revenue đủ trả.
Bảng cost theo user (ước tính cho SaaS B2B điển hình)
| Số user active | Cấu hình | Cost/tháng | Cost/user |
|---|---|---|---|
| 1-100 (MVP) | 1 VPS 30 | 299k | 3-30k |
| 100-1.000 | 1 VPS 50 | 639k | 0,6-6k |
| 1.000-10.000 | 1 VPS 80 hoặc 160 | 999k - 1,79tr | 0,1-1,8k |
| 10.000-50.000 | VPS 250 web + VPS 160 DB | ~4-5tr | 0,08-0,5k |
| 50.000-100.000 | 2x VPS 320 web + VPS 250 DB + LB | ~8-12tr | 0,08-0,24k |
Lưu ý: cost/user giảm mạnh khi scale (kinh tế quy mô). Tại 100k user, cost infra chỉ ~80-240đ/user/tháng, dễ profit nếu pricing 50-200k/tháng/user.
Câu hỏi đúng trước khi mua VPS startup
Đừng hỏi "VPS bao nhiêu RAM đủ?" Hỏi:
- Database lớn cỡ nào sau 6 tháng? Quyết định disk size. Nhiều SaaS B2B chỉ vài GB DB sau năm 1, nhưng SaaS UGC (user uploads, posts) có thể 100GB sớm.
- Bao nhiêu concurrent request đỉnh? Quyết định số worker, từ đó RAM. SaaS B2B làm việc giờ hành chính có pattern khác social app (peak tối-cuối tuần).
- Có job nền nặng không (gửi email, sync API, xử lý file)? Quyết định số queue worker. App có nhiều job nền cần RAM nhiều.
- Có cần real-time (WebSocket, SSE)? WebSocket giữ connection mở = RAM cho mỗi user online. 1k user online qua WebSocket = ~200-500MB RAM.
- Khách hàng ở Việt Nam hay quốc tế? Quyết định location datacenter.
- Có cần file upload không (avatar, document)? Quyết định disk + cân nhắc Object Storage (S3, R2) thay vì VPS lớn.
Pattern: vertical scale vs horizontal scale
Khi server bị slow, có 2 cách scale:
Vertical scale (scale up): nâng cấp gói VPS
Tăng từ VPS 50 lên VPS 80 lên VPS 160. Đơn giản, không cần đổi code. Hầu hết nhà cung cấp VPS có nút "Upgrade" trong control panel, restart trong vài phút là xong. Phù hợp cho 0-50k user.
Giới hạn: 1 VPS có max RAM/CPU. Đến VPS 320 (12vCPU/12GB) là gần đỉnh, cần horizontal.
Horizontal scale (scale out): nhiều VPS, load balancer
Thay vì 1 VPS to, dùng 2-4 VPS nhỏ đằng sau load balancer (Nginx, Caddy, HAProxy). Database tách riêng. Cần code stateless (không lưu session trên local disk, dùng Redis hoặc DB).
Phức tạp hơn nhưng scale vô hạn. Phù hợp cho 50k+ user hoặc app cần high availability (1 VPS chết, các VPS khác vẫn phục vụ).
Stack recommendation: 3 setup phổ biến cho Cloud VPS Việt Nam
Setup 1: All-in-one (MVP, < 1k user)
1 VPS chạy tất cả: Nginx + App + DB + Redis + Worker.
# /etc/nginx/sites-enabled/myapp.conf
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
}
}
Đơn giản, đủ cho MVP. Risk: 1 service crash kéo theo tất cả.
Setup 2: Web + DB tách (1k-10k user)
VPS A: Nginx + App + Worker. VPS B: PostgreSQL + Redis.
Setup PostgreSQL listen trên private IP của VPS B, App ở VPS A connect qua private network. Bảo mật: firewall chỉ cho VPS A access port 5432 của VPS B.
# /etc/postgresql/16/main/postgresql.conf
listen_addresses = '10.0.0.2' # private IP
# /etc/postgresql/16/main/pg_hba.conf
host myapp_db myapp_user 10.0.0.1/32 scram-sha-256
Setup 3: HA setup (10k+ user)
2 VPS web sau Cloudflare/Caddy Load Balancer. 1 VPS DB primary + 1 replica. Redis dedicated. Worker queue trên VPS riêng.
Cần CI/CD deploy đồng bộ ra nhiều VPS web (GitHub Actions deploy qua SSH, hoặc Coolify/Dokploy).
Backup strategy bắt buộc cho startup
Đừng tin "nhà cung cấp có backup". Backup thật là:
- Daily DB dump: cron job dump PostgreSQL lên Object Storage (R2, B2) mỗi ngày. Retain 30 ngày.
- Weekly VPS snapshot: dùng feature snapshot của nhà cung cấp. Retain 4 weeks.
- Offsite backup: ít nhất 1 copy ở khác provider/region. Tránh trường hợp 1 datacenter sập = mất hết.
- Test restore quý/lần: backup không test = không phải backup. Restore vào VPS test xem có chạy được không.
#!/bin/bash
# /usr/local/bin/db-backup.sh
DATE=$(date +%Y%m%d)
DB_NAME=myapp_db
BACKUP_DIR=/var/backups/postgres
mkdir -p $BACKUP_DIR
pg_dump -U postgres -Fc $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.dump
# Upload to S3/R2
aws s3 cp $BACKUP_DIR/${DB_NAME}_${DATE}.dump \
s3://mybucket/db-backups/ \
--endpoint-url https://your-r2-endpoint
# Xóa backup local cũ hơn 7 ngày
find $BACKUP_DIR -name "*.dump" -mtime +7 -delete
# Crontab: 0 3 * * * /usr/local/bin/db-backup.sh
Monitoring: biết server sắp sập trước khi user phàn nàn
Tối thiểu phải monitor:
- CPU/RAM/Disk usage: alert khi vượt 80%.
- Disk I/O: nếu wait I/O cao, ổ cứng quá tải hoặc app query không tối ưu.
- HTTP error rate: 5xx error > 1% là alert.
- Response time: P95 > 2s là alert.
- Database connection pool: nếu vượt 80% slot, sắp out of connection.
Tool free đề xuất: Netdata (real-time dashboard, alert qua Telegram/Slack), UptimeRobot (external uptime check), Sentry (error tracking app).
Khi nào nên tách database khỏi web server?
Dấu hiệu cần tách:
- PostgreSQL chiếm > 50% RAM tổng VPS.
- Query đôi khi chậm bất thường khi web traffic burst.
- Restart web app làm interrupt DB query (postgres connection drop).
- Cần backup DB không ảnh hưởng web traffic.
Lợi ích tách: scale độc lập, DB nâng cấp không ảnh hưởng web, security boundary rõ ràng.
Câu hỏi thường gặp khi thuê Cloud VPS startup
Bao lâu nên upgrade gói VPS?
Khi CPU/RAM sustained 70%+ trong giờ peak. Upgrade trước khi crash, không phải sau.
VPS Việt Nam vs DigitalOcean Singapore: chọn gì?
Khách Việt: VPS VN. Khách quốc tế: DO Singapore. Khách mixed: 2 VPS ở 2 location + Cloudflare routing. DO Singapore ping VN ~30-50ms, cảm nhận chậm hơn rõ.
Có nên dùng managed PostgreSQL của DigitalOcean/Linode thay vì self-host?
Managed DB tốt cho startup không có dev senior, nhưng giá đắt gấp 2-3x VPS tự host. Nếu có dev biết postgres, self-host trên Cloud VPS Việt Nam tiết kiệm nhiều.
Khi nào cần CDN?
Khi có static asset (image, video, JS bundle) > 1MB và có khách quốc tế. Cloudflare free tier đủ cho 99% startup giai đoạn 0-50k user.
Bài viết liên quan
Bắt đầu hành trình SaaS với Cloud VPS đúng giá
TND có 8 gói Cloud VPS từ 199k (MVP) đến 480GB top tier. Ceph SSD Enterprise NVMe, RAM ECC, datacenter VN + US, khởi tạo 60 giây. Upgrade trong vài phút khi cần scale.
Tóm gọn: Cloud VPS TND Việt Nam rất phù hợp cho startup giai đoạn 0-50k user. Bắt đầu từ VPS 30 (299k) khi MVP, upgrade lên VPS 50/80/160 khi traffic tăng. Tách database khi RAM database vượt 50% VPS. Đầu tư monitoring và backup từ ngày đầu. Khi đến 100k user, mới cần nghĩ đến đa region / Kubernetes - lúc đó startup đã đủ revenue để chi cho cloud lớn hơn. Tránh trap over-engineer ngay từ đầu, cũng tránh trap thuê VPS giá rẻ quá mức rồi server sập khi launch.



