63f2c588da
Two things: 1. FIX a live regression the async conversion missed: chat.js calls repos via the lazy repos() helper (not the R. prefix), so my sweep skipped it — effectiveStatus / broadcastPresence read `repos().users.byId(userId)` synchronously, but that's a Promise now, so presence broadcasts always reported status 'active' and dropped last_seen. Now awaited (effectiveStatus/broadcastPresence async); touchSeen is a fire-and-forget UPDATE with .catch. Audited all non-R. repo calls — only chat.js was affected (media.js backfill was already awaited). 2. Swappable pub/sub for multi-instance real-time fan-out (the actual blocker to running >1 instance — not the DB). server/pubsub.js picks a backend by PUBSUB_BACKEND (default 'memory'). Local socket delivery is UNCHANGED; publish is additive — memory = no-op (zero hot-path cost, identical single-instance behaviour), redis = fan-out to other instances with a self-echo guard. chat.js pushToUser/broadcastPresence now also publish; each instance subscribes to deliver remote events to its local sockets. Interface is tiny so Redis is one swappable file (Postgres LISTEN/NOTIFY or NATS could drop in the same way — never hardwired, as requested). Dormant redis service added to compose behind the 'scale' profile; redis dep added; PUBSUB_BACKEND/REDIS_URL documented. Validated: smoke 22/22 (memory), e2e chat delivery green. NOTE: full multi-instance also needs distributed presence (isOnline is per-process) + meeting-signaling sharing — chat/presence fan out via this layer; those are follow-ups. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
45 lines
2.3 KiB
Bash
45 lines
2.3 KiB
Bash
# BizGaze Support — server secrets / config.
|
|
# Copy this file to `.env` next to docker-compose.yml on the server and fill in
|
|
# real values. The real `.env` is gitignored — NEVER commit credentials.
|
|
# Compose injects these into the container via `env_file:`.
|
|
|
|
# Managed TURN relay (Metered) — makes WebRTC work on mobile/cellular & strict NATs.
|
|
# Comma-separated URL list; username + credential from the Metered dashboard.
|
|
TURN_URLS=turn:global.relay.metered.ca:80,turn:global.relay.metered.ca:80?transport=tcp,turn:global.relay.metered.ca:443,turns:global.relay.metered.ca:443?transport=tcp
|
|
TURN_USERNAME=
|
|
TURN_CREDENTIAL=
|
|
|
|
# Optional: open self-registration of the first/any team (1 to enable).
|
|
# ALLOW_REGISTRATION=1
|
|
|
|
# Optional: BizGaze as the identity provider. When set, /api/login validates
|
|
# credentials against this endpoint (after a local check) and provisions the user.
|
|
# BIZGAZE_LOGIN_URL=https://c02.bizgaze.app/Account/ValidateAndLogin
|
|
|
|
# Optional: shared secret for BizGaze SSO + signed webhook delivery.
|
|
# SSO_SECRET=
|
|
|
|
# Optional: BizGaze webhook endpoint for session events.
|
|
# BIZGAZE_WEBHOOK_URL=
|
|
|
|
# Optional: LiveKit SFU for meetings (scales past the ~5-peer P2P mesh). Set ALL THREE to enable;
|
|
# leave unset to keep the built-in mesh. The app mints join tokens with the secret (server-side
|
|
# only); the same key/secret feed the livekit container via LIVEKIT_KEYS in docker-compose.
|
|
# Generate a key/secret pair: two random strings, e.g. `openssl rand -hex 16` for each.
|
|
# LIVEKIT_URL=wss://livekit.bizgaze.com
|
|
# LIVEKIT_API_KEY=
|
|
# LIVEKIT_API_SECRET=
|
|
|
|
# Optional: PostgreSQL data store. Leave unset to use the built-in SQLite file (DB_PATH). To move to
|
|
# Postgres: set POSTGRES_PASSWORD (used by the bizgaze-postgres container AND the URL below), then set
|
|
# DATABASE_URL + DB_BACKEND=pg after running db/migrate-sqlite-to-pg.js. See db/schema.pg.sql.
|
|
# POSTGRES_PASSWORD=
|
|
# DATABASE_URL=postgres://bizgaze:PASSWORD@bizgaze-postgres:5432/bizgaze
|
|
# DB_BACKEND=pg
|
|
|
|
# Optional: cross-instance real-time (chat/presence) fan-out via Redis, for running MULTIPLE app instances.
|
|
# Leave unset for single-instance (in-memory pub/sub, the default). To scale out: start the redis service
|
|
# (`docker compose --profile scale up -d`), then set both below + a sticky load balancer for /ws.
|
|
# PUBSUB_BACKEND=redis
|
|
# REDIS_URL=redis://bizgaze-redis:6379
|