首页
/ Supabase 深度解读:基于 Postgres 与开源组件打造的 Firebase 式后端开发平台

Supabase 深度解读:基于 Postgres 与开源组件打造的 Firebase 式后端开发平台

2026-09-07 13:29:05作者:史锋燃Gardner

本文以仓库内 i18n/README.pt.md(葡萄牙语版项目自述)为核心脉络,结合当前仓库中 apps/packages/docker/ 的真实实现,系统拆解 Supabase 的平台定位、核心功能矩阵、分层架构与客户端生态。读完本文,你将能说清 Supabase「由哪些开源组件拼装而成、各自负责什么、如何协同对外提供 Database / Auth / Realtime / Storage / Functions 能力」,并掌握在仓库中逐一印证这些组件的正确线索。

Supabase 是什么:Postgres 开发平台与 Firebase 的开源替代

葡萄牙语 README 开篇给出了明确的项目定位:

Supabase é uma alternativa de código aberto ao Firebase. Estamos reproduzindo as funcionalidades do Firebase usando ferramentas de código aberto de nível empresarial.

即 Supabase 是 Firebase 的开源替代品,但它并非从零重写 Firebase,而是用企业级开源工具把 Firebase 的能力重新搭建出来。值得注意的是其关键方法论:凡是已有成熟开源方案(MIT / Apache 2 或同等宽松许可)的能力直接采用并维护,没有现成方案时才自行构建并开源。仓库根目录的 README.md 也以同款措辞佐证了这一策略("We're building the features of Firebase using enterprise-grade open source tools")。

与此同时,自述也明确强调「Supabase 不是 Firebase 的 1:1 复制」:其目标是借助开源工具,为开发者提供类似 Firebase 的开发体验,而底座是一套完全开放、可自托管的技术栈。

功能矩阵:一份可逐项对照源码与编排文件的能力清单

葡萄牙语版 README 用勾选清单列出现已具备的核心能力,这一清单与当前仓库实际结构高度吻合:

  • 托管式 Postgres 数据库(对应 docker/ 下的 Postgres 镜像与 supabase/migrations/ 中的大量 SQL 演进)
  • 实时订阅(Realtime,监听数据库变更并通过 WebSocket 推送)
  • 认证与授权(Auth)
  • 自动生成的 API(REST / GraphQL / Realtime,见根 README.md 的更细分类)
  • 管理面板 / Dashboard(对应 apps/studio 前端工程)
  • 存储(Storage,文件与权限管理)
  • 函数(数据库函数与 Edge Functions)

若要快速建立「功能 ↔ 实现」的映射,最直接的入口是仓库中的自托管编排文件 docker/docker-compose.yml:它定义了 studioapi-gwauthrestrealtimestorageimgproxymetafunctionsdbsupavisor 等服务,几乎逐条对应上述功能清单。可见 README 描述的每一类能力,都能在该编排中找到承担它的具体服务与镜像。

Supabase 管理面板示意(来自仓库 assets 目录)

产品形态与演进阶段:从托管平台到本地开发与自托管

README 原文描述了两条并行路线:

  1. 托管平台(plataforma hospedada):开发者可注册后在 supabase.com/dashboard 直接创建项目,无需本地安装任何组件;
  2. 本地 / 自托管路线:README 明确写有「estamos a criar a experiência de desenvolvimento local」,即本地开发体验曾是团队持续建设的重心,同时强调平台稳定性。

当前仓库可以看作这两条路线的完整开源交付物。docker/ 目录提供了 docker-compose.ymldocker-compose.pg15.ymldocker-compose.pg17.ymldocker-compose.s3.ymldocker-compose.kong.yml 等编排变体,配合 docker/setup.shdocker/run.shdocker/reset.sh 脚本即可拉起一整套本地环境。而 docker/docker-compose.yml 文件头部注释给出的基本操作是:

# 启动
docker compose up -d
# 停止
docker compose down
# 本地开发模式(叠加额外配置)
docker compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -d
# 重置环境
sh reset.sh

其中 api-gw 服务的端口映射 8000KONG_HTTP_PORT / API_GW_HTTP_PORT)正是上文中 SUPABASE_URL: http://api-gw:8000 等内部寻址所指向的统一网关入口。

状态演进记录:README 中的阶段标注

该葡萄牙语自述保留了一段「项目成熟度时间线」,是理解 Supabase 发布节奏的一手材料:

  • Alpha:以封闭客户群小范围测试
  • Alpha Público(公开 Alpha):任何人可在 Dashboard 注册,但官方提示仍可能存在缺陷
  • Beta público(公开 Beta):对多数非企业场景足够稳定
  • Público(正式版 / production-ready):文档标注为未勾选状态,并注明当时处于 Beta Público 阶段

这段描述反映了项目在撰写该翻译时的真实发布状态。从仓库现状看,项目已成长为包含 apps/(studio、docs、www、learn、kb 等多个应用)、packages/(pg-meta、ui、ui-patterns、shared-data、ai-commands 等共享包)的大型 pnpm monorepo,属于典型的持续高速演进形态。读者若关注发版节奏,可按 README 建议关注仓库 Releases。

Como funciona:自底向上的开源组件架构

README 的核心章节「Como funciona」(工作原理)点明了整体架构原则:把多个各自成熟的开源系统组合起来,形成统一的开发者体验。原文给出的架构组件如下:

  • PostgreSQL:具备 30 余年持续演进的对象关系型数据库,以可靠性、功能完整性与性能著称,是整张技术栈的「心脏」;
  • Realtime:一个 Elixir 服务,借助 WebSocket 让客户端监听 Postgres 的插入、更新、删除事件;其原理是读取 Postgres 内置的复制(replication)机制,把字节流变更转换为 JSON,再经 WebSocket 广播给被授权的客户端;
  • PostgREST:把 PostgreSQL 数据库直接变成 RESTful API 的 Web 服务器,免去手写接口层;
  • Storage:面向 S3 中文件的 RESTful 管理接口,并用 Postgres 承载权限判断;
  • postgres-meta:管理 Postgres 的 RESTful API,可用于取表、加角色、跑查询等运维操作;
  • GoTrue:基于 SWT/JWT 的认证 API,负责用户管理与会话、签发访问令牌(仓库根 README.md 的英文版本补充说明其为 JWT-based auth API);
  • Kong:云原生 API 网关,统一收敛对外路由。

仓库中有一张官方架构示意图,可用于直观对照上述分层:

Supabase 官方架构示意图

从编排文件印证每个组件

把 README 的「组件清单」与 docker/docker-compose.yml 中真实存在的服务逐一对照,即可获得完整的实现级证据:

README 组件 编排服务 仓库内可见的事实
PostgreSQL db 镜像为 supabase/postgres:17.6.1.136,即带 Supabase 扩展体系的 Postgres 发行版;supabase/migrations/ 存放数百个演进迁移脚本
Realtime realtime 镜像 supabase/realtime:v2.102.3,容器名 realtime-dev.supabase-realtime,通过 DB_AFTER_CONNECT_QUERY: SET search_path TO _realtime 等环境变量接入 Postgres
PostgREST rest 镜像 postgrest/postgrest:v14.12,核心参数为 PGRST_DB_URIPGRST_DB_SCHEMASPGRST_JWT_SECRETPGRST_DB_MAX_ROWS(默认 1000)、PGRST_DB_ANON_ROLE: anon
Storage storage 镜像 supabase/storage-api:v1.60.4,通过 POSTGREST_URL 调 PostgREST、用 AUTH_JWT_SECRET 校验令牌,另配套 imgproxy 服务做图片处理;换用 S3 后端时叠加 docker-compose.s3.yml
postgres-meta meta 镜像 supabase/postgres-meta:v0.96.6,其能力对应 packages/pg-meta(TypeScript 实现的 REST 客户端,供 Studio 调用)
GoTrue auth 镜像 supabase/gotrue:v2.189.0
Kong / 网关 api-gw 编排中 api-gw 默认启用 Envoy,并注释「Envoy is the default API gateway」;Kong 作为历史网关仍保留在 docker-compose.kong.ymldocker/volumes/api/kong.yml 亦在仓库中

值得一提的是网关层的演进:README 撰写时列出的网关是 Kong,而当前编排默认网关已切换为 Envoy(见 api-gw 服务的注释,envoyproxy/envoy:v1.39.0),但为兼容历史配置,envoykong 都被保留为网络别名。这种「组件可替换、接口兼容」的设计,正是 README 所说「组合并适配既有开源工具」的典型体现。

更深一层的调用链:PostgREST 如何把数据库变成 API

