Build Web App Không Cần VPS: Supabase Là Gì Và Có Thể Chạy Free Đến Mức Nào?
Khám phá kiến trúc xây dựng Web App không cần thuê VPS với Supabase và Cloudflare Pages: PostgreSQL thật, API tự động, Auth, Realtime, bảng quota Free Plan và lưu ý bảo mật RLS.

Trước đây, muốn đưa một web app lên Internet thường phải chuẩn bị khá nhiều thứ:
- Thuê VPS
- Cài Linux
- Cài Nginx
- Cài database
- Deploy backend
- Cấu hình SSL
- Backup dữ liệu
- Monitoring
- Update hệ điều hành
- Xử lý khi server hết RAM, đầy disk hoặc service chết
Nhưng với các nền tảng cloud hiện nay, một web app hoàn chỉnh có thể được triển khai mà không cần tự quản lý VPS.
Một mô hình khá đơn giản là:
GitHub
↓
Cloudflare Pages / Vercel
↓
React / Vue / Next.js
↓
Supabase
├── PostgreSQL
├── API
├── Authentication
├── Storage
├── Realtime
└── Edge Functions
Frontend được host trên CDN, còn database và phần lớn backend được Supabase quản lý.
Không có nghĩa là ứng dụng “không có server”. Server vẫn tồn tại, chỉ là chúng ta không còn phải tự cài đặt và vận hành nó.
Supabase là gì?
Supabase là một nền tảng Backend as a Service – BaaS.
Thay vì tự dựng:
Ubuntu
↓
Nginx
↓
Node.js / .NET / PHP
↓
PostgreSQL
↓
Redis
↓
Authentication
↓
File Storage
Supabase cung cấp sẵn nhiều thành phần backend trong một project.
Quan trọng nhất, database phía dưới của Supabase là PostgreSQL thật, không phải một database proprietary được thiết kế riêng cho nền tảng.
Mỗi project Supabase hiện bao gồm PostgreSQL, API tự động sinh, Authentication, Storage, Realtime và Edge Functions.
1. PostgreSQL Database
Đây là phần mình đánh giá hấp dẫn nhất của Supabase.
Mỗi project có một PostgreSQL database riêng.
Bạn vẫn có thể sử dụng:
SELECT
INSERT
UPDATE
DELETE
JOIN
VIEW
FUNCTION
TRIGGER
INDEX
và gần như toàn bộ những thứ quen thuộc của PostgreSQL.
Ví dụ một ứng dụng bảng xếp hạng website có thể có:
sites
users
boosts
payments
clicks
Frontend có thể lấy dữ liệu trực tiếp thông qua Supabase SDK hoặc API.
Supabase không biến PostgreSQL thành một database khác; bạn vẫn có quyền làm việc trực tiếp với PostgreSQL và các extension của nó.
2. Không cần tự viết REST API cho mọi thứ
Một điểm khá thú vị là Supabase sử dụng PostgREST để tự tạo REST API từ PostgreSQL.
Ví dụ có table:
sites
Supabase có thể cung cấp API tương ứng để ứng dụng query dữ liệu mà không cần tự viết một backend kiểu:
GET /api/sites
GET /api/sites/:id
POST /api/sites
PUT /api/sites/:id
Flow có thể đơn giản thành:
React
↓
Supabase SDK
↓
Supabase API
↓
PostgreSQL
Đây là lý do một developer có thể build MVP rất nhanh.
Supabase sử dụng PostgREST để expose PostgreSQL thành RESTful API và cũng hỗ trợ GraphQL thông qua extension pg_graphql.
3. Authentication có sẵn
Nếu ứng dụng cần đăng nhập, Supabase Auth đã xử lý sẵn nhiều thứ như:
- Email/password
- Magic link
- OAuth
- JWT
- Social login
- Quản lý session
- Refresh token
Bạn không cần tự tạo toàn bộ hệ thống:
users
password hashing
JWT
refresh token
forgot password
email verification
Auth của Supabase cũng tích hợp trực tiếp với PostgreSQL Row Level Security, giúp giới hạn dữ liệu theo từng user.
4. Storage
Ứng dụng cần lưu:
avatar
ảnh sản phẩm
file upload
document
thumbnail
thì có thể sử dụng Supabase Storage.
Thay vì phải:
VPS
└── /uploads
hoặc tự dựng S3-compatible storage.
Storage cũng có thể áp dụng policy để quy định user nào được đọc hoặc upload file.
5. Realtime
Supabase hỗ trợ realtime qua WebSocket.
Ví dụ database có một record mới:
boost +1
frontend có thể nhận thay đổi và cập nhật:
Rank #3
↓
Rank #2
mà không cần F5 trang.
Realtime phù hợp với:
- Dashboard
- Chat
- Notification
- Tracking
- Game
- Leaderboard
- Collaborative application
Supabase Realtime sử dụng một cluster Elixir phân tán và WebSocket để truyền dữ liệu realtime tới client.
6. Edge Functions – khi vẫn cần code backend
Không phải thứ gì cũng nên cho frontend gọi trực tiếp database.
Ví dụ:
Thanh toán
Webhook
Gửi email
API key bí mật
Xử lý dữ liệu nhạy cảm
Gọi API bên thứ ba
Những trường hợp này có thể đưa vào Supabase Edge Functions.
Kiến trúc:
Browser
↓
Edge Function
↓
Payment API
↓
PostgreSQL
Code chạy phía server nên API secret không phải đưa xuống trình duyệt.
Edge Functions của Supabase chạy trên Deno runtime và được phân phối qua hạ tầng edge, phù hợp cho API endpoint, webhook và các tác vụ server-side nhẹ.
Vậy một web app không cần VPS hoạt động như thế nào?
Ví dụ chúng ta xây một app bằng React.
Frontend
Code:
React + Vite
đẩy lên:
GitHub
sau đó Cloudflare Pages tự động:
Git Push
↓
Build
↓
Deploy
↓
CDN
Website có thể chạy trên:
example.com
Backend
Thay vì thuê một VPS khác để chạy database và API:
Supabase
├── PostgreSQL
├── Auth
├── Storage
├── API
├── Realtime
└── Edge Functions
Frontend kết nối Supabase thông qua SDK.
Toàn bộ mô hình trở thành:
┌─────────────┐
│ GitHub │
└──────┬──────┘
│ Push
↓
┌───────────────────┐
│ Cloudflare Pages │
│ React / Vite │
└─────────┬─────────┘
│
HTTPS / API
│
↓
┌───────────────────┐
│ Supabase │
├───────────────────┤
│ PostgreSQL │
│ Authentication │
│ Storage │
│ Realtime │
│ Edge Functions │
└───────────────────┘
Không phải SSH vào server.
Không phải:
apt update
systemctl restart
docker restart
certbot renew
Và cũng không cần ngồi canh PostgreSQL chết lúc 2 giờ sáng.
Supabase Free được bao nhiêu?
Đây là phần khá hấp dẫn cho project cá nhân, MVP và startup nhỏ.
Tại thời điểm tháng 8/2026, Free Plan của Supabase có một số giới hạn chính:
| Tài nguyên | Free Plan |
|---|---|
| Free projects | 2 |
| PostgreSQL Database | 500 MB / project |
| File Storage | 1 GB |
| Egress | 5 GB |
| Monthly Active Users | 50.000 |
| Edge Functions | 500.000 lượt gọi |
| Realtime messages | 2 triệu |
| Realtime peak connections | 200 |
Các quota trên được Supabase công bố trong tài liệu billing hiện tại.
Với một website nhỏ, tool nội bộ hoặc MVP thì con số này thực tế khá thoải mái.
500 MB database có ít không?
Nhìn qua thì 500 MB có vẻ nhỏ.
Nhưng nếu dữ liệu chủ yếu là:
users
website
title
description
ranking
transaction ID
click count
settings
thì 500 MB chứa được khá nhiều record.
Thứ làm database tăng nhanh thường là:
- Log quá nhiều
- Tracking event từng request
- Lưu JSON lớn
- Lưu lịch sử không dọn
- Lưu file trực tiếp trong database
Ảnh và file nên đưa vào Storage thay vì nhét vào PostgreSQL.
Có một điểm cần lưu ý với Free Plan
Supabase có thể pause project Free nếu project có mức hoạt động thấp trong khoảng 7 ngày.
Project đã bị pause có thể resume lại; Supabase hiện cho phép restore project bị pause trong tối đa một năm.
Các project thuộc paid plan không bị auto-pause theo cơ chế này.
Vì vậy Free Plan rất hợp để:
Học tập
Demo
Lab
Portfolio
MVP
Side project
Ứng dụng nhỏ
Nhưng với hệ thống production tạo doanh thu và cần uptime ổn định, nên cân nhắc nâng lên plan trả phí khi dự án bắt đầu phát triển.
Ưu điểm của mô hình này
1. Không phải quản lý VPS
Đây là lợi ích dễ thấy nhất.
Không cần quản lý:
CPU
RAM
Disk
OS
Firewall server
Docker
PostgreSQL service
SSL
Backup script
Developer tập trung nhiều hơn vào sản phẩm.
2. Deploy cực nhanh
Một MVP có thể từ:
Code
đến:
Production
chỉ trong thời gian rất ngắn.
Frontend deploy bằng Git.
Database tạo bằng dashboard hoặc SQL.
API được sinh tự động.
3. Chi phí khởi đầu gần như bằng 0
Một stack:
GitHub
+
Cloudflare Pages
+
Supabase Free
có thể đủ để vận hành một ứng dụng nhỏ mà chưa cần thuê VPS hàng tháng.
Điều này khá phù hợp khi chưa biết sản phẩm có người dùng hay không.
4. PostgreSQL chuẩn
Đây là lợi thế lớn so với một số Backend-as-a-Service khác.
Nếu sau này không muốn dùng Supabase nữa, dữ liệu vẫn là PostgreSQL.
Việc migration sang:
AWS RDS
Google Cloud SQL
Azure PostgreSQL
VPS PostgreSQL
Neon
thường dễ hình dung hơn so với việc bị khóa vào một database proprietary.
5. Scale dễ hơn giai đoạn đầu
Nếu traffic tăng đột biến, bạn không phải ngay lập tức ngồi:
resize VPS
tăng RAM
cấu hình load balancer
scale backend
Một phần vấn đề hạ tầng được nhà cung cấp xử lý.
Nhược điểm
Không có mô hình nào hoàn hảo.
Supabase cũng có một số điểm cần cân nhắc.
1. Phụ thuộc nhà cung cấp
Nếu Supabase gặp sự cố:
Database
Auth
Realtime
API
của ứng dụng có thể bị ảnh hưởng.
Với VPS tự host, bạn kiểm soát hạ tầng nhiều hơn.
Đổi lại, bạn cũng phải tự chịu trách nhiệm khi nó chết.
2. Free không phải là vô hạn
Khi app lớn lên:
Database
Storage
Bandwidth
Realtime
Function invocation
đều có giới hạn.
Đến một thời điểm nhất định sẽ phải trả phí.
Do đó “serverless” không đồng nghĩa với:
miễn phí mãi mãi.
Nó chủ yếu giúp chi phí ban đầu thấp và giảm công vận hành.
3. Không phù hợp mọi workload
Nếu ứng dụng cần:
CPU chạy liên tục
FFmpeg
AI model lớn
GPU
background worker dài
xử lý video nặng
custom daemon
SIP Server
Asterisk
FreeSWITCH
thì Supabase không thể thay thế VPS.
Ví dụ:
Website SaaS → Supabase ✅
CRM nhỏ → Supabase ✅
Dashboard → Supabase ✅
Leaderboard → Supabase ✅
Asterisk Server → Supabase ❌
AI GPU inference server → Supabase ❌
Security có an toàn không?
Supabase có thể dùng production, nhưng developer vẫn phải cấu hình đúng.
Sai lầm phổ biến nhất là nghĩ rằng:
Dùng Supabase rồi thì database tự động an toàn.
Không hẳn.
Đặc biệt phải hiểu Row Level Security – RLS.
Ví dụ:
orders
payments
users
không nên để anonymous user đọc toàn bộ.
Policy phải xác định:
Ai được SELECT?
Ai được INSERT?
Ai được UPDATE?
Được xem record nào?
Supabase Auth kết hợp JWT với PostgreSQL RLS để kiểm soát quyền truy cập theo từng dòng dữ liệu.
Tuyệt đối không đưa Service Role Key ra frontend
Frontend có thể sử dụng public/publishable key theo thiết kế của Supabase.
Nhưng:
service_role
phải giữ ở server-side.
Ví dụ:
Browser
↓
Edge Function
↓ service_role
Supabase
Không được:
Browser
↓ service_role ❌
Supabase
Nếu key có quyền cao bị lộ, attacker có thể bypass nhiều lớp permission của database.
Mô hình nào phù hợp nhất?
Một kiến trúc khá đẹp cho project nhỏ hiện nay là:
DOMAIN
│
↓
Cloudflare
│
├── CDN
├── DDoS Protection
├── WAF
└── Rate Limit
│
↓
Cloudflare Pages
React / Vue / Next
│
↓
Supabase
├── PostgreSQL
├── Authentication
├── Storage
├── API
├── Realtime
└── Functions
Source code:
Local
↓
GitHub
↓
CI/CD
↓
Production
Đây là một stack khá thú vị vì hầu như không có server nào chúng ta phải SSH vào để vận hành hàng ngày.
Khi nào nên dùng Supabase?
Supabase rất phù hợp cho:
- SaaS
- MVP
- Startup
- Landing page có database
- Directory website
- Marketplace nhỏ
- Dashboard
- Tool nội bộ
- Portfolio có backend
- Authentication system
- Realtime application
- Web app được phát triển nhanh với AI coding
Đặc biệt với mô hình AI-assisted development, việc có sẵn database, auth và API giúp giảm rất nhiều phần infrastructure boilerplate.
Khi nào nên dùng VPS?
VPS vẫn rất đáng dùng nếu bạn cần:
- Toàn quyền hệ điều hành
- Docker Compose phức tạp
- Nhiều microservice
- Background worker chạy liên tục
- Custom networking
- Redis/RabbitMQ/Kafka riêng
- Media processing
- Voice/Video server
- Asterisk/FreeSWITCH
- Hệ thống đặc thù cần quyền root
Có nghĩa là Supabase không “giết chết VPS”.
Hai mô hình giải quyết hai bài toán khác nhau.
Kết luận
Trước đây một web app đơn giản có thể cần:
VPS
+ Nginx
+ Backend
+ PostgreSQL
+ Auth
+ Storage
+ SSL
+ Backup
+ Monitoring
Ngày nay có thể rút xuống:
GitHub
+
Cloudflare Pages
+
Supabase
Vẫn có:
Frontend
Database
API
Authentication
Storage
Realtime
Backend Functions
nhưng gần như không phải quản trị server.
Supabase đặc biệt hấp dẫn vì sử dụng PostgreSQL thật, có Free Plan đủ rộng để thử nghiệm sản phẩm và cho phép developer đi từ ý tưởng đến một web app hoạt động rất nhanh.
Tuy nhiên, không cần VPS không có nghĩa là không cần hiểu backend và security.
RLS, phân quyền database, API key, webhook, rate limit và backup vẫn là những thứ phải thiết kế đúng nếu muốn đưa ứng dụng lên production.
Với những project nhỏ hoặc MVP, mô hình này có thể giúp chúng ta trả lời câu hỏi quan trọng nhất trước:
Có người thực sự muốn dùng sản phẩm này hay không?
Thay vì mất vài ngày chỉ để dựng và vận hành server.