HAProxy doesn’t have to be complicated
In my example it’s purely used so that the edge Caddy can have a single point to route to, letting me go “hands-off” on configuration for it once it’s set up, and template out a HAProxy conf instead which will simply route based on hostname to the appropriate Docker container. It’s not really used for high availability in this case, merely convenience.