Mostrare una pagina "Sotto manutenzione" usando nginx nell'app "launcher rebuild app"?

La manutenzione del sito con “./launcher rebuild app” richiede del tempo per ricostruire completamente il sito (installando nuovi plugin, ecc. da git).
Esiste un modo consigliato per mostrare una pagina statica dicendo “In manutenzione” mentre ricostruisco discourse?

Ho pensato di usare nginx. Ciò comporta l’arresto di docker per servire sulla porta 80 e lasciare che nginx reverse proxy prenda il controllo e reindirizzi il traffico al container docker o alla mia pagina statica.

Sto pensando di farlo modificando manualmente nginx.conf nel modo seguente ogni volta che è necessario,

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://;
}
}

e sostituendolo con,

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

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

Quali sono i vostri suggerimenti? Sto usando server AWS EC2. Esiste un modo migliore?

Ciao @PrettyGirl

Sì, c’è. Dai un’occhiata qui:

1 Mi Piace

Il modo in cui penso sia migliore e più facile è usare una configurazione a due container in modo da poter costruire un nuovo container mentre quello vecchio è in esecuzione. In questo modo il tempo di inattività è molto minore. Altri pensano che eseguire un web server aggiuntivo sia più facile.

1 Mi Piace

Questo funzionerà in molti casi, ma ancora subirà tempi di inattività ogni volta che il contenitore dei dati dovrà essere aggiornato.

1 Mi Piace

Gli aggiornamenti importanti del database avvengono meno di una volta all’anno. Gli aggiornamenti minori del database non richiedono molto tempo e puoi ricostruire il container dei dati, distruggere e avviare il container web in pochissimi minuti. Sembra che alcune persone preferirebbero un bel messaggio che dica che il sito è inattivo piuttosto che ridurre i tempi di inattività, quindi un secondo container è la soluzione.

In realtà, forse la soluzione più semplice sarebbe avere un secondo container nginx con un messaggio “torneremo presto” che si esegue manualmente durante un aggiornamento, come

./launcher stop app
docker run nginx --name back-soon # e altro ancora per vedere che una pagina è stata servita
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

Ma poi devi ottenere un certificato e mantenerlo aggiornato per il container back-soon, il che è complicato.

EDIT: Ecco l’argomento canonico per questa discussione Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl