Tự dựng Backend-as-a-Service với Supabase Self-hosted qua Docker

Database tutorial - IT technology blog
Database tutorial - IT technology blog

Quick start: Chạy Supabase trong 5 phút

Muốn thử nghiệm nhanh mà không cần đọc nhiều? Anh em chỉ cần mở Terminal và gõ đúng 4 lệnh dưới đây. Lưu ý máy phải có sẵn DockerDocker Compose.

# 1. Clone repository chính thức
git clone --depth 1 https://github.com/supabase/supabase

# 2. Di chuyển vào thư mục docker
cd supabase/docker

# 3. Copy file cấu hình mẫu
cp .env.example .env

# 4. Pull image và khởi chạy
docker compose pull
docker compose up -d

Xong xuôi, hãy truy cập http://localhost:8000. Đăng nhập bằng user supabase và mật khẩu mặc định this_password_is_insecure_and_should_be_updated. Hãy đổi mật khẩu ngay nếu không muốn “bay” dữ liệu khi đưa lên server thật.

Bóc tách các lớp bên trong Supabase

Đừng để giao diện Dashboard đánh lừa. Supabase không phải là một “cục” database đơn lẻ. Nó là một hệ sinh thái microservices được ghép nối cực kỳ tinh vi:

  • PostgreSQL: Trái tim của hệ thống. Khác với NoSQL của Firebase, Postgres mang lại khả năng query mạnh mẽ và tính toàn vẹn dữ liệu tuyệt đối.
  • GoTrue (Auth): Service viết bằng Go để quản lý User và cấp Token JWT. Nó xử lý mượt mà từ đăng ký email đến các loại OAuth.
  • PostgREST: Công cụ này tự động biến database Postgres thành một RESTful API. Bạn sẽ tiết kiệm được hàng trăm giờ viết code CRUD thủ công.
  • Realtime: Dựa trên Elixir/Phoenix, giúp lắng nghe thay đổi database qua WebSockets với độ trễ cực thấp.
  • Kong (API Gateway): Chốt chặn cửa ngõ, điều hướng mọi request đến đúng service cần thiết.

Từng dùng qua MySQL và MongoDB, mình thấy điểm ăn tiền nhất của Supabase là sự kết hợp giữa sức mạnh SQL truyền thống và API hiện đại.

Cấu hình nâng cao: Những thông số bắt buộc phải sửa

Chạy được container mới chỉ là bước khởi đầu. Để vận hành ổn định, anh em cần mở file .env và tinh chỉnh các thông số sau:

1. Bảo mật JWT và Password

Tuyệt đối không dùng secret mặc định. Nếu lộ chuỗi này, kẻ tấn công có thể giả mạo token để chiếm quyền admin. Hãy dùng một chuỗi ngẫu nhiên dài ít nhất 32 ký tự.

POSTGRES_PASSWORD=your_strong_password
JWT_SECRET=your_super_long_random_string
ANON_KEY=your_new_anon_key
SERVICE_ROLE_KEY=your_new_service_role_key

2. Kết nối SMTP để gửi Email

Supabase sẽ không thể gửi email xác nhận nếu thiếu SMTP. Mình thường dùng Resend hoặc SendGrid vì chúng có gói miễn phí khá rộng rãi:

[email protected]
SMTP_HOST=smtp.resend.com
SMTP_PORT=587
SMTP_USER=resend
SMTP_PASS=re_your_api_key

Kinh nghiệm thực chiến khi tự host

Sau nhiều dự án triển khai thực tế, mình rút ra được 3 bài học xương máu để tránh tình trạng sập server giữa đêm.

Cảnh báo về tài nguyên RAM

Supabase là “quái vật” ngốn RAM. Ở trạng thái nghỉ, hệ thống này đã chiếm khoảng 1.2GB – 1.5GB RAM. Nếu chạy trên VPS 2GB, server rất dễ rơi vào tình trạng treo (OOM).
Giải pháp: Hãy bật Swap tối thiểu 4GB. Nếu không dùng Edge Functions hoặc Vector, hãy tắt chúng trong file docker-compose để giảm tải.

Chiến lược Backup dữ liệu

Đừng phó mặc hoàn toàn cho Docker Volume. Mình thường cài đặt một cronjob chạy pg_dump vào lúc 2 giờ sáng mỗi ngày. File backup sau đó được đẩy trực tiếp lên S3 hoặc Google Cloud Storage để đảm bảo an toàn.

Bảo mật bằng Reverse Proxy

Đừng bao giờ mở port 8000 trực tiếp ra ngoài Internet. Hãy đặt Supabase đằng sau Nginx hoặc Caddy. Việc này giúp quản lý SSL (HTTPS) dễ dàng và lọc bớt các request tấn công cơ bản.

# Cấu hình Caddy tham khảo
supabase.yourdomain.com {
    reverse_proxy localhost:8000
}

Tại sao nên chọn Supabase thay vì Firebase?

Nhiều anh em băn khoăn giữa hai lựa chọn này. Đây là 3 lý do mình nghiêng về phía Supabase:

  1. Không bị Vendor Lock-in: Với Firebase, bạn là khách thuê trọ. Với Supabase Self-hosted, bạn là chủ nhà. Bạn có toàn quyền di chuyển dữ liệu mà không bị Google áp đặt chi phí.
  2. Sức mạnh của SQL: Firestore rất khó thực hiện các query phức tạp như JOIN bảng hay tính toán aggregation. Postgres xử lý những việc này trong “một nốt nhạc”.
  3. Kiểm soát chi phí: Với dự án lớn, phí đọc/ghi của Firebase có thể tăng vọt không kiểm soát. Tự host Supabase chỉ tốn tiền thuê VPS cố định hàng tháng (khoảng $10-$20).

Supabase Self-hosted là lựa chọn hàng đầu nếu bạn cần một backend nhanh, mạnh mà vẫn nắm quyền kiểm soát dữ liệu. Chúc anh em setup thành công. Nếu gặp lỗi khi deploy, hãy để lại comment phía dưới để mình hỗ trợ nhé!

Share: