首页
/ Supabase Realtime 项目 Docker 部署配置详解

Supabase Realtime 项目 Docker 部署配置详解

2025-07-07 04:33:35作者:董宙帆

Supabase Realtime 是一个基于 PostgreSQL 的实时数据同步服务,它通过监听 PostgreSQL 的变更事件,将这些变更实时推送到客户端。本文将深入解析其 Docker 部署配置文件,帮助开发者理解各个组件的功能与配置要点。

核心服务架构

该 Docker Compose 文件定义了三个主要服务:

  1. 主数据库服务 (db):存储 Realtime 服务的核心数据
  2. 租户数据库服务 (tenant_db):用于多租户场景的独立数据库
  3. 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

关键环境变量解析

  1. 数据库连接配置

    • DB_HOST: 使用 host.docker.internal 特殊域名访问宿主机
    • DB_ENC_KEY: 数据库加密密钥,生产环境必须修改
    • DB_AFTER_CONNECT_QUERY: 连接后自动设置搜索路径到 _realtime schema
  2. 安全配置

    • API_JWT_SECRET: JWT 认证密钥,生产环境必须修改
    • SECRET_KEY_BASE: Phoenix 框架的加密基础密钥
  3. 性能调优

    • RLIMIT_NOFILE: 设置文件描述符限制为 100 万,支持高并发
    • ERL_AFLAGS: Erlang 虚拟机参数,配置分布式协议
  4. 维护功能

    • RUN_JANITOR: 启用自动清理任务
    • JANITOR_INTERVAL: 清理任务间隔(毫秒)
  5. 日志与调试

    • LOG_LEVEL: 设置日志级别为 info
    • SEED_SELF_HOST: 启用自托管模式的数据种子

部署建议与注意事项

  1. 安全加固

    • 生产环境必须修改所有敏感信息(密码、密钥等)
    • 考虑使用 Docker secret 或环境变量文件管理敏感信息
  2. 性能优化

    • 根据实际负载调整 RLIMIT_NOFILE
    • 监控 Janitor 任务的执行频率和影响
  3. 网络配置

    • extra_hosts 配置确保容器能访问宿主机网络
    • 生产环境可能需要更复杂的网络拓扑
  4. 初始化流程

    • 通过挂载的初始化脚本确保数据库 schema 正确设置
    • 验证 _realtime schema 是否成功创建

通过理解这些配置项,开发者可以更好地根据实际需求调整 Supabase Realtime 的部署方案,构建稳定可靠的实时数据同步服务。