Skip to main content
The browser needs to know where your signaling server is. It works that out when the page loads, so changing the address takes effect on a restart with no image rebuild.

Resolution order

The first match wins.

Changing the address

Set it in .env and recreate the container. No rebuild:
Docker Compose maps your NEXT_PUBLIC_SOCKET_URL value to the container’s SOCKET_URL, so the variable name in .env has not changed.
Leave the value empty when the client and the signaling server share one origin behind a reverse proxy. The browser then talks to whatever host it was loaded from, so there is nothing to configure and nothing to keep in sync.

The address is used by the browser, not the server

Whatever you set has to be reachable from your users’ browsers, not from inside the container. http://localhost:3001 only works when the browser runs on the same machine as the server. For anything else use the server’s LAN IP or public domain.

What is still build-time

NEXT_PUBLIC_SITE_URL is genuinely build-time. It feeds canonical links, Open Graph tags, and the sitemap, which are rendered into the page rather than fetched. That is the one value a shared image cannot carry, because it would have to know which domain it will be served from before anyone downloads it. So the published image omits those tags rather than pointing them at floe.one, which would mean every self-hosted instance advertising somebody else’s site as its canonical. To put your own domain in them, build the client yourself:
This affects only SEO and link previews. Transfers, signaling, and the relay are unaffected, and all of those are configured at runtime. See Container Images.