Exibir página de erro estática enquanto o site estiver inativo

O que eu quero fazer é exibir uma página dizendo “este site está em manutenção” quando ele ficar offline durante, por exemplo, o processo de reconstrução.

Este tópico é basicamente o que eu gostaria de fazer, mas parece exigir uma configuração não padrão. Existe uma maneira mais fácil de fazer isso para uma instalação padrão? Obrigado!

Não, não há nada assim no momento.

3 curtidas

Na realidade, este procedimento utiliza o que é considerado uma “instalação padrão” (ou seja, usando o guia oficial do Discourse Docker), ao qual o Nginx é reimplantado fora do contêiner.
O procedimento parece assustador no início, mas na verdade não é, posso ajudá-lo se quiser.

Não é a resposta que eu queria ouvir, mas aprecio a resposta inequívoca mesmo assim

Não estou muito preocupado com o processo, mas sim se essa configuração exigirá considerações adicionais ao fazer coisas simples no futuro, como instalar um novo plugin. Ou é algo que, uma vez configurado, não preciso mais pensar nisso?

Desde que adicionei o NGINX para isso em 2020, precisei editar a configuração duas vezes. Ambas as vezes foi para ajustar configurações relacionadas ao upload de arquivos grandes após atualizar o limite no Discourse.

Usar o NGINX externo para fornecer a página estática e atuar como um proxy reverso para o Discourse normalmente não requer alterações depois que você o configura corretamente.

3 curtidas

Note que o nginx externo traz algo mais valioso além da página de erro estática: atribuição correta de endereços IP de origem para usuários IPv6. Se o seu fórum for acessível via IPv6 e você não usar a configuração externa do nginx, todos que acessarem seu site via IPv6 aparecerão como vindos de um endereço local 172.x.y.z. Isso não ajuda quando você está tentando lidar com usuários maliciosos do site, como spammers!

É exatamente o mesmo para adicionar novos plugins.

Acho que isso facilita a atualização porque você sabe que seus usuários serão informados sobre a manutenção e apenas esperarão que ela termine.

A única coisa que consigo pensar que você quer ter certeza é que o certbot está renovando seus certificados corretamente. Isso é incorporado à configuração padrão que não usa nginx externo, mas se você usar nginx externo, também terá que usar certbot externo e garantir que ele esteja configurado para renovar seu certificado. E nem todas as maneiras de instalar o certbot lidam com isso.

Note que a documentação que você perguntou diz:

:alarm_clock: Se você instalou o certbot do seu repositório de pacotes, as renovações geralmente ocorrem automaticamente. Caso contrário, defina um lembrete para executar letsencrypt renew && systemctl reload nginx.service antes que seu certificado expire!

Definir um lembrete não é uma boa maneira de fazer isso, no entanto. Você inevitavelmente esquecerá, e se perder um e-mail do letsencrypt avisando sobre a expiração do certificado, seu site deixará de funcionar. Felizmente, isso é fácil de contornar.

Se as renovações automáticas não estiverem configuradas, veja como fazer isso.

Crie o arquivo /etc/systemd/system/certbot.service com este conteúdo:

[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

Crie o arquivo /etc/systemd/system/certbot.timer com este conteúdo:

[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target

Em seguida, informe ao systemd sobre os novos arquivos.

# systemctl daemon-reload
# systemctl enable --now certbot.timer
1 curtida

Se você usar uma configuração de dois contêineres, o tempo de inatividade será inferior a um minuto e você realmente não precisará de uma página assim.

1 curtida

Após algumas pesquisas aqui, está bem claro que a manutenção de dois contêineres é um trabalho muito mais exigente do que o Nginx. Pelo menos no meu nível de habilidade.

2 curtidas

Ah. Entendi. Do meu ponto de vista, é quase o mesmo, exceto que você precisa prestar atenção em quando o contêiner de datas precisa ser atualizado, o que é infrequente, mas você precisa prestar atenção. E quando isso acontece, o site fica fora do ar por um tempo.

Isso também é verdade. É sempre uma troca — o tempo que um fórum ficará inativo devido a atualizações/melhorias versus o tempo que a manutenção de contêineres separados exige (e especialmente quando você (leia-se: eu) estraga tudo e começa a tentar encontrar algumas correções e o fórum fica inativo ao mesmo tempo :rofl: )

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.