Supabase 开源 Firebase 替代方案部署教程
Supabase 是一款开源的 Firebase 替代方案,基于 PostgreSQL 构建,提供数据库、认证、实时订阅、文件存储和 Edge Functions 等完整的后端服务。与 Firebase 不同的是,Supabase 使用标准的 SQL 数据库而非 NoSQL,让你既能享受 BaaS 的便利,又能利用 PostgreSQL 的强大功能。本文将介绍如何在搬瓦工 VPS 上自托管 Supabase。部署前请确保已安装好 Docker 和 Docker Compose。
一、系统要求
- 操作系统:Ubuntu 20.04+ 或 Debian 11+。
- 内存:至少 2GB,建议 4GB 以上(Supabase 运行多个服务)。
- 磁盘:至少 20GB 可用空间。
- CPU:至少 2 核心。
- 域名:建议绑定域名并配置 SSL。
二、获取 Supabase 项目文件
从 Supabase 官方 GitHub 仓库克隆 Docker 配置:
git clone --depth 1 https://github.com/supabase/supabase /opt/supabase
cd /opt/supabase/docker
复制环境变量模板:
cp .env.example .env
三、配置环境变量
编辑 .env 文件,修改以下关键配置。首先生成必要的密钥:
# 生成 JWT Secret
openssl rand -hex 32
# 生成 Anon Key 和 Service Role Key(需要使用 JWT 工具)
# 可以使用在线工具或 CLI 生成
修改 .env 中的核心配置项:
# 数据库密码(务必修改)
POSTGRES_PASSWORD=your_strong_password
# JWT 密钥
JWT_SECRET=your-jwt-secret-at-least-32-characters
# API 密钥
ANON_KEY=your-anon-key
SERVICE_ROLE_KEY=your-service-role-key
# 站点 URL
SITE_URL=https://supabase.yourdomain.com
API_EXTERNAL_URL=https://supabase.yourdomain.com
# SMTP 配置(用于邮件认证)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your-email@example.com
SMTP_PASS=your-smtp-password
SMTP_SENDER_NAME=Supabase
SMTP_ADMIN_EMAIL=admin@example.com
四、启动 Supabase
cd /opt/supabase/docker
docker compose up -d
Supabase 会启动以下核心服务:
- PostgreSQL:主数据库。
- GoTrue:认证服务。
- PostgREST:自动生成 REST API。
- Realtime:实时数据订阅。
- Storage:文件存储服务。
- Kong:API 网关。
- Studio:管理控制台。
查看服务状态:
docker compose ps
五、配置 Nginx 反向代理
Supabase Studio 默认运行在 3000 端口,API 通过 Kong 网关在 8000 端口提供。配置 Nginx:
apt install nginx certbot python3-certbot-nginx -y
cat > /etc/nginx/sites-available/supabase <<'EOF'
server {
listen 80;
server_name supabase.yourdomain.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF
ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d supabase.yourdomain.com
六、访问 Supabase Studio
Supabase Studio 是一个功能丰富的管理控制台。访问 http://your-server-ip:3000 或配置好域名后通过域名访问。Studio 提供以下功能:
- 表编辑器:可视化管理数据库表结构和数据。
- SQL 编辑器:直接执行 SQL 查询。
- 认证管理:查看和管理用户。
- 存储管理:管理文件和存储桶。
- API 文档:自动生成的 API 文档。
七、客户端连接示例
使用 JavaScript 客户端连接 Supabase:
# 安装客户端库
npm install @supabase/supabase-js
初始化并使用:
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
'https://supabase.yourdomain.com',
'your-anon-key'
)
// 查询数据
const { data, error } = await supabase
.from('posts')
.select('*')
.order('created_at', { ascending: false })
八、数据库管理
Supabase 基于 PostgreSQL,你可以使用任何 PostgreSQL 客户端直接连接数据库进行管理:
# 通过 Docker 连接数据库
docker exec -it supabase-db psql -U postgres
# 或使用外部客户端(需在 .env 中开放端口)
psql -h your-server-ip -p 5432 -U postgres
Supabase 还支持 Row Level Security(RLS)策略,可以在数据库层面实现细粒度的访问控制。
九、数据备份与恢复
# 备份数据库
docker exec supabase-db pg_dump -U postgres > /opt/supabase/backup_$(date +%Y%m%d).sql
# 恢复数据库
cat backup_file.sql | docker exec -i supabase-db psql -U postgres
建议设置定期自动备份:
cat > /opt/supabase/backup.sh <<'EOF'
#!/bin/bash
BACKUP_DIR="/opt/supabase/backups"
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d_%H%M%S)
docker exec supabase-db pg_dump -U postgres > $BACKUP_DIR/supabase_$DATE.sql
gzip $BACKUP_DIR/supabase_$DATE.sql
find $BACKUP_DIR -name "*.gz" -mtime +14 -delete
EOF
chmod +x /opt/supabase/backup.sh
echo "0 2 * * * /opt/supabase/backup.sh" | crontab -
十、常见问题
Studio 无法连接 API
检查 .env 中的 API_EXTERNAL_URL 是否正确配置为可访问的域名或 IP 地址。
实时订阅不工作
确保 Nginx 反向代理配置中包含 WebSocket 升级头,并且 Realtime 服务容器正常运行:
docker compose logs realtime
内存占用高
Supabase 默认配置适合生产环境,如果 VPS 内存有限,可以调整 PostgreSQL 的内存参数。在 volumes/db/postgresql.conf 中修改:
shared_buffers = 256MB
effective_cache_size = 512MB
work_mem = 4MB
总结
Supabase 是一个功能强大的开源 Firebase 替代方案,以 PostgreSQL 为核心提供完整的后端服务。自托管 Supabase 可以让你完全掌控数据,同时享受云服务般的开发体验。建议选择内存 4GB 以上的搬瓦工方案来运行 Supabase。更多教程请参考:Appwrite 部署、PocketBase 部署、Directus 部署。选购搬瓦工 VPS 请参考全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。