Exibindo uma página "Em manutenção" usando nginx no "launcher rebuild app"?

A manutenção do site com “./launcher rebuild app” leva algum tempo para reconstruir totalmente o site (instalando novos plugins, etc. do git).
Existe alguma maneira recomendada de mostrar uma página estática dizendo “Em manutenção” enquanto reconstruo o discourse?

O que eu pensei foi usar o nginx. Isso envolve parar o docker para servir na porta 80 e deixar o nginx reverse proxy assumir e redirecionar o tráfego para o container docker ou para minha página estática.

Estou pensando em fazer isso editando manualmente o nginx.conf para o seguinte sempre que necessário,

server {
    listen 80;
    server_name seu-dominio-discourse.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://;
}
}

e substituindo por,

server {
    listen 80;
    server_name seu-dominio-discourse.com;

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

Quais são suas sugestões? Estou usando servidores AWS EC2. Existe alguma maneira melhor?

Olá @PrettyGirl

Sim, existe. Dê uma olhada aqui:

1 curtida

A maneira que eu acho melhor e mais fácil é usar uma configuração de dois contêineres para que você possa construir um novo contêiner enquanto o antigo está em execução. Dessa forma, o tempo de inatividade é muito menor. Outros acham que executar um servidor web extra é mais fácil.

1 curtida

Isso funcionará em muitos casos, mas ainda sofrerá interrupções sempre que o contêiner de dados precisar ser atualizado.

1 curtida

Grandes atualizações de banco de dados acontecem menos de uma vez por ano. Pequenas atualizações de banco de dados não demoram muito e você pode reconstruir o contêiner de dados, destruir e iniciar o contêiner web em poucos minutos. Parece que algumas pessoas preferem ter uma mensagem bonita dizendo que o site está fora do ar em vez de reduzir o tempo de inatividade, então um segundo contêiner é o caminho a seguir.

Na verdade, talvez a solução mais fácil seja ter apenas um segundo contêiner nginx com uma mensagem de “voltamos logo” que você executaria manualmente enquanto fazia uma atualização, como

./launcher stop app
docker run nginx --name back-soon # e mais algumas coisas para ver que uma página foi servida
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

Mas então você tem que obter um certificado e mantê-lo atualizado para o contêiner back-soon, o que é complicado.

EDIT: Aqui está o tópico canônico para esta discussão Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl