Había creado un foro de prueba con dos contenedores web_only, el contenedor mail-receiver, Postgres y Redis en una red Docker. Los dos contenedores web nginx estaban precedidos por HAProxy. Funcionaron bien, pero descubrí que al reconstruir uno de los dos contenedores web siempre había una pequeña cantidad de tiempo de inactividad donde se devolvía 503.
Afortunadamente, encontré una solución mitigadora, pero nada perfecta;
antes de reconstruir app1, ejecuta
echo \"disable server be_discourse/app1\" | socat stdio /run/haproxy/admin.sock
y luego, una vez finalizado el proceso de reconstrucción de app1, ejecuta
echo \"enable server be_discourse/app1\" | socat stdio /run/haproxy/admin.sock
Viceversa, para reconstruir
app2ejecuta
echo \"disable server be_discourse/app2\" | socat stdio /run/haproxy/admin.sock
y luego, una vez finalizado el proceso de reconstrucción de app2, ejecuta
echo \"enable server be_discourse/app1\" | socat stdio /run/haproxy/admin.sock
esto se basa en que
/etc/haproxy/haproxy.cfgcoincide con respecto abe_discourse, aún no pegaré el archivo de configuración en un bloque de código, pero si una masa crítica lo desea, podría hacerlo.
así que esto mitiga el 503 al decirle a HAProxy que desvíe el tráfico antes de que sepa que habría un 503 del contenedor que está caído.
alternativamente, puedes crear una página de error, pero no tuve mucha suerte con eso y siento que necesita más investigación. Sin embargo, esto realmente no soluciona el problema del tiempo de inactividad.