
Supabase Postgres 开发平台产品矩阵、自动数据 API 与自托管架构全解析【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase本文以 Supabase 官方内容文档 平台总览 为骨架系统梳理 Supabase 作为Postgres 开发平台的六大产品能力Database、Auth、Storage、Edge Functions、Realtime、Vector、由数据库 schema 自动生成三类数据 API 的机制并结合当前仓库中的 Docker Compose 编排、数据库初始化脚本与角色配置还原每个能力在自托管环境下的真实落地形态。读完后你将理解 Supabase 各组件的职责边界、服务间依赖关系以及如何通过仓库内docker/目录完成一套可运行的本地部署。Supabase 的定位以 Postgres 为核心的开源后端平台总览文档给出的定义是Supabase 是一个 Postgres 开发平台Postgres development platform一个用于构建 Web 与移动应用的开源后端并配备一套开箱即用的集成工具链口号是 Build in a weekend. Scale to millions.。这一开源工具组合的工程哲学在 README 的 How it works 一节中有完整表述Supabase 使用企业级开源工具构建 Firebase 式的能力如果工具和社区存在且采用 MIT、Apache 2 或同等开源协议就用它如果不存在就自己构建并开源。需要强调的是Supabase 并非 Firebase 的 1:1 映射其目标是用开源工具提供类似 Firebase 的开发者体验。从仓库结构看这一理念对应了清晰的组件划分apps/目录承载 Studio管理面板、文档站apps/docs与官网apps/www等前端产品docker/目录承载完整的自托管编排而packages/目录则包含ui、ui-patterns、pg-meta、common等可复用前端与类型包。六大产品能力与实现组件总览文档将平台能力归纳为六个产品下面逐一继承原文档描述并给出仓库中可验证的对应组件。Database每项目独占一个 Postgres 实例文档描述每个项目都是一个独占的 Postgres 数据库完全可移植自动生成 REST 与 GraphQL API提供 Table Editor、SQL Editor 以及 40 预装扩展。在自托管编排 docker-compose.yml 中db服务使用官方supabase/postgres:17.6.1.136镜像这是一个定制版 Postgres 17通过挂载volumes/db/下的初始化 SQL 在首次启动时完成平台级改造97-_supabase.sql创建_supabase数据库存放 Supabase 内部元数据注释明确标注用于_analytics等内部数据99-roles.sql为authenticator、pgbouncer、supabase_auth_admin、supabase_functions_admin、supabase_storage_admin五个保留角色统一设置密码——从源码结构看每个上层服务REST、Auth、Functions、Storage、Pooler都使用独立的 Postgres 角色实现按组件的权限隔离99-jwt.sql通过ALTER DATABASE postgres SET app.settings.jwt_secret把 JWT 密钥与过期时间写入数据库级配置GUC供 PostgREST 的db-claims等机制直接读取免去应用层传递99-realtime.sql创建_realtimeschema 并转移所有权供 Realtime 服务内部使用99-pooler.sql 与 99-logs.sql分别为连接池Supavisor与日志Logflare/Vector功能做准备。Studio 侧对数据库的管理能力则依赖meta服务supabase/postgres-meta:v0.96.6L418-L433它是管理 Postgres 的 RESTful API拉取表结构、添加角色、执行查询本仓库的 packages/pg-meta 即其客户端实现所在。Auth内置认证与用户管理文档描述内置认证与用户管理支持 20 社交登录提供商、邮箱/密码、电话/OTP 与 magic link授权基于 Postgres Row Level SecurityRLS。自托管环境下该能力由auth服务提供镜像为supabase/gotrue:v2.189.0GoTrueJWT 认证 APIL109-L129。从 docker-compose.yml 的环境变量可以读出其配置面登录方式开关GOTRUE_EXTERNAL_EMAIL_ENABLED、GOTRUE_EXTERNAL_PHONE_ENABLED、GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED分别控制邮箱、电话与匿名注册社交登录Google、GitHub、Azure 等 OAuth 提供商通过GOTRUE_EXTERNAL_*_ENABLED/CLIENT_ID/SECRET/REDIRECT_URI变量启用默认注释需手动开启短信与 MFAGOTRUE_SMS_PROVIDER如 Twilio、GOTRUE_MFA_TOTP_ENROLL_ENABLED等变量预留了 OTP 发送与多因子认证的配置位邮件流SMTP 主机/端口/凭证、邀请/确认/找回等 URL 路径模板均可配置JWT 签发GOTRUE_JWT_SECRET对称 HS256 密钥、GOTRUE_JWT_EXP过期时间、GOTRUE_JWT_AUD: authenticated与GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated表明默认客户端角色为authenticated——这正是 RLS 策略中判断已登录用户的依据。值得注意的一点GoTrue 直接写入 PostgresGOTRUE_DB_DATABASE_URL指向supabase_auth_admin角色的连接串即用户与用户数据存储在 Postgres 中这使授权能够直接下沉到 Postgres 的 RLS 层面与文档中Authorization via Postgres Row Level Security的描述互相印证。StorageS3 兼容对象存储文档描述S3 兼容的对象存储配套全球 CDN285 城市、图片变换以及文件、analyticsApache Iceberg、vector 三种桶类型。自托管栈中storage服务使用supabase/storage-api:v1.60.4L332-L394其可配置项包括STORAGE_BACKEND: file本地目录为volumes/storage挂载至/var/lib/storage若要使用 S3 后端官方提供了 docker-compose.s3.yml 叠加文件对应注释To use S3 backed storageFILE_SIZE_LIMIT: 52428800默认单文件 50MBENABLE_IMAGE_TRANSFORMATION: true配合独立的imgproxy服务darthsim/imgproxy:v3.30.1L395-L416后者与 storage 共享同一存储目录卷负责快速安全的图片处理S3_PROTOCOL_ACCESS_KEY_ID/S3_PROTOCOL_ACCESS_KEY_SECRET暴露 S3 协议访问所需的凭证变量POSTGREST_URL: http://rest:3000从依赖关系看storage 会复用 PostgREST 作为内部访问通道且其自身使用supabase_storage_admin角色连接数据库——权限元数据由 Postgres 侧管理与 README 中Postgres handling permissions的说法一致。Edge Functions分布式无服务器函数文档描述全球分布的 TypeScript/Deno 无服务器函数兼容 Node.js 生态2M NPM 模块内置可观测性。自托管栈中functions服务基于supabase/edge-runtime:v1.74.0L435-L473函数代码挂载自 volumes/functions 目录/home/deno/functions仓库自带 hello 与 main 两个示例函数deno-cache命名卷持久化 Deno 模块缓存关键运行参数VERIFY_JWT控制入口是否强制校验 JWT注入的环境变量同时包含传统对称密钥签名的SUPABASE_ANON_KEY/SUPABASE_SERVICE_ROLE_KEY与新的不透明密钥SUPABASE_PUBLISHABLE_KEYS/SUPABASE_SECRET_KEYS——从源码结构看函数运行时同时兼容两代 API 密钥体系。Realtime基于 WebSocket 的实时同步文档描述WebSocket 实时同步包含三种能力——数据库变更监听、presence在线状态、broadcast任意消息广播。其底层机制在 README 中有明确说明Realtime 是一个 Elixir 服务通过轮询 Postgres 内建的逻辑复制replication能力捕获数据库变更将变更转为 JSON再经 WebSocket 广播给已授权的客户端。自托管栈中对应realtime服务supabase/realtime:v2.102.3L285-L329配置要点包括DB_AFTER_CONNECT_QUERY: SET search_path TO _realtime连接建立后切换到专属_realtimeschema该 schema 由上文 realtime.sql 初始化脚本创建DB_ENC_KEY用于加密存储租户级配置的密钥SECRET_KEY_BASEElixir 应用密钥容器名刻意命名为realtime-dev.supabase-realtime注释解释是因为 Realtime 通过解析子域名构造租户 ID——自托管时以realtime-dev作为默认租户。Vector基于 pgvector 的 AI 工具链文档描述由 pgvector 驱动的 AI 工具包可在 Postgres 中把向量嵌入与事务数据一起存储、索引和查询。由于向量能力是与事务数据同库共存的它没有独立的服务容器而是依托 db 服务的 Postgres 扩展体系。本仓库提供了可直接参考的实现案例vector_hello_world.ipynb、face_similarity.ipynb 等 AI 示例以及文档站自身的向量检索迁移如 improve_vector_search.sql 与 hybrid_search.sql——后者展示了向量检索与全文检索结合的混合搜索方案可作为 pgvector 实战的直接参照。自动生成的三类数据 API总览文档指出每个 Supabase 项目都会从数据库 schema 自动生成三类 API。RESTPostgREST 即时 CRUD由rest服务postgrest/postgrest:v14.12L249-L283提供它把 Postgres 直接映射为 RESTful API无需代码生成。可配置的参数在编排文件中一目了然PGRST_DB_SCHEMAS暴露哪些 schema默认publicPGRST_DB_MAX_ROWS单次查询最大返回行数docker-compose.yml 中默认 1000PGRST_DB_EXTRA_SEARCH_PATH额外的 search_pathPGRST_DB_ANON_ROLE: anon未认证请求使用anon角色配合 RLS 决定匿名可读范围PGRST_JWT_SECRET接受对称密钥、单个 JWK 或 JWKS注释给出了 Podman 下的用法与 db 侧app.settings.jwt_secret共用同一套密钥。GraphQLpg_graphql 自动发现关系文档描述该 API 由pg_graphql扩展提供自动检测表关系与 schema。README 的组件清单同样将其列为架构组成部分——GraphQL API 由 Postgres 扩展直接暴露而非独立网关服务这与 REST 走 PostgREST 的路线形成互补。Realtime API订阅数据库变更即上节 Realtime 服务的数据库变更监听能力客户端经 WebSocket 订阅postgres_changes事件服务侧从逻辑复制流中筛选出对应表的 insert/update/delete以 JSON 推送给通过 JWT 校验的订阅者。三类 API 在自托管栈中统一收敛到 API 网关默认网关是 Envoyenvoyproxy/envoy:v1.39.0L68-L107其路由规则定义在 volumes/api/envoy 的envoy.yaml、lds.template.yaml、cds.yaml中网关同时持有ANON_KEY/SERVICE_ROLE_KEY等凭证用于校验。仓库还提供了 Kong 作为可选网关docker-compose.kong.yml以及 Caddy / Nginx 反向代理方案docker-compose.caddy.yml、docker-compose.nginx.yml代理模板分别位于 Caddyfile 与 supabase-nginx.conf.tpl。自托管栈的整体依赖与数据流从 docker-compose.yml 的服务定义与depends_on约束可以还原出完整的启动顺序与数据流db (Postgres 17, healthcheck 通过后才放行下游) ├─ auth (GoTrue) 写入用户数据, 依赖 db ├─ rest (PostgREST) 映射 schema 为 REST, 依赖 db ├─ realtime (Elixir) 逻辑复制流订阅变更, 依赖 db ├─ storage (storage-api) 依赖 db rest imgproxy ├─ meta (postgres-meta) Studio 的数据管理通道, 依赖 db ├─ supavisor (Pooler) 连接池, 5432 直连 / 6543 事务池, 依赖 db ├─ api-gw (Envoy) 8000 端口统一入口, 依赖 studio 就绪 └─ functions (edge-runtime) 依赖 api-gw 健康检查通过 studio (Dashboard) 连接 meta 与网关, 是栈的管理入口几个可验证的细节数据库是唯一强依赖除网关与函数外所有数据面服务都condition: service_healthy等待 db 健康L126-L129且注释说明若使用外部 Postgres 数据库可注释掉下方所有服务L475——印证了文档Fully portable、无厂商锁定的表述连接池双模式supavisorsupabase/supavisor:2.9.5L532-L583同时暴露 5432会话模式与 6543POOLER_POOL_MODE: transaction事务模式连接参数可由POOLER_DEFAULT_POOL_SIZE、POOLER_MAX_CLIENT_CONN等调节凭证体系JWT_SECRET/JWT_EXPIRY是全局共享密钥同时被 auth 签发、PostgREST 校验、Realtime 校验、functions 校验与 db 侧 GUC 使用ANON_KEY与SERVICE_ROLE_KEY则是分别对应anon与service_role角色的 JWT客户端与服务端因此共享同一套鉴权语义。部署与运维层面的入口脚本同样位于docker/目录run.sh 负责配置与启停update.sh 负责镜像升级sh update.sh --dry-run可预览reset.sh 用于彻底重置全部环境变量的权威参考在 CONFIG.md镜像版本沿革见 versions.md 与 CHANGELOG.md。需要注意 docker/README.md 的安全提示默认配置不适用于生产环境上线前必须更换.env中所有默认口令与密钥、审查 CORS、前置安全代理并建立备份。关键差异化与适用边界总览文档列出的四条关键差异化结合仓库现状可以这样理解其边界开源可自托管docker/目录即完整的官方自托管栈apps/、packages/均为开源代码基于 Postgres、可移植所有业务数据都在标准 Postgres 中db服务可替换为外部 Postgres 实例应用数据导出即走标准 pg_dump 通道平台级集成上文的依赖图显示各组件共享同一数据库、同一套 JWT 体系Auth 的用户与 RLS、REST 的角色、Storage 的权限元数据天然打通SOC2 Type 2 合规与 16 全球区域属于托管服务的运营属性原文档声明自托管场景不涉及。客户端侧平台提供模块化 SDK每个子库PostgREST、GoTrue、Realtime、Storage、Functions 的独立客户端都可单独使用官方支持 JavaScript/TypeScript、Flutter、Swift、Python社区另有 Kotlin、C#、Ruby 等完整清单见 README 的 Client libraries 表格本仓库 examples/ 目录下则覆盖了 Next.js、SvelteKit、Kotlin、Swift 等多端示例如 nextjs 认证示例、Kotlin 示例、Realtime 多人协作示例可作为各产品能力的落地参考。小结apps/www/content/md/index.md这份总览用最短的篇幅定义了 Supabase 的产品边界一个以独占 Postgres 为核心、围绕它展开 Auth/Storage/Edge Functions/Realtime/Vector 五大能力、并通过 PostgREST pg_graphql Realtime 自动生成三类数据 API 的开发平台。当前仓库则以 docker/docker-compose.yml 为蓝本给出了这套平台的完整可运行实现——从数据库初始化脚本到服务依赖拓扑、从 JWT 密钥体系到连接池与网关配置均可逐一对照。若要进一步动手建议的路径是阅读 docker/README.md 了解部署流程 → 按 CONFIG.md 配置.env→ 用sh run.sh启动并打开 Studio 验证各服务健康状态 → 参考 examples/ 中的端到端示例将六大能力接入自己的应用。【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考