Vibe Tutorial
数据持久化与数据库

7.8 Supabase 配置与使用

Tip

告别繁琐的运维,用"点外卖"的方式获取云端数据库。


1. 为什么要学这个?

你想开发一个副业项目,但光是安装和配置 PostgreSQL 数据库,就花了一整晚。 不仅要处理防火墙、端口映射,还要担心怎么做每日备份,怎么防黑客攻击。

好不容易上线了,因为忘了配置连接池。 当群里来了 500 个并发用户时,Vercel 瞬间发起了 500 个连接,直接把你的数据库打挂了。 你辛辛苦苦做的项目,就在流量最高峰的时候瘫痪了。

别让繁琐的运维工作成了你创业路上的拦路虎。用 Supabase,像点外卖一样简单地获取一个自带连接池、自动备份的云端数据库。


2. 核心概念

Supabase 不是一个普通的软件,它是一个 BaaS (Backend as a Service) 平台

以前 vs 现在

  • 以前 (Self-hosted): 你需要买服务器 -> 装 Linux -> 装 Docker -> 拉取 PostgreSQL 镜像 -> 配置 pg_hba.conf -> 安装 PgBouncer (连接池) -> 写脚本做备份。 这就像为了吃顿饭,还得亲自种菜、杀猪、生火。

  • 现在 (Supabase): 你注册账号 -> 点击 "Create New Project"。 就像点外卖,30秒后,一个热气腾腾、配置完美的数据库就端到了你面前。


3. 实战配置

在 Serverless 环境(如 Vercel)下使用 Supabase,最核心的只有一件事:分清楚两把钥匙

场景:Serverless 的连接数爆炸

当你在 Vercel 上部署应用时,每一个用户请求都会启动一个独立的程序实例。

  • 来 1 个用户 -> 1 个连接。
  • 来 1000 个用户 -> 1000 个连接。

普通的 PostgreSQL 默认最大连接数只有 100 左右。 如果不加控制,第 101 个用户就会报错白屏。

解决方案:使用连接池 (Connection Pool)

Supabase 贴心地为你准备了两套连接地址:

  1. 直连地址 (Direct URL): 端口 5432

    • 给谁用: 给你用(运行 Migration,调整表结构)。
    • 特点: 像专属VIP通道,稳,但路窄。
  2. 连接池地址 (Pooler URL): 端口 6543

    • 给谁用: 给 Vercel 用(处理海量用户请求)。
    • 特点: 像公交通道,能把成千上万的请求排队打包,塞进数据库,永不堵车

配置步骤

.env 文件中,必须同时配置这两把钥匙:

# 1. 给你用的 (Migration)
DIRECT_URL="postgresql://postgres:[密码]@aws-0-us-east-1.pooler.supabase.com:5432/postgres"

# 2. 给程序用的 (Transaction Mode)
# 注意端口是 6543,且必须要带 ?pgbouncer=true 参数
DATABASE_URL="postgresql://postgres:[密码]@aws-0-us-east-1.pooler.supabase.com:6543/postgres?pgbouncer=true"

4. 避坑指南

❌ 错误做法 ✅ 正确做法 💡 代价
只配一个 URL 双 URL 分离 如果只用连接池地址跑 Migration,会报错;如果只用直连地址跑业务,高并发会炸。
密码含特殊字符 URL 编码 密码里的 @ # 会截断连接字符串,导致解析失败。
选错区域 就近原则 Vercel 在华盛顿,Supabase 选新加坡。每一次查询都要绕地球半圈,用户体验极差。

5. 真实案例

Story

Product Hunt 发布日的惨剧

某独立开发者在 Product Hunt 上发布了自己的新产品。虽然他使用了 Supabase,但他错误地将直连地址 (5432) 填进了 Vercel 的环境变量。 产品突然爆火,一分钟涌入 3000 次点击。 仅仅几秒钟,数据库连接数就全部耗尽,后续所有用户看到的都是冰冷的 500 Internal Server Error。 当他满头大汗地修好配置时,已经过去了 10 分钟。在这最关键的 10 分钟里,他永远失去了对他最感兴趣的那 90% 的首批种子用户。

Vibe 心法:机会总是留给有准备的人。配置连接池只需要 1 分钟,但它能救你一命。


6. 本章小结

  1. ☁️ 云端托管:别自己运维数据库,用 Supabase 这种成熟的云服务。
  2. 🚦 连接池:Serverless 环境下,必须使用 6543 端口的连接池地址。
  3. 🔑 各司其职:Migration 用直连,App 运行用连接池,千万别搞混。