Mục lục

Project Migration to Supabase

Hướng dẫn chi tiết cách tích hợp dự án hiện tại với hạ tầng Supabase (Thay thế SQLite, tích hợp Auth).

Hiện tại dự án đang sử dụng SQLite (Local) và NextAuth. Khi bạn chuyển sang Supabase Backend, chúng ta sẽ nâng cấp kiến trúc để tận dụng sức mạnh của PostgreSQL và các dịch vụ quản lý người dùng của Supabase.

1. Chuyển đổi Database từ SQLite sang Supabase (Postgres)

Supabase cung cấp PostgreSQL cực kỳ mạnh mẽ. Bạn cần thay đổi cấu hình Prisma để kết nối với DB mới này.

Thay đổi schema.prisma

prisma:
// prisma/schema.prisma
datasource db {
  provider = "postgresql" // Chuyển từ sqlite sang postgresql
  url      = env("DATABASE_URL")
}

Cập nhật .env.local

Lấy thông tin Connection String từ Supabase Dashboard (mục Settings > Database):

env:
DATABASE_URL="postgresql://postgres:[PASSWORD]@[HOST]:5432/postgres"

Sau đó chạy lệnh để đồng bộ lại DB:

bash:
npx prisma db push

2. Thiết lập Supabase Client trong Source Code

Chúng ta dùng @supabase/supabase-js để có thể truy cập các tính năng như Realtime (comment) hoặc Auth trực tiếp từ phía client.

File src/lib/supabase.ts đã được khởi tạo:

tsx:
import { createClient } from '@supabase/supabase-js';

export const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);

3. Tích hợp Authentication (Xử lý hợp nhất)

Bạn có hai lựa chọn tại đây:

A. Giữ NextAuth nhưng dùng Supabase DB

Đây là cách ít thay đổi code nhất. Bạn chỉ cần đổi DB sang Postgres của Supabase. NextAuth vẫn quản lý session bằng JWT hoặc Database sessions.

B. Chuyển hẳn sang Supabase Auth

Thay thế next-auth bằng @supabase/auth-helpers-nextjs. Cách này giúp bạn tận dụng:

  • Row Level Security (RLS) - Bảo mật dữ liệu tầng DB.
  • Quản lý user tập trung trong Supabase Dashboard.
  • Dễ dàng xử lý Authentication ở cả Server và Client.

4. Migration Progress: Bước tiếp theo

Để tích hợp sâu, bạn nên:

  1. Dùng Supabase làm storage: Thay vì lưu ảnh file local, hãy dùng Supabase Storage.
  2. Realtime Comments: Chuyển logic Comment từ polling sang Realtime của Supabase để người dùng thấy bình luận mới ngay lập tức.
  3. Edge Functions: Chạy các logic xử lý nặng (như gửi email, push notification) trực tiếp trên infra của Supabase.

Tổng kết "Failure to Feature"

Thất bại lớn nhất của dự án khi mở rộng là bị giới hạn bởi SQLite. Việc chuyển mình sang "Supabase-powered" Backend giúp dự án sẵn sàng chịu tải hàng nghìn người dùng, bảo mật dữ liệu theo tiêu chuẩn Enterprise và tối ưu hóa tốc độ truy cập toàn cầu.

Quảng cáo
mdhorizontal