one additional note that ties directly to the HAProxy part of the setup above.
There’s a common behavior with HAProxy + Discourse where rebuilding a web container (e.g. with ./launcher rebuild app1) will briefly return 503 Service Unavailable responses because HAProxy is still sending traffic to that backend while it’s restarting. This isn’t an error in Discourse itself - it happens because the backend is momentarily unavailable during the rebuild.
The recommended workaround is to use the HAProxy admin socket to:
1. disable the server in HAProxy before the rebuild, and
2. re-enable it after the rebuild finishes
This prevents those transient 503s.
There’s an existing Meta discussion documenting this behavior and the explanation of the workaround:
If anyone here is using HAProxy for rolling rebuilds, that thread provides useful context for why the admin socket commands are included in the runbook.