自托管服务
supabase/supabase avatar
supabase/supabase

Supabase 评测:把 Postgres 变成 Firebase 式后端,但代价是架构复杂度

面向 Web、移动端和 AI 应用的 Postgres 开发平台。

109,306 个 Star13,818 个 ForkTypeScriptApache-2.0

秒懂

它是什么?
Supabase 用开源组件拼出一个托管 Postgres 开发平台,覆盖数据库、认证、REST/GraphQL、实时订阅、存储和边缘函数。本文拆解它的架构、上手方式、局限,并对比自建 Postgres 与 Firebase。
适合谁用?
适合已经熟悉 Postgres、想要省去后端胶水代码的团队,尤其是需要 SQL 能力、行级安全或向量搜索的 Web 和 AI 应用。不适合追求极简部署、对实时延迟有硬性要求、或者只想用 NoSQL 思维建模的项目。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题,谁该用它

Supabase 想解决的是后端重复劳动。一个典型 Web 应用需要数据库、用户认证、API 层、文件存储、实时推送,如果自己搭,要选型、集成、维护多个服务。Supabase 把这些打包成一个平台,底层用 Postgres 做核心。它的目标用户是那些认可 Postgres 生态、但不想从零写 REST 端点或管理认证状态的开发者。README 明确说,它是在用 Firebase 的开发者体验,套在开源工具上。所以如果你已经深度使用 Postgres,或者需要 SQL 的灵活性和行级安全,Supabase 比 Firebase 更贴合。反过来,如果项目只需要简单的键值存储和推送,Supabase 的组件复杂度可能超出需求。

架构拆解:八个开源组件如何拼成平台

Supabase 不是单一程序,而是多个开源服务的组合。核心是 Postgres 数据库,其余组件围绕它提供 API 和功能。PostgREST 把数据库表直接映射成 RESTful API,GoTrue 处理 JWT 认证,Realtime 用 Elixir 写的服务器监听 Postgres 的复制流,把变更转成 JSON 通过 websocket 广播。Storage API 管理 S3 上的文件,权限由 Postgres 控制。pg_graphql 是 Postgres 扩展,暴露 GraphQL 端点。postgres-meta 提供管理数据库的 REST API,比如获取表结构和执行查询。Envoy 作为边缘代理。这个架构的聪明之处在于每个组件都独立,可以单独替换或升级。但代价是理解整个数据流需要同时掌握 Postgres 复制机制、JWT 流程和 websocket 协议。

认证与实时机制:JWT 和复制轮询的细节

认证走 GoTrue,它生成 JWT 令牌,客户端带着令牌访问 PostgREST 或 Realtime,由 Postgres 的行级安全策略决定数据可见性。这套流程把权限控制下沉到数据库,比在应用层写授权逻辑更一致。实时功能是 Realtime 服务器的工作方式,它轮询 Postgres 的内置复制功能,检测到 insert、update、delete 后把变更转成 JSON 广播给订阅的客户端。注意这里的关键词是轮询,不是推送。这意味着实时性取决于轮询间隔,不是毫秒级。对于聊天应用或协作编辑,这个延迟可能明显。README 没有给出具体间隔数字,但架构上这是轮询模型,不是事件驱动,需要你在设计实时功能时把延迟预期放低。

上手路径:托管、自托管和本地开发

Supabase 提供三种使用方式。最省事的是托管平台,在 supabase.com 注册即可,不用安装任何东西。自托管需要自己部署整套组件,文档在 hosting/overview 页面。本地开发也有专门指南,用于在开发环境模拟生产。客户端库采用模块化设计,官方支持 JavaScript/TypeScript 和 Flutter,每个语言都有主客户端和分功能客户端,比如 postgrest-js、auth-js、realtime-js,它们打包在 supabase-js 里。实际启动本地环境的命令在 README 里没有给出,需要查看 local-development 文档。根据仓库结构,你大概率要用 Docker Compose 拉起所有服务,但具体命令得去文档确认。无论如何,本地开发比托管多一层环境配置成本,尤其是要处理 Realtime 和 Storage 的依赖。

真正的局限:不是所有场景都适合

最大的局限是实时机制依赖轮询复制,这决定了它不适合需要低延迟推送的场景。如果你做股票行情或多人游戏,这个架构可能满足不了。另一个问题是组件多,运维复杂。自托管时你要维护 Postgres、Realtime、GoTrue、Storage、Envoy 等至少五个服务,每个都有独立的更新周期和配置。虽然 README 说会用开源工具,但组件间可能有版本兼容问题。还有个隐性限制是 Postgres 本身,如果你习惯 MongoDB 那种灵活的文档模型,Supabase 的强模式会让你不适应。最后,托管版本的数据出口和备份策略没有在 README 中说明,对数据主权敏感的项目需要额外调查。

替代方案:Firebase 和纯 Postgres 自建

最直接的替代是 Firebase,它提供类似的认证、数据库和推送,但底层是 NoSQL 文档存储,不是关系型数据库。如果你不需要 SQL 查询、事务或复杂关联,Firebase 更简单,实时性也更好,因为它基于实时数据库的同步机制。另一个替代是纯自建 Postgres 加 PostgREST,你自己部署 PostgREST 和认证服务,比如直接写一个 Express 后端。这样你完全控制组件,但需要自己处理认证、实时和存储的集成。Supabase 的价值在于把这些集成工作提前做完,但如果你只需要 REST API,PostgREST 单独就能满足,不需要整套平台。选择的关键是看你要多少功能:只要 API,自建 PostgREST 够用;要认证加实时,Supabase 省事;要 NoSQL 简单性,Firebase 更顺手。

维护与许可:Apache-2.0 下的升级节奏

仓库采用 Apache-2.0 许可,这意味着你可以自由使用、修改和分发,包括商用,但要注意各组件可能有自己的许可,比如 PostgREST 用的是 MIT,GoTrue 也是 MIT,但 Realtime 和 Storage 具体许可需要单独查看。维护成本主要在版本更新,仓库的 release 显示每月有更新,比如 v1.26.08 是 2026 年 8 月的开发者更新,v1.26.07 是 7 月,v1.26.05 是 5 月,说明迭代频繁。对于自托管用户,这意味着要跟上组件升级,否则可能错过安全修复或功能改进。托管用户则不用关心,但需要接受平台的强制升级。客户端库的模块化设计让升级相对平滑,因为每个子库独立,但主客户端版本要兼容各子库的版本。

编辑结论

适合已经熟悉 Postgres、想要省去后端胶水代码的团队,尤其是需要 SQL 能力、行级安全或向量搜索的 Web 和 AI 应用。不适合追求极简部署、对实时延迟有硬性要求、或者只想用 NoSQL 思维建模的项目。采用前先验证三件事:确认 Realtime 轮询复制带来的延迟在你的场景可接受,检查自托管时 Envoy、Kong 等代理层的运维负担,以及试用 GoTrue 的 JWT 会话管理是否满足你的认证流程。Supabase 的价值在于把多个成熟开源工具捆绑成一致体验,但这份便利的代价是你要接受它的组件边界和升级节奏。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记