当前位置: 首页 > 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.jsqmd.com/news/839050/

相关文章:

  • 5分钟掌握魔兽世界GSE宏编辑器:游戏操作效率提升300%
  • 互联网大厂 Java 求职面试:Spring Boot 构建微服务的挑战
  • AI冲击下程序员大批失业,为啥做网安反而越混越吃香?
  • 音乐标签管理终极革命:如何用3大黑科技拯救你的混乱音乐库?
  • CSS3 媒体查询完全指南:响应式设计的核心利器
  • Tensility电源连接器替代品牌与应用实践分析
  • Freqtrade开源量化交易框架:从策略开发到实盘部署全解析
  • AI智能体技能化架构:从模块化设计到工程化实践
  • Linux安全沙箱实战:基于seccomp与namespace隔离不可信程序
  • 3分钟搞定音乐库歌词:ZonyLrcToolsX让你的每首歌都有完美歌词
  • 开源RISC-V汽车芯片联盟:嵌入式开发者的机遇与挑战
  • 波粒互补性与信息双重性:论信息存储的离散性与传播的连续性之统一
  • Honey Select 2 HF Patch:一站式游戏增强与汉化终极指南
  • 如何为你的开源项目在GitHub Actions中集成Taotoken API
  • Godot 4高级运动系统:模块化设计实现丝滑3D角色移动
  • MASA Mods 中文汉化包:为Minecraft技术玩家消除语言障碍的专业解决方案
  • 第94篇:Vibe Coding时代:多语言项目 Agent 支持实战,解决只会 Python 无法处理真实混合技术栈的问题
  • ComfyUI ControlNet Aux终极指南:新手必学的图像预处理完整解决方案
  • 合肥大牌包包闲置出手|2026回收探店高价无套路 - 奢侈品回收测评
  • AzurLaneAutoScript:碧蓝航线智能自动化助手终极指南
  • AI时代哲学工作者必争的思维主权,NotebookLM辅助研究全链路拆解,含8个未公开Prompt工程技巧
  • 3分钟高效解密RPG游戏资源:浏览器端专业解密工具完全指南
  • Windows文件管理器终极图标扩展:3分钟让APK文件显示原生应用图标
  • 3个创意玩法:用Power BI主题模板解锁数据可视化隐藏技能
  • 基于本地大模型的RAG应用实战:从LangChain到Ollama的智能对话搭建
  • 涉密首选!2026降ai率工具推荐排行 涉密安全/双语适配/本地化部署 - 极欧测评
  • 【信息科学与工程学】计算机科学与自动化———第六十四篇 内存 系列一 内存算法05
  • 模块化设计与工程实践:从Advanced_Part看高质量可复用模块开发
  • STM32驱动段码屏实战:手把手教你用HT1621B做个简易电子钟(附完整代码)
  • OpenHands:开源多模态AI智能体框架,让大语言模型学会“动手”操作