当前位置: 首页 > news >正文

Supabase 自建:开源的 Firebase 替代品,带数据库的后端服务

Supabase 自建:开源的 Firebase 替代品,带数据库的后端服务

Firebase 是 Google 的 BaaS(Backend as a Service),但数据在 Google 手里、免费额度有限、被 Google 服务锁定。Supabase 是完全开源的 Firebase 替代品:PostgreSQL 数据库、REST 和 GraphQL API、实时订阅、文件存储、用户认证,一站式解决后端需求。这篇文章讲如何自托管 Supabase。

Supabase 包含什么

  • PostgreSQL:关系型数据库,比 Firebase 的 NoSQL 更强大
  • PostgREST:自动把数据库表变成 REST API(增删改查无需写代码)
  • GoTrue:用户认证服务(邮箱、GitHub、Google 等 OAuth)
  • Realtime:实时数据订阅(WebSocket)
  • Storage:文件存储(S3 兼容)
  • Edge Functions:Deno 边缘函数(类似 Cloudflare Workers)
  • Supabase Studio:Web 管理界面(类似 Airtable 的数据库 UI)

服务器配置

Supabase 组件较多,至少需要:

  • 最低:4 核 8GB,50GB 硬盘
  • 推荐:4 核 16GB,100GB 硬盘

我把 Supabase 部署在雨云服务器rainyun+com的 4 核 16G 机型上,支撑几个小型项目没有问题。注册填优惠码2026off领 5 折优惠券,高内存机型价格实惠。

Docker Compose 部署

gitclone--depth1https://github.com/supabase/supabase ~/supabasecd~/supabase/docker# 复制环境变量模板cp.env.example .env

编辑.env关键配置:

############ # 必须修改的配置 ############ # JWT Secret(用于生成 API 密钥,至少 32 字符) JWT_SECRET=替换为随机字符串至少32位 ANON_KEY= # 用下面的命令生成 SERVICE_ROLE_KEY= # 用下面的命令生成 # 数据库密码 POSTGRES_PASSWORD=替换为强密码 # API 访问地址(你的服务器 URL) API_EXTERNAL_URL=https://supabase.你的域名.com SUPABASE_PUBLIC_URL=https://supabase.你的域名.com STUDIO_DEFAULT_ORGANIZATION=我的组织 STUDIO_DEFAULT_PROJECT=my-project # 邮件配置(用户注册验证) SMTP_HOST=smtp.你的邮件服务商.com SMTP_PORT=587 SMTP_USER=你的邮件账号 SMTP_PASS=你的邮件密码 SMTP_SENDER_NAME=Supabase SMTP_ADMIN_EMAIL=admin@你的域名.com

生成 JWT 密钥:

# 安装 jwt 工具npminstall-gjsonwebtoken# 生成 ANON_KEY(匿名访问密钥)node-e" const jwt = require('jsonwebtoken'); const secret = '你的JWT_SECRET'; const anon = jwt.sign({role:'anon',iss:'supabase',iat:1668599400,exp:1825365800}, secret); console.log('ANON_KEY:', anon); const service = jwt.sign({role:'service_role',iss:'supabase',iat:1668599400,exp:1825365800}, secret); console.log('SERVICE_ROLE_KEY:', service); "

配置反向代理

# 在 docker/docker-compose.yml 里修改,或单独创建 Caddy 配置
# Caddyfile supabase.你的域名.com { # Studio 管理界面 handle /studio/* { reverse_proxy studio:3000 } # API handle /rest/* { reverse_proxy rest:3000 } # Auth handle /auth/* { reverse_proxy auth:9999 } # Storage handle /storage/* { reverse_proxy storage:5000 } # 默认走 Kong 网关 handle { reverse_proxy kong:8000 } }

启动:

dockercompose up-d# 查看状态(首次启动需要 2-3 分钟)dockercomposeps

访问 Studio

访问https://supabase.你的域名.com,进入 Supabase Studio 管理界面:

  • 左侧「Table Editor」:图形化管理数据库表
  • 「SQL Editor」:直接写 SQL 查询
  • 「Auth」:管理用户账号
  • 「Storage」:管理文件
  • 「API」:查看自动生成的 API 文档和密钥

在项目里接入

安装官方 SDK:

npminstall@supabase/supabase-js
import{createClient}from'@supabase/supabase-js'constsupabase=createClient('https://supabase.你的域名.com','你的ANON_KEY')// 查询数据const{data,error}=awaitsupabase.from('users').select('*').eq('status','active')// 插入数据const{data,error}=awaitsupabase.from('posts').insert([{title:'标题',content:'内容',user_id:1}])// 实时订阅constchannel=supabase.channel('comments').on('postgres_changes',{event:'INSERT',schema:'public',table:'comments'},(payload)=>console.log('新评论:',payload)).subscribe()// 用户认证const{data,error}=awaitsupabase.auth.signUp({email:'user@example.com',password:'password123'})

