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

**URL:** https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488
**Category:** Self-hosting
**Created:** [Outubro 8, 2023, 2:34am UTC](https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488 "2023-10-08T02:34:52Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![PrettyGirl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/prettygirl/32/330415_2.png) [@PrettyGirl](https://meta.discourse.org/u/PrettyGirl)
#### Post date: [Outubro 8, 2023, 2:34am UTC](https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488/1 "2023-10-08T02:34:52Z")

</div>

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,

```plaintext
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,

```plaintext
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?

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [Outubro 8, 2023, 2:40am UTC](https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488/2 "2023-10-08T02:40:45Z")

</div>

Olá @PrettyGirl

Sim, existe. Dê uma olhada aqui:

> [@Add an offline page to display when Discourse is rebuilding or starting up](https://meta.discourse.org/t/add-an-offline-page-to-display-when-discourse-is-rebuilding-or-starting-up/45238):
>
> warning This guide is intended for advanced users, who are already using nginx outside the docker container. By following this guide you make your setup more complicated and will loose some speed benefits like HTTP2 if you’re not running Ubuntu 16.04 or later. Proceed with caution! When Discourse is rebuilding or starting up, your users will usually either see an error message from their browser… [image] …or a not-so-nice 502 error message from Nginx: [image] If you’re a perfectionist l…

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Outubro 8, 2023, 12:01pm UTC](https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488/3 "2023-10-08T12:01:22Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [Outubro 8, 2023, 2:28pm UTC](https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488/4 "2023-10-08T14:28:34Z")

</div>

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Outubro 8, 2023, 3:16pm UTC](https://meta.discourse.org/t/showing-a-under-maintenance-page-using-nginx-at-the-launcher-rebuild-app/281488/5 "2023-10-08T15:16:10Z")

</div>

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

```plaintext
./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](https://meta.discourse.org/t/add-an-offline-page-to-display-when-discourse-is-rebuilding-or-starting-up/45238/83)
