Supabase Là Gì? Xây Web App Không Cần VPS và Free Đến Mức Nào?
Supabase là Backend-as-a-Service với PostgreSQL thật, Auto REST API, Auth, Realtime và Edge Functions. Hướng dẫn kiến trúc serverless, bảng quota Free Plan 2026 và lưu ý bảo mật RLS.

Muốn đưa web app lên Internet nhưng không muốn mất thời gian quản lý VPS, cài Nginx, canh PostgreSQL lúc 2 giờ sáng?
Bài này giải thích kiến trúc serverless với Supabase + Cloudflare Pages: database thật, API tự động, auth, realtime — mà không cần SSH vào bất kỳ server nào. Bao gồm bảng quota Free Plan tháng 8/2026 và các lưu ý bảo mật quan trọng.
Mục lục
- Supabase là gì?
- 1. PostgreSQL Database thật
- 2. Auto REST API — không cần tự viết backend
- 3. Authentication có sẵn
- 4. File Storage
- 5. Realtime qua WebSocket
- 6. Edge Functions khi cần server-side logic
- Kiến trúc hoàn chỉnh: Web app không có VPS hoạt động như thế nào?
- Supabase Free Plan: quota cụ thể
- Bảo mật: RLS và Service Role Key
- Ưu điểm và nhược điểm
- Khi nào dùng Supabase? Khi nào vẫn cần VPS?
- Kết luận
Supabase là gì?
Supabase là một nền tảng Backend as a Service (BaaS) open-source.
Thay vì tự dựng stack backend truyền thống:
Ubuntu → Nginx → Node.js/PHP → PostgreSQL → Redis → Auth → File Storage
Supabase cung cấp sẵn toàn bộ các thành phần đó trong một project, với PostgreSQL thật làm nền tảng — không phải database proprietary bị lock-in.
Mỗi Supabase project bao gồm:
| Thành phần | Chức năng |
|---|---|
| PostgreSQL | Database chính |
| PostgREST API | REST API tự động từ schema |
| Auth | Email, OAuth, JWT, Magic link |
| Storage | File/ảnh S3-compatible |
| Realtime | WebSocket subscriptions |
| Edge Functions | Server-side logic trên Deno |
1. PostgreSQL Database thật
Đây là điểm quan trọng nhất của Supabase so với các BaaS khác.
Mỗi project có một PostgreSQL instance riêng. Bạn vẫn dùng được toàn bộ SQL chuẩn:
SELECT, INSERT, UPDATE, DELETE
JOIN, VIEW, FUNCTION, TRIGGER, INDEX
Cùng với các PostgreSQL extension như pg_graphql, pgcrypto, uuid-ossp, pg_trgm.
Nếu sau này muốn rời Supabase, dữ liệu vẫn là PostgreSQL chuẩn — dễ migrate sang AWS RDS, Google Cloud SQL, Neon, hoặc VPS tự host.
2. Auto REST API — không cần tự viết backend
Supabase dùng PostgREST để tự sinh REST API từ PostgreSQL schema.
Ví dụ bạn tạo table sites:
CREATE TABLE sites (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
url text NOT NULL,
title text,
boost_count int DEFAULT 0
);
Supabase tự động expose API:
GET /rest/v1/sites ← list + filter
GET /rest/v1/sites?id=eq.X ← get by id
POST /rest/v1/sites ← insert
PATCH /rest/v1/sites?id=eq.X ← update
DELETE /rest/v1/sites?id=eq.X ← delete
Frontend gọi qua Supabase SDK thay vì phải viết backend riêng:
const { data } = await supabase
.from('sites')
.select('*')
.order('boost_count', { ascending: false })
Ngoài REST, Supabase còn hỗ trợ GraphQL thông qua extension pg_graphql.
3. Authentication có sẵn
Supabase Auth xử lý sẵn toàn bộ luồng xác thực phổ biến:
- Email/password + email verification
- Magic link (đăng nhập không cần mật khẩu)
- OAuth: Google, GitHub, Facebook, Discord…
- JWT + Refresh token tự động
- Quản lý session
Quan trọng hơn, Auth tích hợp trực tiếp với PostgreSQL Row Level Security (RLS) — giúp giới hạn dữ liệu theo từng user ngay ở tầng database, không phụ thuộc vào logic application.
4. File Storage
Ứng dụng cần lưu avatar, ảnh sản phẩm, file upload, document? Supabase Storage là giải pháp thay cho tự dựng S3 hoặc lưu file trực tiếp trên VPS.
Storage hỗ trợ:
- Public bucket (ảnh public không cần auth)
- Private bucket với RLS policy
- CDN tự động cho file public
- Image transformation (resize, format convert)
5. Realtime qua WebSocket
Supabase Realtime cho phép frontend nhận thay đổi database ngay lập tức qua WebSocket — không cần polling hay F5 trang.
const channel = supabase
.channel('sites-changes')
.on('postgres_changes', {
event: 'UPDATE',
schema: 'public',
table: 'sites'
}, (payload) => {
console.log('Site updated:', payload.new)
updateLeaderboard(payload.new)
})
.subscribe()
Realtime phù hợp cho: dashboard, chat, notification, leaderboard, collaborative app, live tracking.
Supabase Realtime chạy trên cluster Elixir Phoenix phân tán — kiến trúc được thiết kế cho high-concurrency.
6. Edge Functions khi cần server-side logic
Không phải logic nào cũng nên chạy thẳng từ frontend xuống database. Các trường hợp cần server-side:
- Xử lý payment (cần giữ secret key)
- Gọi webhook bên ngoài
- Gửi email qua Resend/SendGrid
- Xử lý dữ liệu nhạy cảm trước khi lưu
- Gọi API bên thứ ba với rate limit
Supabase Edge Functions chạy trên Deno runtime và được distribute qua hạ tầng edge:
// supabase/functions/send-notification/index.ts
Deno.serve(async (req) => {
const { userId, message } = await req.json()
// Gửi Telegram notification
await fetch(`https://api.telegram.org/bot${Deno.env.get('TG_TOKEN')}/sendMessage`, {
method: 'POST',
body: JSON.stringify({ chat_id: userId, text: message })
})
return new Response(JSON.stringify({ ok: true }))
})
Kiến trúc hoàn chỉnh: Web app không có VPS hoạt động như thế nào?
Stack hoàn chỉnh cho một web app hiện đại:
┌─────────────────────────────────────────────┐
│ Developer │
│ git push origin main │
└──────────────────┬──────────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ GitHub │
│ Source code repository │
└──────────────────┬───────────────────────────┘
│ Auto CI/CD trigger
▼
┌──────────────────────────────────────────────┐
│ Cloudflare Pages │
│ React / Vue / Next.js → Build → CDN │
│ Custom domain + SSL tự động │
└──────────────────┬───────────────────────────┘
│ HTTPS / SDK
▼
┌──────────────────────────────────────────────┐
│ Supabase │
├──────────────────────────────────────────────┤
│ PostgreSQL │ Auth │ Storage │ Realtime │
│ REST API │ Edge Functions │
└──────────────────────────────────────────────┘
Workflow deploy chỉ là:
git add .
git commit -m "feat: add feature X"
git push origin main
# → Cloudflare Pages tự build và deploy
Không cần SSH. Không cần apt update. Không cần systemctl restart. Không cần certbot renew.
Supabase Free Plan: quota cụ thể
Tại thời điểm tháng 8/2026, Free Plan của Supabase:
| Tài nguyên | Free Plan |
|---|---|
| Free projects | 2 |
| PostgreSQL Database | 500 MB / project |
| File Storage | 1 GB |
| Egress bandwidth | 5 GB / tháng |
| Monthly Active Users (Auth) | 50.000 |
| Edge Functions invocations | 500.000 / tháng |
| Realtime messages | 2 triệu / tháng |
| Realtime peak connections | 200 |
Nguồn: Supabase Pricing — cập nhật tháng 8/2026.
500 MB database có đủ không?
Với dữ liệu dạng text (users, posts, settings, transactions), 500 MB chứa được hàng triệu records. Thứ làm database tăng nhanh thường là:
- Log từng request
- Tracking event chi tiết
- Lưu JSON blob lớn
- Lưu file binary trong database (dùng Storage thay thế)
Lưu ý: auto-pause trên Free Plan
Supabase tự động pause project Free nếu không có activity trong 7 ngày. Project bị pause vẫn có thể resume lại (Supabase giữ data tối đa 1 năm).
Free Plan phù hợp cho: học tập, demo, MVP, side project, portfolio có backend. Khi production cần uptime ổn định → nâng Pro Plan ($25/tháng).
Bảo mật: RLS và Service Role Key
Row Level Security (RLS)
Sai lầm phổ biến nhất với Supabase: nghĩ rằng dùng Supabase thì database tự động an toàn. Không phải vậy.
Khi tạo table mới, phải luôn bật RLS và định nghĩa policy:
-- Bật RLS cho table
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
-- Chỉ user sở hữu order mới được xem
CREATE POLICY "Users can view own orders"
ON orders FOR SELECT
USING (auth.uid() = user_id);
-- Chỉ user đã đăng nhập mới được insert
CREATE POLICY "Authenticated users can insert"
ON orders FOR INSERT
WITH CHECK (auth.role() = 'authenticated');
Nếu không có policy, table sẽ bị block hoàn toàn (với RLS enabled) hoặc public hoàn toàn (nếu dùng anon key mà không có RLS).
Tuyệt đối không expose Service Role Key ra frontend
✅ anon key → Dùng ở frontend (bị giới hạn bởi RLS)
❌ service_role → CHỈ dùng ở server-side (bypass RLS hoàn toàn)
service_role key phải nằm trong:
- Supabase Edge Functions (environment variable)
- Server-side code (Cloudflare Workers, Next.js server action)
- CI/CD secrets
Không bao giờ commit key này lên GitHub hay đưa vào frontend JavaScript.
Ưu điểm và nhược điểm
Ưu điểm
| Ưu điểm | Chi tiết |
|---|---|
| Không quản lý server | Không cần lo CPU, RAM, OS, SSL, backup |
| Deploy nhanh | Git push → live. Database tạo bằng SQL hoặc dashboard |
| Chi phí khởi đầu thấp | GitHub + Cloudflare Pages + Supabase Free = $0 |
| PostgreSQL chuẩn | Không bị lock-in, dễ migrate sau này |
| Scale giai đoạn đầu | Nâng plan thay vì resize VPS |
Nhược điểm
| Nhược điểm | Chi tiết |
|---|---|
| Phụ thuộc nhà cung cấp | Supabase down → app down |
| Free có giới hạn | Phải trả phí khi app lớn |
| Auto-pause Free project | Không activity 7 ngày → bị pause |
| Không phải mọi workload | Không chạy được Asterisk, FFmpeg, AI GPU inference… |
Khi nào dùng Supabase? Khi nào vẫn cần VPS?
Dùng Supabase khi:
- Web SaaS, CRM nhỏ, Dashboard, Leaderboard ✅
- MVP, side project, portfolio có backend ✅
- Tool nội bộ, directory website, marketplace nhỏ ✅
- App phát triển nhanh với AI-assisted coding ✅
- Cần auth + realtime mà không muốn tự dựng ✅
Vẫn cần VPS khi:
- Asterisk, FreeSWITCH, SIP server ❌
- FFmpeg, video processing nặng ❌
- AI model inference với GPU ❌
- Background worker chạy liên tục ❌
- Custom daemon, Redis, RabbitMQ riêng ❌
- Cần quyền root toàn bộ hệ điều hành ❌
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
Stack GitHub + Cloudflare Pages + Supabase cho phép xây và deploy web app hoàn chỉnh — có database thật, auth, realtime, file storage — mà gần như không cần vận hành server.
Điều này đặc biệt có giá trị ở giai đoạn đầu: 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 không?” — thay vì mất vài ngày chỉ để dựng hạ tầng.
Tuy nhiên, không cần VPS không có nghĩa là không cần hiểu backend. RLS, phân quyền, API key management, rate limiting và backup vẫn phải thiết kế đúng trước khi đưa lên production.