部署教程|Supabase 自托管:Postgres + Auth + Storage 一站式上线

1. 方案概览

Supabase = 托管版「开源 Firebase」:Postgres + Auth + Storage + Realtime + Edge Functions。官方提供 Docker Compose 便于自托管。

2. 前置准备

  • 服务器:2C4G+,30GB 磁盘起步。
  • 安装 Docker / Docker Compose。
  • 域名(可选):用于外网访问与 OAuth 回调。
  • 邮件服务(可选):用于注册/重置密码。

3. 获取仓库并启动

1
2
3
4
5
6
7
8
9
10
11
12
git clone https://github.com/supabase/supabase.git
cd supabase/docker

# 复制环境变量模板
cp .env.example .env

# 生成随机密钥(JWT/Anon/Service)
openssl rand -base64 64
# 写入 .env 的 SUPABASE_JWT_SECRET / ANON_KEY / SERVICE_ROLE_KEY 等字段

# 启动
docker compose up -d

核心服务:kong(网关)、rest(PostgREST)、realtimeauthstoragedb(Postgres) 等。

4. 基础配置

  • .env 中设置:
    • SUPABASE_PUBLIC_URL:对外访问域名或 IP。
    • KONG_ANONYMOUS_REPORTS:如需关闭遥测设为 off
    • 邮件服务:GOTRUE_SMTP_* 字段。
  • 数据持久化:确保 dbstoragerealtime 卷挂载到本地磁盘。

5. 验证服务

  1. 访问 Kong 代理的 API:http://<host>:8000
  2. PostgREST:http://<host>:8000/rest/v1/,需携带 apikey(Anon/Service)。
  3. Realtime/Storage:同样走 Kong,前端 SDK 会自动处理路由。

6. 前端最小示例(JS)

1
2
3
4
5
6
7
8
9
import { createClient } from '@supabase/supabase-js'

const supabaseUrl = 'https://your-domain'
const supabaseKey = 'public-anon-key'
const supabase = createClient(supabaseUrl, supabaseKey)

const { data, error } = await supabase
.from('todos')
.select('*')

在 .env 的公开 key 填前端,Service Role 仅用于后端。

7. 常见运维

  • 备份:定期导出 Postgres;Storage 文件定期同步到对象存储。
  • 证书:用 Caddy/Traefik/Nginx 反代 + ACME 自动证书。
  • 日志/监控:采集容器日志;Pg 监控可用 Prometheus exporter。
  • 升级:git pulldocker compose pull && docker compose up -d,注意备份。

8. 常见问题

  • 无法注册/收邮件:检查 SMTP 配置;本地可临时关闭邮件验证用于开发。
  • 401/403:确认传入的 apikey 与 URL。
  • Realtime 断开:检查 WebSocket 端口与反代配置。
  • 磁盘暴涨:清理历史镜像;压缩/分层存储对象文件。

9. 总结

Supabase 自托管能在一台机器上快速跑通 Postgres + Auth + Storage + Realtime。按官方 Compose 启动、填好密钥与域名,前端用 SDK 即可读写,后续再完善邮件、TLS 与备份策略。***