15 days ago
I deployed a relay with the official Railway template, as described in "Run your own Buzz relay". The relay works for Buzz Desktop.
Mobile pairing does not start. In Buzz Desktop I select "Connect the Buzz mobile app to this relay by scanning a QR code". Desktop then shows this error, and no QR code appears:
WebSocket connection failed: HTTP error: 404 Not FoundThe phone is not involved. The failure occurs in Desktop, before the QR code.
What I found
Disclaimer: Claude assisted diagnosis
Digging into https://github.com/block/buzz/issues/3779 and the associated PR helped diagnose.
Desktop reads the relay's NIP-11 document. The document says that the relay supports NIP-43. It does not give a pairing relay URL. Desktop then uses the older method and tries the path wss://<host>/pair. Nothing answers on that path, so Desktop gets a 404 error.
Three checks on my template deployment:
- The NIP-11 document has no
pairing_relay_urlfield. - The NIP-11 document lists NIP 43 in
supported_nips. It also setsauth_required: trueandrestricted_writes: true. - A WebSocket upgrade request to
/pairgives HTTP 404.
The cause looks clear. Pairing needs a second binary, buzz-pair-relay. The Dockerfile builds it and installs it at /usr/local/bin/buzz-pair-relay. But the entrypoint is buzz-relay, and the template deploys one service. So the pairing relay never starts.
My questions
-
Is this the expected behaviour of the template? Or is it a bug?
-
Must every self-host operator add the pairing service by hand?
-
If yes, can the template add it as an option? A checkbox such as
"Enable mobile pairing" would make the choice visible. It would also let operators who do not want a public unauthenticated endpoint refuse it.
A note for other Railway users
As far as I can see, railway cannot send one path to a different service. So /pair alone is not sufficient on Railway. You must deploy a second service that runsbuzz-pair-relay, give it its own public domain, and then setBUZZ_PAIRING_RELAY_URL=wss://<pair-host> on the main relay.
0 Replies