Supabase本地化部署:私有化部署与数据主权
你还在为云服务的数据隐私担忧吗?还在因API调用延迟影响用户体验吗?本文将带你通过Docker Compose实现Supabase的本地化部署,完全掌控数据主权,同时享受与云端一致的开发体验。读完本文,你将能够:搭建本地Supabase开发环境、配置核心服务参数、实现数据持久化存储、解决常见部署问题。
为什么选择本地化部署
在企业级应用开发中,数据合规性和隐私保护日益成为核心需求。Supabase作为开源的Firebase替代方案,提供了本地化部署的能力,让你可以将数据存储在自己的服务器上,满足GDPR、等保2.0等合规要求。同时,本地化部署还能显著降低API调用延迟,提升应用响应速度,尤其适合对实时性要求高的场景。
部署前准备
环境要求
- Docker Engine 20.10+
- Docker Compose 2.0+
- 至少4GB RAM(推荐8GB+)
- 10GB+ 可用磁盘空间
获取项目代码
git clone https://gitcode.com/GitHub_Trending/supa/supabase
cd supabase
核心部署步骤
1. 配置环境变量
首先,需要创建环境变量文件来配置Supabase服务。项目提供了环境变量生成脚本,执行以下命令创建必要的配置:
cd docker
./generateLocalEnv.js > .env
该脚本会生成包含数据库密码、JWT密钥等敏感信息的.env文件。你可以根据需要编辑这些配置,例如修改默认的PostgreSQL密码或调整JWT过期时间。
2. 启动服务栈
Supabase使用Docker Compose管理多个服务组件,包括PostgreSQL数据库、身份验证服务、实时引擎等。执行以下命令启动整个服务栈:
# 启动所有服务(后台运行)
docker compose up -d
# 查看服务状态
docker compose ps
核心服务定义在docker/docker-compose.yml文件中,包含以下关键组件:
- supabase-db: PostgreSQL数据库,包含PostGIS扩展和行级安全策略
- supabase-auth: 身份验证服务,支持邮箱、OAuth等多种登录方式
- supabase-realtime: 实时数据同步引擎,基于PostgreSQL的CDC能力
- supabase-studio: 可视化管理界面,类似Firebase控制台
3. 访问管理界面
服务启动后,通过以下地址访问Supabase Studio管理界面:
- 地址: http://localhost:3000
- 默认组织名: supabase
- 默认项目名: default
首次登录时,系统会要求设置管理员密码。设置完成后,你将看到与云端版本一致的管理界面,可以创建表、配置认证方式、管理存储桶等。
核心服务配置详解
数据库配置
PostgreSQL数据库是Supabase的核心,其配置主要通过环境变量和初始化脚本实现。关键配置文件包括:
- docker/volumes/db/data: 数据库数据持久化目录
- docker/volumes/db/jwt.sql: JWT认证相关SQL配置
- docker/volumes/db/roles.sql: 数据库角色和权限设置
你可以通过修改这些文件来自定义数据库行为,例如增加自定义角色或调整JWT验证逻辑。
身份验证服务配置
身份验证服务(GoTrue)的配置位于docker/docker-compose.yml的auth服务部分。关键环境变量包括:
GOTRUE_SITE_URL: ${SITE_URL}
GOTRUE_DISABLE_SIGNUP: ${DISABLE_SIGNUP}
GOTRUE_JWT_SECRET: ${JWT_SECRET}
GOTRUE_EXTERNAL_EMAIL_ENABLED: ${ENABLE_EMAIL_SIGNUP}
通过修改这些参数,你可以禁用公开注册、配置SMTP服务器发送验证邮件、设置JWT密钥等。
存储服务配置
存储服务用于管理用户上传的文件,其配置位于docker/docker-compose.yml的storage服务部分:
STORAGE_BACKEND: file
FILE_STORAGE_BACKEND_PATH: /var/lib/storage
ENABLE_IMAGE_TRANSFORMATION: "true"
默认使用本地文件系统存储,你也可以通过修改配置切换到S3兼容的对象存储服务。存储的数据会保存在docker/volumes/storage目录。
数据持久化与备份策略
数据持久化机制
Supabase Docker配置使用Docker卷(Volumes)来实现数据持久化,关键卷包括:
- db-config: 数据库配置文件
- docker_volumes_db_data: 数据库数据文件
- docker_volumes_storage: 存储服务文件
这些卷会在容器重启后保留数据,确保服务升级或重启时不会丢失关键信息。
备份策略
建议定期备份以下目录和文件:
# 备份数据库数据
tar -czf supabase_db_backup.tar.gz docker/volumes/db/data
# 备份存储文件
tar -czf supabase_storage_backup.tar.gz docker/volumes/storage
# 备份环境变量配置
cp docker/.env supabase_env_backup.env
可以将这些命令添加到crontab中,实现定期自动备份。
常见问题解决
服务启动失败
如果服务启动失败,首先检查容器日志:
# 查看特定服务日志
docker compose logs -f auth
# 查看所有服务日志
docker compose logs -f
常见问题包括端口冲突和资源不足。如果遇到端口冲突,可以修改docker-compose.yml中的端口映射,例如修改Kong服务的HTTP端口:
kong:
ports:
- ${KONG_HTTP_PORT}:8000/tcp # 修改KONG_HTTP_PORT环境变量
性能优化
对于生产环境部署,建议调整以下参数提升性能:
-
增加数据库内存分配,修改docker/volumes/db/postgresql.conf:
shared_buffers = 1GB work_mem = 64MB -
调整实时引擎连接数,修改docker-compose.yml:
realtime: environment: RLIMIT_NOFILE: "20000"
部署架构
Supabase本地化部署的服务架构如下:
这种架构确保了各服务的松耦合,便于单独扩展和升级。
总结与展望
通过Docker Compose实现Supabase本地化部署,不仅可以完全掌控数据主权,还能根据实际需求定制服务配置。无论是企业内部系统、医疗健康应用还是政府项目,本地化部署都能满足严格的数据合规要求。
未来,你还可以基于此架构实现:
- 多节点集群部署,提升可用性
- 与现有身份系统集成,如LDAP或SSO
- 实现异地备份,增强数据安全性
Supabase的开源特性和模块化设计,为本地化部署提供了极大的灵活性。现在就开始尝试,体验数据自主可控的开发乐趣吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



