Supabase自托管部署 #
一、自托管概述 #
1.1 为什么自托管 #
text
自托管优势
├── 完全数据控制
├── 无使用限制
├── 自定义配置
├── 合规要求
└── 成本控制(大规模)
1.2 自托管要求 #
text
系统要求
├── Docker & Docker Compose
├── 最低4GB内存
├── 最低2核CPU
├── 20GB+存储空间
└── Linux/macOS/Windows
二、Docker部署 #
2.1 使用Docker Compose #
bash
# 克隆仓库
git clone --depth 1 https://github.com/supabase/supabase
# 进入目录
cd supabase/docker
# 复制配置文件
cp .env.example .env
# 生成密钥
sed -i 's/SUPABASE_ANON_KEY=.*/SUPABASE_ANON_KEY=your-anon-key/' .env
sed -i 's/SUPABASE_SERVICE_KEY=.*/SUPABASE_SERVICE_KEY=your-service-key/' .env
sed -i 's/POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=your-password/' .env
sed -i 's/SUPABASE_JWT_SECRET=.*/SUPABASE_JWT_SECRET=your-jwt-secret/' .env
# 启动服务
docker-compose up -d
2.2 配置说明 #
bash
# .env 主要配置
# 数据库
POSTGRES_PASSWORD=your-password
# JWT
SUPABASE_JWT_SECRET=your-jwt-secret
# API密钥
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_KEY=your-service-key
# 域名配置
SUPABASE_URL=http://localhost:8000
SITE_URL=http://localhost:3000
# 邮件配置
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=user@example.com
SMTP_PASS=password
2.3 生成密钥 #
bash
# 生成JWT Secret
openssl rand -base64 32
# 生成API密钥
# 使用 https://supabase.com/docs/guides/self-hosting#api-keys
# 或使用在线工具生成
2.4 服务访问 #
text
服务地址
├── API: http://localhost:8000
├── Studio: http://localhost:3000
├── Database: localhost:5432
└── Redis: localhost:6379
三、Kubernetes部署 #
3.1 使用Helm Chart #
bash
# 添加Helm仓库
helm repo add supabase https://supabase.github.io/supabase-kubernetes
# 更新仓库
helm repo update
# 创建命名空间
kubectl create namespace supabase
# 安装
helm install supabase supabase/supabase -n supabase
3.2 自定义配置 #
yaml
# values.yaml
global:
supabase:
jwtSecret: your-jwt-secret
anonKey: your-anon-key
serviceKey: your-service-key
postgresql:
enabled: true
auth:
password: your-password
primary:
persistence:
size: 100Gi
studio:
enabled: true
service:
type: LoadBalancer
auth:
enabled: true
config:
siteUrl: https://your-domain.com
storage:
enabled: true
persistence:
size: 100Gi
bash
# 使用自定义配置安装
helm install supabase supabase/supabase -n supabase -f values.yaml
3.3 Ingress配置 #
yaml
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: supabase-ingress
namespace: supabase
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- api.your-domain.com
- studio.your-domain.com
secretName: supabase-tls
rules:
- host: api.your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: supabase-kong
port:
number: 8000
- host: studio.your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: supabase-studio
port:
number: 3000
四、生产环境配置 #
4.1 安全配置 #
bash
# .env 安全配置
# 启用HTTPS
SUPABASE_URL=https://api.your-domain.com
# 配置CORS
ADDITIONAL_REDIRECT_URLS=https://your-domain.com/**
# 数据库安全
POSTGRES_HOST_AUTH_METHOD=scram-sha-256
# 启用SSL
POSTGRES_SSL=true
4.2 性能优化 #
yaml
# docker-compose.yml 性能配置
services:
db:
command:
- postgres
- -c
- max_connections=200
- -c
- shared_buffers=256MB
- -c
- work_mem=16MB
- -c
- effective_cache_size=1GB
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 1G
4.3 备份配置 #
bash
# 定期备份脚本
#!/bin/bash
DATE=$(date +%Y%m%d)
docker exec supabase-db pg_dump -U postgres postgres > backup_$DATE.sql
# 上传到云存储
aws s3 cp backup_$DATE.sql s3://your-bucket/backups/
五、监控配置 #
5.1 日志收集 #
yaml
# docker-compose.yml 日志配置
services:
db:
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
5.2 Prometheus监控 #
yaml
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'supabase'
static_configs:
- targets: ['supabase-db:5432']
六、升级维护 #
6.1 升级步骤 #
bash
# 1. 备份数据
docker exec supabase-db pg_dump -U postgres postgres > backup.sql
# 2. 拉取最新镜像
docker-compose pull
# 3. 重启服务
docker-compose up -d
# 4. 验证服务
curl http://localhost:8000/rest/v1/
6.2 数据迁移 #
bash
# 从云服务迁移到自托管
# 1. 导出数据
pg_dump -h db.xxx.supabase.co -U postgres > export.sql
# 2. 导入到自托管
docker exec -i supabase-db psql -U postgres < export.sql
七、故障排除 #
7.1 常见问题 #
bash
# 查看日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f db
# 重启服务
docker-compose restart
# 完全重置
docker-compose down -v
docker-compose up -d
7.2 连接问题 #
bash
# 检查服务状态
docker-compose ps
# 检查网络
docker network ls
# 测试数据库连接
docker exec supabase-db psql -U postgres -c "SELECT 1"
八、最佳实践 #
8.1 部署清单 #
text
部署检查清单
├── 配置HTTPS
├── 设置强密码
├── 配置防火墙
├── 设置备份策略
├── 配置监控告警
├── 准备恢复计划
└── 文档化配置
8.2 安全建议 #
text
安全建议
├── 定期更新镜像
├── 限制网络访问
├── 使用VPN
├── 启用SSL
├── 定期审计日志
└── 最小权限原则
九、总结 #
自托管部署要点:
| 方式 | 说明 |
|---|---|
| Docker Compose | 简单快速 |
| Kubernetes | 生产级部署 |
| 配置 | 环境变量 |
| 安全 | HTTPS/SSL |
| 备份 | 定期备份 |
恭喜你完成了Supabase完全指南的全部学习!
最后更新:2026-03-28