Supabase02-速通
Supabase02-速通
关键词:Supabase、BaaS、PostgreSQL、Firebase 替代、自托管、Edge Functions、RLS、实时同步、MVP、Archon 实战
文章目录
- Supabase02-速通
- 一、为什么选择 Supabase?
- 二、核心能力速览(30 秒速读)
- 三、5 分钟跑通“Hello Supabase”
- 0. 准备
- 1. 创建项目
- 2. 拿到 URL 与 anon Key
- 3. 建表 & RLS
- 4. 前端调通(Next.js 示例)
- 四、进阶:自托管一条命令
- 五、实战:把 Archon 项目搬到 Supabase
- 六、性能调优 & 生产 checklist
- 七、常见问答(评论区高频)
- 八、结语
一、为什么选择 Supabase?
维度 | Supabase | Firebase | 自研后端 |
---|---|---|---|
数据库 | PostgreSQL(关系型 + JSON) | NoSQL(Firestore) | 随意,但需自建 |
实时能力 | ✅ 基于 WAL 推送 | ✅ 原生实时 | 需造轮子 |
认证 | ✅ 内置 JWT + OAuth | ✅ 内置 | 需造轮子 |
存储 | ✅ S3 兼容 | ✅ Google Cloud Storage | 需造轮子 |
边缘函数 | ✅ Deno Deploy | ✅ Cloud Functions | 需造轮子 |
供应商锁定 | ❌ 数据可导出、可自托管 | ✅ Google 全家桶 | ❌ 自己就是供应商 |
开源 | ✅ MIT | ❌ 闭源 | 随意 |
一句话总结:想要 Firebase 的开发效率,又想要 PostgreSQL 的灵活与可控,Supabase 是目前最均衡的解。
二、核心能力速览(30 秒速读)
- Database:PostgreSQL 15,支持复杂 JOIN、事务、视图、JSONB、PostGIS、全文检索。
- Auth:邮件/密码、Magic Link、OAuth(Apple、GitHub、Google…)、手机号、匿名登录;JWT + RLS 细粒度授权。
- Realtime:WAL → WebSocket,行级/语句级监听,延迟 < 100 ms。
- Storage:兼容 S3 协议,自带 CDN、签名 URL、生命周期策略。
- Edge Functions:Deno 运行时,冷启动 < 50 ms,就近调度,可调用 npm 包(esm.sh)。
- Auto API:根据 schema 自动生成 REST(PostgREST)与 GraphQL(pg_graphql)接口,无需写后端。
- DevX:Web 控制台、SQL 编辑器、类型生成(supabase-js、Flutter、Swift、Kotlin)。
三、5 分钟跑通“Hello Supabase”
0. 准备
- GitHub 账号(一键登录)
- Node ≥ 18 或 Docker Desktop
1. 创建项目
打开 https://supabase.com → Sign in with GitHub → New Project
Region 选 Singapore(国内延迟最低),记住密码(后续无法明文查看)。
2. 拿到 URL 与 anon Key
Settings → API → 记录:
NEXT_PUBLIC_SUPABASE_URL=https://<ref>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<eyJ...>
3. 建表 & RLS
SQL Editor 执行:
create table posts(id bigint primary key generated always as identity,title text not null,user_id uuid not null default auth.uid()
);
alter table posts enable row level security;
create policy "本人 CRUD" on posts for all using (auth.uid() = user_id);
4. 前端调通(Next.js 示例)
npx create-next-app@latest supa-demo --typescript --tailwind --app
cd supa-demo
npm i @supabase/supabase-js
.env.local
NEXT_PUBLIC_SUPABASE_URL=<上面复制的URL>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<上面复制的KEY>
app/page.tsx
'use client';
import { createClient } from '@supabase/supabase-js';
const supa = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL!,process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);export default function Home() {const insert = async () => {const { data, error } = await supa.from('posts').insert({ title: 'Hello Supabase' });console.log({ data, error });};return <button onClick={insert}>插入一条数据</button>;
}
npm run dev
→ 点击按钮 → 返回 posts
表已多一行,RLS 生效。
四、进阶:自托管一条命令
官方 docker-compose 一键起:
git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker
cp .env.example .env
# 修改 .env 里 POSTGRES_PASSWORD、JWT_SECRET 等
docker compose up -d
默认端口:
- Kong API 网关:8000
- Studio 控制台:3000
- PostgreSQL:5432
国内镜像拉取慢?在
/etc/docker/daemon.json
加入:
{"registry-mirrors":["https://registry.docker-cn.com","https://hub-mirror.c.163.com"]}
然后 systemctl restart docker
。
五、实战:把 Archon 项目搬到 Supabase
(以下步骤对应文件 2 的学习笔记,合并后更紧凑)
步骤 | 要点 | 踩坑提示 |
---|---|---|
1. 新建项目 | Region 选 Singapore | 后续 CLI 连接需用 |
2. 克隆代码 | git clone https://gitee.com/enzoism/Archon.git -b enzo001 | 主分支仍用 OpenAI |
3. 替换环境变量 | 把 .env.example 复制为 .env ,填写 SUPABASE_URL 与 SUPABASE_SERVICE_KEY (需在 Settings → Service Keys 新建) | anon key 无法 bypass RLS,必须用 service_role |
4. 执行初始化 SQL | 复制 migration/complete_setup.sql 到 Studio → SQL Editor 运行 | 若自托管,需手动创建 vector 扩展:create extension if not exists vector; |
5. 拉镜像 | docker compose pull | 国内网络失败就换镜像源 |
6. 模型替换 | 原项目用 OpenAI,实验性换成 智谱 GLM-4 | 改 base_url = https://open.bigmodel.cn/api/paas/v4 ,apikey 填智谱的 |
7. 启动 | docker compose up -d | 看到 kong 和 edge-functions healthy 即成功 |
浏览器打开 http://localhost:3000
→ 注册账号 → 新建知识库 → 上传 PDF → 问答测试,全流程打通。
六、性能调优 & 生产 checklist
场景 | 锦囊 |
---|---|
高并发实时 | 给 supabase_realtime 单独开连接池;使用 private 通道减少广播 |
图片存储 | 开启 IMGPROXY 动态压缩;CDN 回源带 If-None-Match |
Edge Functions | 把冷启动依赖全打包成 deno.lock ,开启 v8_cache |
自托管备份 | 使用 wal-g 连续归档到 S3,每天全量 pg_dump |
升级 | 小版本直接 docker compose pull ;大版本先看 Release Notes |
七、常见问答(评论区高频)
Q1. 实时监听 1w 人在线会不会炸?
A:Realtime 默认 200 并发,可在 docker-compose.yml
把 MAX_CONNECTIONS
调到 1000,再配合 Redis Stream 做分层广播。
Q2. 可以只用 Supabase 做 CMS 后台吗?
A:完全可以,Studio 本身就是用 Supabase 自举,配合 Row Level Security 可以给编辑/审核/管理员不同视图,省掉 Admin Panel。
Q3. 以后想迁到 AWS RDS 方便吗?
A:pg_dump
导出即可;如果用了 Auth、Storage,需额外迁 auth.users
和 S3 对象,官方提供 pgloader 模板。
八、结语
Supabase 把“开源、可控、易用”三个看似矛盾的词揉在了一起:
你可以 5 分钟托管一个 MVP,也可以深度调优 PostgreSQL、自托管满足合规;既拥有 Firebase 的丝滑体验,又拿到关系型数据库的全部威力。