¿Mostrar una página de "Mantenimiento" usando nginx en la "aplicación de reconstrucción del lanzador"?

El mantenimiento del sitio con “./launcher rebuild app” tarda un tiempo en reconstruir completamente el sitio (instalando nuevos plugins, etc. desde git).
¿Hay alguna forma recomendada de mostrar una página estática que diga “En mantenimiento” mientras reconstruyo el discourse?

Pensé en usar nginx. Eso implica detener el docker para que sirva en el puerto 80 y dejar que nginx reverse proxy se encargue y redirija el tráfico al contenedor docker o a mi página estática.

Estoy pensando en hacerlo editando manualmente el nginx.conf a lo siguiente siempre que sea necesario,

server {
    listen 80;
    server_name your-discourse-domain.com;

location / {
    proxy_pass http://localhost:80;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect http:// https://;
}
}

y reemplazándolo con,

server {
    listen 80;
    server_name your-discourse-domain.com;

    location / {
        root /path/to/your/maintenance/page;
    }
}

¿Cuáles son sus sugerencias? Estoy usando servidores AWS EC2. ¿Hay alguna mejor manera?

Hola @PrettyGirl

Sí, la hay. Échale un vistazo aquí:

1 me gusta

La forma en que creo que es mejor y más fácil es usar una configuración de dos contenedores para que pueda construir un nuevo contenedor mientras el antiguo se ejecuta. De esa manera, hay mucho menos tiempo de inactividad. Otros piensan que ejecutar un servidor web adicional es más fácil.

1 me gusta

Eso funcionará en muchos casos, pero aún experimentará tiempo de inactividad cada vez que el contenedor de datos necesite actualizarse.

1 me gusta

Las actualizaciones importantes de la base de datos ocurren con menos frecuencia que una vez al año. Las actualizaciones menores de la base de datos no tardan mucho y puedes reconstruir el contenedor de datos, destruir e iniciar el contenedor web en muy pocos minutos. Parece que algunas personas preferirían tener un bonito mensaje que diga que el sitio está caído en lugar de reducir el tiempo de inactividad, por lo que un segundo contenedor es la forma de hacerlo.

En realidad, tal vez la solución más fácil sería tener un segundo contenedor nginx con un mensaje de “volvemos pronto” que ejecutarías manualmente mientras realizas una actualización, como

./launcher stop app
docker run nginx --name back-soon # y algo más para ver que se sirvió una página
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

Pero entonces tienes que obtener un certificado y mantener el certificado actualizado para el contenedor back-soon, lo cual es complicado.

EDITAR: Aquí está el tema canónico para esta discusión Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl