Afficher une page « En maintenance » en utilisant nginx pour l'application « launcher rebuild app » ?

La maintenance du site avec « ./launcher rebuild app » prend un certain temps pour reconstruire entièrement le site (installation de nouveaux plugins, etc. depuis git).
Existe-t-il un moyen recommandé d’afficher une page statique indiquant « En maintenance » pendant que je reconstruis Discourse ?

Ce que j’avais pensé était d’utiliser nginx. Cela implique d’arrêter le docker pour qu’il serve sur le port 80 et de laisser le proxy inverse nginx prendre le relais et rediriger le trafic soit vers le conteneur docker, soit vers ma page statique.

Je pense faire cela en modifiant manuellement le nginx.conf comme suit chaque fois que nécessaire,

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

et en le remplaçant par,

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

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

Quelles sont vos suggestions ? J’utilise des serveurs AWS EC2. Existe-t-il une meilleure façon ?

Salut @PrettyGirl

Oui, il y en a une. Regardez ici :

1 « J'aime »

La façon dont je pense est meilleure et plus facile est d’utiliser une configuration à deux conteneurs afin que vous puissiez construire un nouveau conteneur pendant que l’ancien s’exécute. Il y a beaucoup moins de temps d’arrêt de cette façon. D’autres pensent qu’exécuter un serveur Web supplémentaire est plus facile.

1 « J'aime »

Cela fonctionnera dans de nombreux cas, mais connaîtra toujours des temps d’arrêt chaque fois que le conteneur de données devra être mis à jour.

1 « J'aime »

Les mises à niveau majeures de la base de données se produisent moins d’une fois par an. Les mises à niveau mineures de la base de données ne prennent pas très longtemps et vous pouvez reconstruire le conteneur de données, détruire et démarrer le conteneur web en quelques minutes. Il semble que certaines personnes préféreraient avoir un joli message indiquant que le site est hors service plutôt que de réduire le temps d’arrêt, donc un second conteneur est la solution.

En fait, la solution la plus simple serait peut-être d’avoir un second conteneur nginx avec un message “de retour bientôt” que vous lanceriez manuellement pendant une mise à niveau, comme

./launcher stop app
docker run nginx --name back-soon # et quelques autres choses pour voir qu'une page a été servie
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

Mais alors vous devez obtenir un certificat et maintenir le certificat à jour pour le conteneur back-soon, ce qui est compliqué.

EDIT : Voici le sujet de discussion canonique pour cette discussion Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl