Eine "Wartung"-Seite mit nginx für die "launcher rebuild app" anzeigen?

Die Website-Wartung mit “./launcher rebuild app” dauert einige Zeit, um die Website vollständig neu zu erstellen (Installation neuer Plugins usw. aus Git).
Gibt es eine empfohlene Methode, eine statische Seite mit der Aufschrift “Under maintenance” anzuzeigen, während ich Discourse neu erstelle?

Ich dachte daran, nginx zu verwenden. Das würde bedeuten, Docker zu stoppen, um auf Port 80 zu bedienen, und nginx die Reverse-Proxy-Aufgabe übernehmen zu lassen und den Traffic entweder an den Docker-Container oder an meine statische Seite weiterzuleiten.

Ich überlege, dies durch manuelles Bearbeiten der nginx.conf wie folgt zu tun, wann immer es nötig ist:

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

und zu ersetzen durch:

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

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

Was sind Ihre Vorschläge? Ich verwende AWS EC2-Server. Gibt es einen besseren Weg?

Hallo @PrettyGirl

Ja, das gibt es. Schauen Sie mal hier:

1 „Gefällt mir“

Der Weg, den ich für besser und einfacher halte, ist die Verwendung eines Zwei-Container-Setups, damit Sie einen neuen Container erstellen können, während der alte läuft. Auf diese Weise gibt es deutlich weniger Ausfallzeiten. Andere denken, dass der Betrieb eines zusätzlichen Webservers einfacher ist.

1 „Gefällt mir“

Das wird in vielen Fällen funktionieren, wird aber immer noch Ausfallzeiten erfahren, wenn der Datencontainer aktualisiert werden muss.

1 „Gefällt mir“

Größere Datenbank-Upgrades finden seltener als einmal im Jahr statt. Kleinere Datenbank-Upgrades dauern nicht sehr lange und Sie können den Datencontainer neu erstellen, den Webcontainer zerstören und in wenigen Minuten starten. Es scheint, dass einige Leute lieber eine hübsche Nachricht hätten, die besagt, dass die Website nicht verfügbar ist, anstatt die Ausfallzeit zu reduzieren. Daher ist ein zweiter Container der richtige Weg.

Tatsächlich wäre vielleicht die einfachste Lösung, einfach einen zweiten Nginx-Container mit einer “bald wieder da”-Nachricht zu haben, den Sie während eines Upgrades manuell ausführen, wie z.B.

./launcher stop app
docker run nginx --name back-soon # und ein paar weitere Dinge, um zu sehen, dass eine Seite ausgeliefert wurde
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

Aber dann müssen Sie ein Zertifikat besorgen und das Zertifikat für den back-soon-Container aktuell halten, was kompliziert ist.

EDIT: Hier ist das kanonische Thema für diese Diskussion Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl