资源描述
Supabase 是开源的 Firebase 替代方案,基于 PostgreSQL 构建,提供开箱即用的实时数据库、REST/GraphQL API、用户身份验证、存储、边缘函数及向量搜索能力。适用于快速原型开发、全栈应用构建、无服务器后端及 AI 应用的数据层,兼顾开发者体验与企业级可扩展性。
详细内容
## Supabase:开源的 Postgres 原生 BaaS 平台
Supabase 是一个开源、自托管友好的后端即服务(BaaS)平台,以 PostgreSQL 为核心数据库,通过自动化工具链将数据库结构实时转化为生产就绪的 API 和安全策略,显著降低后端开发复杂度。
### 核心价值
- **PostgreSQL 原生**:直接复用 PostgreSQL 的强一致性、JSONB、全文检索、RLS(行级安全)、物化视图等高级能力;
- **零配置 API**:表创建后自动暴露 RESTful 和 GraphQL 端点,支持实时订阅(`postgres_changes`);
- **开箱即用的安全模型**:基于 RLS 实现细粒度权限控制,配合内置 Auth 系统(支持邮箱/密码、OAuth2、SAML);
- **AI 就绪架构**:原生支持向量嵌入存储与相似性搜索(`pgvector` 集成),便于构建 RAG、语义搜索等 AI 应用;
- **完全开源 & 可自托管**:核心组件 MIT 许可,支持部署在私有云或本地环境,满足合规与数据主权需求。
### 主要功能
- ✅ **实时数据库**:基于 PostgreSQL 的逻辑复制实现毫秒级数据同步(`supabase.realtime`);
- ✅ **自动 API 生成**:无需编写后端代码,CRUD 操作直连 `/rest/v1/` 或 GraphQL 接口;
- ✅ **身份认证(Auth)**:含用户注册/登录、会话管理、多因素认证(MFA)、自定义 JWT 策略;
- ✅ **对象存储(Storage)**:S3 兼容的对象存储,支持文件上传、CDN 加速、访问策略控制;
- ✅ **Edge Functions**:基于 Deno 的轻量 Serverless 函数,用于业务逻辑、Webhook 处理或 API 扩展;
- ✅ **向量支持**:一键启用 `pgvector` 扩展,支持 `embedding` 存储、`cosine_similarity` 搜索及索引优化;
- ✅ **Dashboard 与 CLI**:可视化管理控制台 + `supabase-cli` 支持本地开发、迁移同步与项目部署。
### 典型使用场景
- 快速验证 MVP:前端团队无需等待后端即可调用实时 API 开发应用;
- 内部工具与管理后台:利用 RLS 快速实现多角色数据隔离(如管理员/编辑/访客);
- AI 原生应用:结合 LangChain / LlamaIndex,将用户文档向量化存入 Supabase,并实现实时语义检索;
- 游戏/协作类应用:依赖低延迟实时同步(如聊天、白板、多人协作文档);
- 合规敏感系统:通过自托管 + 审计日志 + VPC 部署满足金融、政务等场景要求。
### 上手步骤(5 分钟入门)
1. **创建项目**:访问 [supabase.com](https://supabase.com),注册并新建项目(免费版含 500MB 数据库 + 1GB 存储);
2. **获取密钥**:进入 Project Settings → API,复制 `anon` 和 `service_role` 密钥(开发阶段使用 `anon`);
3. **初始化客户端**(以 JavaScript 为例):
```bash
npm install @supabase/supabase-js
```
```js
import { createClient } from '@supabase/supabase-js'
const supabase = createClient('https://<project-ref>.supabase.co', '<anon-key>')
```
4. **创建表并写入数据**:在 Table Editor 中新建 `todos` 表(含 `id`, `title`, `is_complete` 字段),启用 RLS 并添加策略(如 `SELECT WHERE auth.uid() = user_id`);
5. **调用 API**:
```js
const { data } = await supabase.from('todos').select()
// 实时监听
const channel = supabase.channel('todos')
.on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'todos' }, payload => {
console.log('New todo:', payload.new)
})
.subscribe()
```
> 💡 提示:生产环境务必禁用 `service_role` 密钥前端暴露;建议搭配 Supabase Auth + RLS 实现最小权限访问;向量搜索需在 SQL 编辑器中手动启用 `pgvector` 扩展并创建 `vector` 列。