跳到主要内容

Supabase 教程

Supabase 是一个开源的后端即服务平台,基于 PostgreSQL 构建,提供数据库、身份认证、文件存储、实时订阅等完整的后端功能。它被誉为"开源版 Firebase",但比 Firebase 更强大,因为它基于关系型数据库,支持完整的 SQL 功能。

什么是 Supabase?

Supabase 的核心理念是"用开源的方式重新定义服务器开发体验"。它将一系列优秀的开源技术组件无缝打包并托管,形成了一个完整的后端即服务平台。

传统开发模式下,你需要自己搭建数据库、编写 API、实现用户认证、处理文件上传等。而使用 Supabase,这些功能都开箱即用,你可以专注于业务逻辑的开发。

核心特点

开源免费:Supabase 完全开源,你可以查看和修改源代码,也可以选择自托管。免费套餐提供 500MB 数据库存储和 1GB 文件存储,足够小型项目使用。

基于 PostgreSQL:Supabase 的核心是一个完整的 PostgreSQL 数据库,支持所有 PostgreSQL 特性,包括复杂查询、事务、存储过程、触发器等。这比 Firebase 的 NoSQL 数据库更适合关系型数据。

自动生成 API:Supabase 会根据你的数据库结构自动生成 RESTful API 和 GraphQL API,无需手动编写后端代码。

实时订阅:通过 PostgreSQL 的 LISTEN/NOTIFY 机制,客户端可以实时监听数据变化,非常适合聊天应用、协作工具等场景。

行级安全策略:Supabase 深度集成了 PostgreSQL 的 Row Level Security (RLS),可以在数据库层面实现精细的权限控制。

核心功能概览

Supabase 提供了构建现代应用所需的所有后端功能:

数据库(Database)

每个 Supabase 项目都会创建一个独立的 PostgreSQL 数据库,你可以:

  • 使用 SQL 或可视化界面创建表、视图、函数
  • 启用数据库扩展,如 pgvector(向量搜索)、postgis(地理信息)
  • 配置行级安全策略控制数据访问
  • 创建触发器和存储过程实现业务逻辑

身份认证(Authentication)

内置完整的用户认证系统,支持多种登录方式:

  • 邮箱密码登录
  • 魔法链接(Magic Link,无密码登录)
  • 手机号 OTP 验证
  • OAuth 社交登录(Google、GitHub、Apple、Facebook 等)
  • 企业级 SSO

认证系统与 RLS 无缝集成,你可以基于用户身份控制数据访问权限。

文件存储(Storage)

提供类似云存储的文件管理功能:

  • 创建存储桶组织文件
  • 支持公开和私有访问
  • 内置图片转换和优化
  • 与 RLS 集成实现文件权限控制

实时订阅(Realtime)

基于 WebSocket 的实时数据同步:

  • 监听表的 INSERT、UPDATE、DELETE 事件
  • 支持过滤条件,只订阅感兴趣的数据
  • 适用于实时聊天、协作编辑、实时仪表盘等场景

边缘函数(Edge Functions)

基于 Deno 的无服务器函数:

  • 使用 TypeScript/JavaScript 编写
  • 全球边缘部署,低延迟执行
  • 处理 Webhook、调用第三方 API、执行敏感逻辑

架构设计

Supabase 的架构设计非常清晰,它不是重新发明轮子,而是将成熟的开源项目组合在一起:

┌─────────────────────────────────────────────────────────┐
│ 客户端应用 │
│ (Web / Mobile / Desktop / IoT) │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│ Supabase 平台 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ Kong │ │ PostgREST│ │ GoTrue │ │ Realtime │ │
│ │ (API网关)│ │ (REST API)│ │ (认证) │ │ (实时订阅) │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ PostgreSQL 数据库 │ │
│ │ ┌───────┐ ┌───────┐ ┌─────────┐ ┌───────────┐ │ │
│ │ │ 表 │ │ 视图 │ │ RLS策略 │ │ 扩展插件 │ │ │
│ │ └───────┘ └───────┘ └─────────┘ └───────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Storage │ │ Edge Funcs │ │
│ │ (文件存储) │ │ (边缘函数) │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────┘

Kong:API 网关,负责请求路由和负载均衡。

PostgREST:将 PostgreSQL 数据库自动转换为 RESTful API,支持复杂的查询过滤和嵌套资源。

GoTrue:用户认证服务,处理注册、登录、JWT 令牌管理等。

Realtime:实时订阅服务,监听 PostgreSQL 的 WAL 日志,将数据变更推送给客户端。

Storage:文件存储服务,基于对象存储实现文件管理。

Edge Functions:基于 Deno 的无服务器函数运行时。

与 Firebase 对比

Supabase 常被拿来与 Firebase 比较,两者都是后端即服务平台,但有本质区别:

特性SupabaseFirebase
数据库PostgreSQL(关系型)Firestore(NoSQL 文档型)
开源完全开源,可自托管闭源,仅云服务
数据模型关系型,支持 JOIN、事务文档型,嵌套结构
查询能力完整 SQL有限查询能力
数据迁移标准 SQL 导出导入需要工具迁移
价格免费额度大,按量付费免费额度小,按读写计费
实时功能基于 PostgreSQL原生支持
扩展性PostgreSQL 扩展生态Google 生态集成

如果你的应用需要关系型数据模型、复杂查询、事务支持,Supabase 是更好的选择。如果你的应用是简单的文档存储、需要深度集成 Google 生态,Firebase 可能更合适。

适用场景

适合使用 Supabase 的场景

快速原型开发:Supabase 提供了完整的后端功能,你可以在几分钟内搭建一个可用的后端,非常适合 MVP 开发。

实时应用:聊天应用、协作工具、实时仪表盘等需要实时数据同步的场景。

移动应用后端:Supabase 提供了 iOS、Android、Flutter 等平台的 SDK,可以快速构建移动应用后端。

AI 应用:通过 pgvector 扩展,Supabase 支持向量搜索,可以构建 AI 应用。

全栈 Web 应用:与 Next.js、Nuxt.js 等框架深度集成,构建全栈应用。

可能不太适合的场景

超大规模应用:虽然 Supabase 支持扩展,但对于日活千万级的应用,可能需要更精细的架构设计。

复杂业务逻辑:如果业务逻辑非常复杂,可能需要传统的后端服务来处理。

需要完全控制:虽然 Supabase 支持自托管,但如果你需要对基础设施有完全控制,可能需要自己搭建。

教程目录

入门基础

核心功能

进阶功能

高级主题

参考资料

快速开始

让我们创建第一个 Supabase 项目:

步骤一:注册账号

访问 supabase.com,使用 GitHub 账号或邮箱注册。

步骤二:创建项目

点击 "New Project",填写项目名称和数据库密码,选择离你最近的区域。

步骤三:创建数据表

在 Table Editor 中创建一个 todos 表:

create table todos (
id bigint primary key generated always as identity,
task text not null,
is_complete boolean default false,
created_at timestamptz default now()
);

步骤四:插入测试数据

insert into todos (task) values 
('学习 Supabase'),
('构建第一个应用'),
('部署到生产环境');

步骤五:获取 API 密钥

在项目设置的 API 页面,获取 Project URLanon public 密钥。

步骤六:在应用中使用

import { createClient } from '@supabase/supabase-js'

const supabaseUrl = 'https://your-project.supabase.co'
const supabaseKey = 'your-anon-key'
const supabase = createClient(supabaseUrl, supabaseKey)

// 查询数据
const { data, error } = await supabase
.from('todos')
.select('*')

console.log(data)

学习建议

  1. 理解 PostgreSQL 基础:Supabase 基于 PostgreSQL,了解 SQL 和关系型数据库概念非常重要。

  2. 掌握 RLS 策略:行级安全策略是 Supabase 安全模型的核心,理解它对于构建安全应用至关重要。

  3. 善用官方文档:Supabase 官方文档非常详细,遇到问题先查阅文档。

  4. 从简单开始:先构建基本的 CRUD 应用,再逐步添加认证、实时订阅等功能。

  5. 使用 CLI 工具:Supabase CLI 可以帮助你在本地开发和管理项目。

延伸阅读