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