Supabase Realtime 项目 Docker 部署配置详解
2025-07-07 04:33:35作者:董宙帆
Supabase Realtime 是一个基于 PostgreSQL 的实时数据同步服务,它通过监听 PostgreSQL 的变更事件,将这些变更实时推送到客户端。本文将深入解析其 Docker 部署配置文件,帮助开发者理解各个组件的功能与配置要点。
核心服务架构
该 Docker Compose 文件定义了三个主要服务:
- 主数据库服务 (db):存储 Realtime 服务的核心数据
- 租户数据库服务 (tenant_db):用于多租户场景的独立数据库
- Realtime 服务 (realtime):提供实时数据同步的核心服务
数据库服务配置解析
主数据库服务 (db)
db:
image: supabase/postgres:14.1.0.105
container_name: realtime-db
ports:
- "5432:5432"
volumes:
- ./dev/postgres:/docker-entrypoint-initdb.d/
command: postgres -c config_file=/etc/postgresql/postgresql.conf
environment:
POSTGRES_HOST: /var/run/postgresql
POSTGRES_PASSWORD: postgres
关键配置说明:
- 使用
supabase/postgres:14.1.0.105
镜像,这是 Supabase 定制的 PostgreSQL 14.1 版本 - 将本地
./dev/postgres
目录挂载到容器的初始化脚本目录,用于执行初始化 SQL - 通过
command
指定了 PostgreSQL 的配置文件路径 - 设置了默认的 PostgreSQL 密码为
postgres
租户数据库服务 (tenant_db)
tenant_db:
image: supabase/postgres:14.1.0.105
container_name: tenant-db
ports:
- "5433:5432"
command: postgres -c config_file=/etc/postgresql/postgresql.conf
environment:
POSTGRES_HOST: /var/run/postgresql
POSTGRES_PASSWORD: postgres
与主数据库类似,但:
- 使用不同的端口映射 (5433:5432),避免与主数据库冲突
- 没有挂载初始化脚本目录,表明租户数据库可能不需要特殊初始化
Realtime 服务核心配置
realtime:
depends_on:
- db
build: .
container_name: realtime-server
ports:
- "4000:4000"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
PORT: 4000
DB_HOST: host.docker.internal
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
DB_ENC_KEY: supabaserealtime
DB_AFTER_CONNECT_QUERY: 'SET search_path TO _realtime'
API_JWT_SECRET: dc447559-996d-4761-a306-f47a5eab1623
SECRET_KEY_BASE: UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
ERL_AFLAGS: -proto_dist inet_tcp
RLIMIT_NOFILE: 1000000
DNS_NODES: "''"
APP_NAME: realtime
RUN_JANITOR: true
JANITOR_INTERVAL: 60000
LOG_LEVEL: "info"
SEED_SELF_HOST: true
关键环境变量解析
-
数据库连接配置
DB_HOST
: 使用host.docker.internal
特殊域名访问宿主机DB_ENC_KEY
: 数据库加密密钥,生产环境必须修改DB_AFTER_CONNECT_QUERY
: 连接后自动设置搜索路径到_realtime
schema
-
安全配置
API_JWT_SECRET
: JWT 认证密钥,生产环境必须修改SECRET_KEY_BASE
: Phoenix 框架的加密基础密钥
-
性能调优
RLIMIT_NOFILE
: 设置文件描述符限制为 100 万,支持高并发ERL_AFLAGS
: Erlang 虚拟机参数,配置分布式协议
-
维护功能
RUN_JANITOR
: 启用自动清理任务JANITOR_INTERVAL
: 清理任务间隔(毫秒)
-
日志与调试
LOG_LEVEL
: 设置日志级别为 infoSEED_SELF_HOST
: 启用自托管模式的数据种子
部署建议与注意事项
-
安全加固
- 生产环境必须修改所有敏感信息(密码、密钥等)
- 考虑使用 Docker secret 或环境变量文件管理敏感信息
-
性能优化
- 根据实际负载调整
RLIMIT_NOFILE
值 - 监控 Janitor 任务的执行频率和影响
- 根据实际负载调整
-
网络配置
extra_hosts
配置确保容器能访问宿主机网络- 生产环境可能需要更复杂的网络拓扑
-
初始化流程
- 通过挂载的初始化脚本确保数据库 schema 正确设置
- 验证
_realtime
schema 是否成功创建
通过理解这些配置项,开发者可以更好地根据实际需求调整 Supabase Realtime 的部署方案,构建稳定可靠的实时数据同步服务。