Common commands
Terminal
Update to the latest code
Terminal
Terminal
COMPOSE_PROFILES=turn in your .env applies it to every later docker compose command.
Changing NEXT_PUBLIC_SOCKET_URL needs only docker compose up -d; the client reads it at runtime. See How the client finds the server. NEXT_PUBLIC_SITE_URL is the exception: it is written into the page at build time, so the published image omits those tags entirely rather than pointing them at somebody else’s domain. See Container images if you want your own.
The server does not log anything
Worth knowing before you go looking. The signaling server has no access log, no request log, and no startup banner, not even a line saying which port it bound.docker compose logs server on a
perfectly healthy instance is empty, and that is expected rather than a symptom.
It writes a stack trace in exactly two cases: when an unhandled error reaches its error handler,
and when an unexpected exception reaches the process-level backstop. The second kind is prefixed
Unhandled error and means the server caught something it did not anticipate and kept serving
rather than exiting, so the transfers in progress survived. It is worth reporting. To confirm the
server is alive, or that a restart actually landed, use the health endpoint below rather than the
logs.
docker compose ps is a similar case: the client image ships no healthcheck, so it never
reports a health state. Only the server does.
On SIGTERM or SIGINT the server closes every WebSocket with code 1001 and the reason
Server shutting down, stops accepting connections, and exits. If something is still holding it
open ten seconds later it exits anyway.
Health endpoints
The signaling server exposes two status endpoints:
Point a monitor at
/health. It is the only one of the two that survives a
one-domain deployment, where / belongs to the
web client and returns a page rather than JSON. GET / on the signaling server
is reachable only when you address the server directly, on :3001 or on its own
subdomain.