Thoát phụ thuộc Supabase: khi nào tự host backend lên VPS rẻ hơn
Tuần trước một bạn trong nhóm vibe coding đăng một câu hỏi ngắn:
"Bữa giờ tự mò vibe code cũng khá, mình cũng làm ra thành phẩm và dùng được. Nay có vấn đề về backend Supabase thấy phụ thuộc nó quá. Có bên nào ổn hơn lâu dài, hướng free hoặc trả phí ít không?"
Thread nổ ra gần chục bình luận, chia hai phe rõ rệt. Phe tự host: cài Supabase self-host lên VPS, Docker, Coolify, kèm cả một stack đầy đủ NestJS + Postgres + Nginx + CI/CD. Phe cảnh báo: "nếu không có nền tảng IT thì đừng build riêng, không sẽ có một ngày hối hận", "free hoài làm sao được, nhiều người dùng là xuống tiền".
Thú vị là cả hai phe đều đúng — mỗi phe đúng một nửa. Câu hỏi thực sự không phải "Supabase có tệ không" (không tệ, nó giúp bạn ship nhanh nhất trong giai đoạn demo), mà là: bạn đang phụ thuộc nó ở tầng nào, và tầng đó đáng bao nhiêu tiền khi app chuyển từ "chạy được" sang "chạy lâu dài". Đây là bước ngoặt mà gần như mọi vibe coder đều đi qua.
Bài này mổ xẻ thread đó bằng số liệu thật, trả lời ba câu: phụ thuộc ở đâu, có mấy đường thoát, và toán tiền ra sao. Giá và giới hạn lấy từ trang chính thức của Supabase và Cloudflare, khảo sát 20/09/2026.
VPS cho coder & vibe coding
Deploy app, chạy agent dài hoặc giữ môi trường thử nghiệm tách khỏi máy chính
Link affiliate Tino Group: OpenCode Vietnam có thể nhận hoa hồng, giá bạn trả không đổi.
Bạn phụ thuộc Supabase ở chỗ nào mà không nhận ra
Khi vibe code, Supabase biến mất sau một dòng supabase.from(...). Nó làm việc của nó quá trơn tru tới mức bạn không nhận ra logic của app đang nằm dần trong hệ sinh thái của người khác. Đếm kỹ thì có ba lớp:
- Edge Functions — logic chạy trên runtime Deno của họ, deploy bằng CLI của họ. Code là của bạn, nhưng nơi chạy thì không phải.
- Postgres RPC — business logic viết thành function nằm ngay trong database. Ngon khi demo: client gọi một hàm là xong đâu vào đấy. Nhưng logic càng nằm sâu trong DB, cái giá rời đi càng cao.
- Auth + Storage — user data, JWT, file upload. Layer này theo chuẩn mở nên migrate được, nhưng vẫn là việc.
Một bình luận trong thread gợi ý khá chuẩn: "Hỏi thêm AI tại sao không nên dùng Edge Functions và Postgres RPC nếu app có dự định chạy lâu dài." Ý của gợi ý đó chính là hai lớp đầu — nơi gắn logic của bạn vào hệ sinh thái đóng sâu nhất. SDK thì thay được trong một buổi, business logic nằm trong RPC thì không.
Trần của free tier
Số liệu free plan hiện tại (theo trang giá Supabase, khảo sát 20/09/2026):
| Hạng mục | Free plan |
|---|---|
| Database | 500 MB |
| Egress | 5 GB + 5 GB cached/tháng |
| File storage | 1 GB |
| Edge Functions | 500.000 invocations/tháng |
| Auth | 50.000 MAU |
| Project active song song | 2 |
| Realtime | 200 connections, 2 triệu messages/tháng |
Với app nội bộ vài chục người dùng, các con số này rất thoải mái. Cái đánh vào side project trước tiên không phải dung lượng — là chính sách pause: project free tự tạm dừng sau 7 ngày không hoạt động, đo chủ yếu theo API request vào (theo docs chính thức). App ít người dùng, bạn quên mở hai buổi cuối tuần, thứ hai mở dashboard thấy project đang ngủ. Không mất dữ liệu, nhưng không phải trải nghiệm của một dịch vụ "đang chạy thật".
Giữ project free không bị pause: đặt một GitHub Actions chạy cron ping endpoint mỗi 5–6 ngày. Cộng đồng dùng trick này phổ biến. Nhưng nó là băng dán — bạn đang giữ hệ sống bằng hơi thở nhân tạo, và đó là tín hiệu app đã tới nơi cần nghiêm túc hơn.
Rồi tới lượt dung lượng: 500 MB database với app có bảng log, hoặc 1 GB storage với app cho upload ảnh, là chuyện vài tháng. Lúc đó phương án duy nhất của hệ sinh thái là Pro — $25/tháng. Và đó là lúc câu hỏi "phụ thuộc quá" trở thành câu hỏi về tiền.
Ba đường thoát, ba mức cam kết
Thread cho ra ba hướng, mình xếp theo mức cam kết tăng dần.
Đường 1 — Ở lại, nhưng khử lock-in
Không rời Supabase, chỉ cắt dây neo:
- Tách logic khỏi Edge Functions và RPC thành backend riêng gọi thẳng vào Postgres (Supabase cho kết nối trực tiếp). Làm từng feature một, không cần big bang.
- Dọn file sang Cloudflare R2: free tier 10 GB storage và — điểm quan trọng nhất — egress miễn phí (theo trang giá Cloudflare, khảo sát 20/09/2026). Storage là thứ phình nhanh nhất trong mọi app có upload. Một bình luận trong thread tóm gọn: "R2 lưu file, Supabase chỉ lưu tag map sang — hoàn toàn free."
Kết quả: Supabase bị hạ xuống vai trò một cụm Postgres + auth, đều là phần chuẩn mở. Muốn đi lúc nào cũng đi được, còn ở lại thì cứ ở.
Đường 2 — Self-host Supabase trên VPS
Supabase là open source, có bộ Docker compose chính thức. Compose hiện tại chạy 11 service: studio, envoy, auth, rest, realtime, storage, imgproxy, meta, edge-functions, db, pooler (đếm từ repo chính thức, 20/09/2026). Bạn giữ nguyên hệ sinh thái và dashboard quen thuộc, chỉ đổi chỗ chạy — và cắt hoá đơn.
Đổi lại: bạn nuôi 11 container. RAM 2 GB trở lên là mức tối thiểu tử tế, và toàn bộ việc vận hành (backup, update version, chứng chỉ, dò log) chuyển sang vai bạn.
Đường 3 — Rời hẳn, stack riêng
Đây là stack một bình luận trong thread chia sẻ, đầy đủ nhất từ A đến Z:
- NestJS viết backend, React viết frontend
- Postgres làm DB, Valkey làm cache
- Nginx reverse proxy + Certbot lấy SSL tự động
- Up code lên GitLab, CI build docker image, CD deploy image lên server
- Domain trên Cloudflare, file để trên R2
Tóm lại: trả tiền bằng thời gian. Kiểm soát tối đa, ràng buộc tối thiểu, nhưng mọi thứ tự dựng.
So sánh nhanh
| Đường 1: khử lock-in | Đường 2: self-host Supabase | Đường 3: stack riêng | |
|---|---|---|---|
| Chi phí/tháng | ~0đ (free tier + R2 free) | VPS từ ~99K | VPS từ ~99K |
| Độ khó | Thấp — dọn từng phần | Trung bình — dựng lại hạ tầng | Cao — viết lại lớp API |
| Giữ được gì | Toàn bộ data + dashboard | Toàn bộ + hệ sinh thái | Chỉ data (pg_dump) |
| Vấn đề còn lại | Vẫn chịu trần free tier | Vẫn chạy theo roadmap Supabase | Tự lo backup, security, uptime |
| Hợp với ai | Có user thật, budget 0 | Quen Supabase, muốn cắt hoá đơn | Sản phẩm nghiêm túc dài hạn |
Toán chi phí: VPS và Supabase Pro chênh nhau bao nhiêu
Supabase Pro hiện $25/tháng cho mỗi project: 8 GB disk, 250 GB egress, 100 GB storage, 2 triệu Edge Function invocations, kèm $10 compute credit — vừa đủ một Micro instance. Cần thêm compute thì Micro $10/tháng, Small (2 GB RAM) $15/tháng. Chính trang giá của họ đưa ví dụ: organisation Pro chạy 2 project Micro tốn $35/tháng (khảo sát 20/09/2026).
Một Cloud VPS NVMe của Tino có gói từ 99K/tháng (giá Tino công bố, khảo sát 09/2026) — tương đương khoảng $4. Quy đổi ra năm để cảm nhận độ lớn:
| Kịch bản | Chi phí/tháng | Chi phí/năm |
|---|---|---|
| Supabase Free + cron ping | 0đ | 0đ — nhưng trần 500 MB/1 GB, 2 project |
| Supabase Pro, 1 project Micro | $25 (~650Kđ) | ~7,8 triệu đồng |
| Supabase Pro, 2 project Micro | $35 (~910Kđ) | ~10,9 triệu đồng |
| VPS tự host Postgres + backend + Nginx | từ 99Kđ | ~1,2 triệu đồng |
(Tỷ giá quy đổi ~26.000đ/USD, tính sơ bộ thời điểm viết — chỉ để cảm nhận độ lớn, không phải báo giá.)
Chênh lệch gấp 6–9 lần. Trên cùng một con VPS đó, frontend tĩnh để miễn phí trên Cloudflare Pages (chính site cộng đồng này chạy thế), còn backend + Postgres + Nginx + vài service nhỏ chạy cạnh nhau thoải mái với app nhẹ. App nặng hơn — build lớn, nhiều process — thì lên gói AMD từ 126K/tháng hoặc cao hơn. Và nếu bạn chọn đường 2 (self-host cả bộ Supabase 11 service), hãy bắt đầu từ mức 2 GB RAM trở lên, đừng tin gói rẻ nhất.
Chi phí ẩn — phần không ai thích nhắc
Thread có một bình luận đáng ghi nhớ: "Nếu không có nền tảng IT thì đừng build riêng, nếu không sẽ có một ngày hối hận." Self-host đổi tiền lấy trách nhiệm:
- Server sập lúc 2 giờ sáng — người bị đánh thức là bạn, hoặc không ai.
- Backup không tự có. Phải tự đặt cron
pg_dumpvà copy ra ngoài (R2 là chỗ để bản backup tốt). - Security update, firewall, SSH hardening — hết thảy là việc của bạn.
- Thay vì mỗi lần deploy gõ một lệnh CLI quen thuộc, bạn
docker compose uprồi tự dò log khi container không lên.
Vì vậy đừng đọc bài này thành "VPS luôn rẻ hơn". Chuẩn hơn: VPS rẻ hơn về tiền, đắt hơn về trách nhiệm — và cái đổi đó chỉ đáng khi app đã có người dùng thật.
Lộ trình dọn sang VPS trong một tuần
Nếu chọn đường 2 hoặc 3, đây là lịch mình tổng hợp từ thread, xếp theo thứ tự làm:
Ngày 1–2 — hạ tầng. Thuê VPS, trỏ domain về Cloudflare DNS (miễn phí). Cài Docker + Coolify hoặc Dokploy — hai công cụ này biến VPS thành mini-PaaS có UI, tự cấp SSL. Như một bình luận trong thread nói: "nhờ AI dùng Coolify build app dưới dạng PaaS cho dễ quản lý."
Ngày 3–4 — data + logic. pg_dump bên Supabase rồi restore vào Postgres trên VPS. Data là của bạn và Postgres là chuẩn mở, nên đây là bước nhẹ hơn mọi người tưởng. Sau đó tách từng Edge Function thành API riêng (NestJS hoặc Express) gọi vào Postgres — giữ proxy từ URL cũ để client không vỡ giữa chừng.
Ngày 5–6 — vận hành. Nginx hoặc Coolify làm reverse proxy + SSL. Dựng CI/CD từ GitHub hoặc GitLab: push code → build image → deploy lên server.
Ngày 7 — phòng hờ. Backup tự động (cron pg_dump đẩy lên R2), uptime ping tối thiểu, và một file ghi lại vài lệnh chữa cháy cho chính mình sau này.
Và đây là bộ keyword mà thread gom lại — đúng tinh thần vibe coding, bạn mang từng cụm bỏ vào AI hỏi là có lộ trình học:
VPS · Docker · Coolify · Dokploy · Cloudflare DNS
Cloudflare R2 · Postgres · pg_dump · NestJS · Valkey
Nginx reverse proxy · Certbot · CI/CD · GitHub Actions
Khi nào không nên tự host
Bình luận "free cũng có giới hạn, nhiều người dùng thì xuống tiền" đúng — nhưng chiều ngược cũng đúng: chưa có người dùng thật thì chưa có gì để tiết kiệm. App 5 người dùng nội bộ sống sót thoải mái trên free tier với một cron ping. Đừng tự host để "tiết kiệm" $0 — thứ bạn tiêu không phải tiền, là sự tập trung vào sản phẩm.
Kết luận: chọn theo tình huống, không theo trào lưu
- Demo, hackathon, side project chưa có user → ở lại free tier, thêm cron ping chống pause. Chưa có gì để tối ưu.
- Có user thật, budget 0 → đường 1: tách logic khỏi Edge Functions/RPC, dọn file sang R2. Giảm phụ thuộc mà không thêm đồng hoá đơn nào.
- Sản phẩm ổn định, định sống dài hạn → VPS tự host: đường 2 nếu muốn giữ hệ sinh thái Supabase, đường 3 nếu muốn stack riêng gọn. Bắt đầu từ một VPS từ 99K/tháng thay cho $25/tháng cộng compute.
Free tier cho bạn tốc độ lúc bắt đầu. VPS cho bạn quyền sở hữu lúc ở lại. Còn ở giữa hai thời điểm đó, thứ đáng mua không phải là server — là sự rõ ràng về việc app của bạn đang đứng ở đâu.
Đọc thêm
- Chọn harness open source cho vibe coding — cùng chuỗi vibe coding: tool nào cũng được, context mới là thứ cần nuôi
- OpenCode Go sống bằng gì với $10/tháng? — góc nhìn unit economics từ phía bên bán gói $10/tháng
- Supabase Pricing — nguồn số liệu free/Pro plan, khảo sát 20/09/2026
- Cloudflare R2 Pricing — free tier 10 GB và egress miễn phí
Bạn đang đứng ở nẻo nào — free tier sắp chạm trần, hay đã cầm hoá đơn Pro trong tay? Vào nhóm OpenCode Vietnam chia sẻ thêm, thread gốc trong bài cũng từ đó mà ra.