rest 服务的环境变量能让我们看清 REST API 的产生机制:PGRST_DB_URI 指向以 authenticator 角色连接的数据库;PGRST_DB_ANON_ROLE: anon 指定匿名请求落库角色;PGRST_DB_EXTRA_SEARCH_PATH 控制可被暴露的 schema。也就是说,表结构的增删改查天然映射为 HTTP 端点,权限则由 Postgres 自身的行级安全(RLS)策略决定——这与 README 中「把数据库直接变成 RESTful API」的描述一一对应。类似的,认证层的 JWT_SECRET 会在网关、Auth、REST、Studio 之间共用,保证签发与校验的闭环。

Bibliotecas Cliente:模块化的客户端库生态

README 特别强调客户端库的模块化设计:supabase-{lang} 是组合层,向下分别聚合 postgrest-{lang}realtime-{lang}gotrue-{lang} 等「单一后端系统」的子库。这种拆分的价值在于:每个子库可独立维护与替换,从而与既有社区工具良好共存。

原文的客户端生态总表(此处仅保留语言名与组织形式,不再粘贴外部链接)大致如下:

仓库 官方 社区
supabase-{lang} JS C# / Flutter / Python / Rust
postgrest-{lang} JS C# / Dart / Python / Rust
realtime-{lang} JS C# / Dart / Python / Rust
gotrue-{lang} JS C# / Dart / Python / Rust

从仓库本身也可找到这一「平台 + 多端」理念在应用层面的落地:例如 examples/ 下的 user-managementauthrealtimetodo-list 等目录,为 Next.js、Expo、Flutter、SvelteKit、Angular、Swift 等不同技术栈分别提供了与后端各能力对接的完整示例。

文档、社区与支持渠道

README 为不同诉求划定了三个支持渠道,其定位至今仍有参考价值:

  1. 社区论坛(Discussions):适用于「怎么用 Supabase 构建」「数据库最佳实践」类的开发问题;
  2. GitHub Issues:适用于使用中遇到的 bug 与报错;
  3. 邮件支持:适用于数据库或基础设施层面的故障。

仓库侧的配套入口同样清晰:完整文档站点源码位于 apps/docs,其内容目录 apps/docs/content 包含数百篇 MDX 文档,可离线查阅数据库、Auth、API、Realtime、Storage、AI/Vector 等全部主题。

多语言生态与翻译维护机制

该项目把「多语言」当作一等公民来维护:根目录 README.mdi18n/ 目录下一共有四十多种语言的翻译文件(i18n/languages.md 是完整的索引清单,覆盖阿拉伯语、中文简繁、日韩、欧洲诸语种等)。README 的翻译文件中还留有给译者协作的 HTML 注释(<!--- Remove this list if you're traslating to another language... -->),提示译者删除多语言链接大表、只保留翻译索引,以避免多份文件间的链接维护负担——这是开源多语言 README 工程实践里一个值得借鉴的细节。

资金与可持续性:开源项目的赞助入口

README 末尾附有 Patrocinadores(赞助者)章节,通过 GitHub Sponsors 为项目提供资金支持入口。对开源项目而言,这类渠道与上文的社区、翻译体系共同构成了其可持续运营的基础设施,也侧面印证了项目「核心仓库开源、平台能力商业托管」的运作模式。

小结与进一步阅读路径

回到葡萄牙语 README 的核心叙事:Supabase = 由 PostgreSQL 驱动的开源后端平台,用多个企业级开源组件拼出 Firebase 式开发体验。理解它不需要背组件名,而是把握三条主线:

  1. 数据库是中心:Postgres 既是存储,也是 REST API、Realtime、权限模型的共同底座;
  2. 网关 + 微服务分层:Auth、REST、Realtime、Storage、meta 等服务经网关统一暴露,彼此通过共享密钥与 Postgres 协同;
  3. 开放式可替换:网关可从 Kong 演进到 Envoy、存储可切 S3、整栈可 docker compose 自托管,生态客户端按模块独立演进。

若想继续深入,推荐按以下路径在仓库内展开阅读:

  • 整栈组件与自托管:先读 docker/docker-compose.yml,再对照 docker/CONFIG.mddocker/CHANGELOG.md
  • 数据库迁移历史:supabase/migrations 是按时间线组织的真实 schema 演进,可看到文档站点、搜索、RAG 等功能的落库过程;
  • 管理面板实现:apps/studio 是 Dashboard 的 Next.js 前端工程;
  • 客户端与服务端共享层:packages 下的 pg-metashared-datauiai-commands 等包,展示了 monorepo 内部如何复用类型、常量与组件。

通过「README 概念 → docker 编排 → 源码目录」的三层对照,你就能把一份产品自述还原为一套可安装、可运行、可二次开发的具体技术栈。

登录后查看全文
热门项目推荐
相关项目推荐