行级安全策略(RLS)

Supabase 的核心安全机制是 PostgreSQL 的行级安全(Row Level Security),控制每个用户能看到哪些数据:

-- 开启表的 RLSALTERTABLEpostsENABLEROWLEVELSECURITY;-- 策略:用户只能看自己的帖子CREATEPOLICY"用户只能看自己的帖子"ONpostsFORSELECTUSING(auth.uid()=user_id);-- 策略:用户只能插入自己的帖子CREATEPOLICY"用户只能发自己的帖子"ONpostsFORINSERTWITHCHECK(auth.uid()=user_id);

备份

cat>~/supabase/backup.sh<<'EOF' #!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR=~/supabase-backups mkdir -p "$BACKUP_DIR" docker exec supabase-db pg_dumpall -U postgres | \ gzip > "$BACKUP_DIR/db-$DATE.sql.gz" find "$BACKUP_DIR" -name "*.gz" -mtime +14 -delete echo "[$(date)] 备份完成" EOFchmod+x ~/supabase/backup.sh(crontab-l2>/dev/null;echo"0 3 * * * ~/supabase/backup.sh")|crontab-

自建 Supabase 意味着你拥有一个完整的开源后端平台——数据完全自控、无额度限制、PostgreSQL 的强大查询能力。在雨云服务器rainyun+com的 4 核 16G 机型上部署,支撑数个中小型应用的后端需求,注册填优惠码2026off领 5 折优惠券,彻底摆脱 Firebase 的价格和锁定问题。

http://www.rkmt.cn/news/1309621.html

相关文章:

  • Plain Craft Launcher网络架构解密:从请求异常到高性能启动器的进阶之路
  • AI冲击下程序员大批失业,为啥做网安反而越混越吃香?
  • ComfyUI ControlNet Aux终极指南:新手必学的图像预处理完整解决方案
  • AzurLaneAutoScript:碧蓝航线智能自动化助手终极指南
  • AI-Git-Narrator:基于LLM的Git提交历史自动化分析与文档生成工具
  • 物联网设备网络无缝切换与多网融合:exnetif模块实战指南
  • Draft-classic:云原生开发中Kubernetes部署的快速原型工具
  • 游戏存档管理终极指南:告别背包焦虑的5大解决方案
  • 告别Claude Code封号烦恼,通过Taotoken稳定使用编程助手
  • 你的QQ音乐文件突然不能播放了?这个开源工具能一键搞定
  • 3分钟高效解密RPG游戏资源:浏览器端专业解密工具完全指南
  • 立讯精密16年市值增79倍,王来春身价涨超千亿,收购京西国际补齐短板!
  • STM32驱动段码屏实战:手把手教你用HT1621B做个简易电子钟(附完整代码)
  • 2026上海徐汇区黄金回收指南|就近门店+上门服务随心选+实时回收价格对比 - 速递信息
  • 基于Godot 4的银河恶魔城游戏系统框架设计与实现
  • Telegram机器人ChatGPT回复格式化:Markdown转HTML中间件实践
  • 世毫九实验室技术报告 TR-007:认知的自指重构与递归对抗式教学
  • 2026年4月有实力的空气能工程公司推荐,工厂蒸发冷空调空气能/学校空气能/学校常温型空气能,空气能定制厂家口碑推荐 - 品牌推荐师
  • RK3566(泰山派)实战:D310T9362V1SPEC触摸屏驱动从零适配与调试(竖屏)
  • 俄语AI资源导航库:构建本土化学习生态与高效利用指南
  • 企业级应用如何利用Taotoken实现多模型智能客服
  • GitHub Actions自动化:从Issue到PR的智能转换工作流实践
  • 思源笔记 Steve Tools — 一个功能强大的个人工具集
  • MTKClient:联发科芯片深度调试与固件分析技术方案
  • 浏览器智能体开发指南:从语义驱动到LLM集成的自动化实践
  • ARM RealView编译工具链核心组件与调试优化实战
  • 基于大语言模型的学术论文阅读辅助分析系统的研究与应用
  • NV266固态MT29F32T08GSLBHL8-36QMES:B
  • 理发师会被 AI 取代吗?这可能是 AI 时代最有意思的一个社会学问题
  • 本土检测机构vs全国连锁品牌,广州环境检测怎么选才对 - 速递信息