Eine Offline-Seite hinzufügen, die angezeigt wird, wenn Discourse neu erstellt wird oder startet

Vielleicht haben wir die Offline-Seite nur implementiert, weil wir nach mehreren Vorfällen wie [1,2,3] das Upgrade-Verfahren „Container stoppen, git pull, Launcher neu erstellen

3 „Gefällt mir“

Das ist etwas verwirrend, da im Folgenden eine Anleitung zum Installieren und Konfigurieren von nginx außerhalb des Containers beschrieben wird.

Wie auch immer: Heute habe ich einen zusätzlichen Vorteil dieser externen nginx-Konfiguration erkannt: Wenn Sie es gewohnt sind, bei Registrierungen oder Anmeldungen IP-Adressen wie 127.0.0.1 oder Ihre Docker-Adresse (wahrscheinlich beginnend mit 172.) zu sehen, lag das möglicherweise daran, dass IPv6-Datenverkehr, der in den Container weitergeleitet wird, im Gegensatz zu IPv4 seine IPv6-Adresse nicht mitführt. Mit dieser Konfiguration werden nun korrekte IPv6-Adressen anstelle lokaler Adressen angezeigt.

Mit anderen Worten: Diese Konfiguration ist im Grunde erforderlich, damit ein nützliches Administrationswerkzeug im zunehmend IPv6-fähigen Internet korrekt funktioniert. (In den USA umfasst dies einen Großteil des mobilen Datenverkehrs.)

4 „Gefällt mir“

Vielen Dank für diesen sehr hilfreichen Leitfaden! Ein paar Anmerkungen:

Ich glaube, sudo apt-get install letsencrypt wurde durch sudo apt-get install certbot ersetzt. Beim Ausführen des ersten Befehls erhalte ich die Meldung Note, selecting 'certbot' instead of 'letsencrypt'.

Ein Freund hat bemerkt, dass bei der Facebook-Teilung der Seite eine Vorschau von „301 moved permanently

2 „Gefällt mir“

Danke für das Tutorial, es ist großartig. Meine 502-Seite sieht jetzt viel besser aus.
In meinem praktischen Fall muss ich die Nginx-Konfiguration in die Datei /etc/nginx/sites-enabled/discourse.conf aufnehmen.
Ich habe Discourse erfolgreich installiert, nachdem Nginx mit WordPress läuft.

2 „Gefällt mir“

Ich bin auf das Problem gestoßen, dass Nginx nichts von dem erneuerten Zertifikat wusste, da es nach der Installation gemäß dieser Anleitung nicht neu gestartet wurde. Für mich bestand die Lösung darin:

systemctl edit certbot

Dann habe ich die beiden Zeilen hinzugefügt:

[Service]
ExecStartPost=/bin/systemctl reload nginx

Oder auf einem System, auf dem ich einen separaten mail-receiver-Container verwende, der das Zertifikat ebenfalls vom System teilt:

[Service]
ExecStartPost=/bin/systemctl reload nginx
ExecStartPost=/bin/sh -c 'cd /var/discourse && ./launcher restart mail-receiver'
3 „Gefällt mir“

Vielen Dank für das Tutorial, das bei mir gut funktioniert.

Ich habe nur eine Frage: Wenn der Googlebot beispielsweise diese Fehlerseite sieht, weiß er dann, dass es sich um eine temporäre Seite handelt? Oder müssen wir einen bestimmten Fehlercode senden, um ihn auf den vorübergehenden Charakter der Änderung aufmerksam zu machen?

Ich möchte nicht, dass Google aufgrund einer ausgefalleneren Fehlerseite die gesamte Indexierung meines Forums löscht.

1 „Gefällt mir“

Google sollte die 500/502-Fehler als Signal betrachten, es später noch einmal zu versuchen. Solange Ihre Website nicht allzu häufig neu aufgebaut wird, sollten Sie keine Probleme haben.

Ich betreibe mein Forum schon seit langer Zeit hinter nginx, und das hat sich nachteilig auf das Ranking ausgewirkt.

5 „Gefällt mir“

Okay, ich war unsicher, ob noch 502 gesendet wird.

1 „Gefällt mir“

Es wird immer noch gesendet. So erkennen Sie es:

Aus der nginx-Dokumentation:

Syntax: error_page code … [ = [ response ]] uri ;

Hier ist der Ausschnitt aus der Konfiguration:

error_page 502 =502 /errorpages/discourse_offline.html;

Das bedeutet: "Beim Auftreten (oder Ursprung) eines 502 Bad Gateway-Antwortcodes wird der Inhalt der Datei /errorpages/discourse_offline.html mit einem 502 Bad Gateway-Antwortcode gesendet. Das = gibt an, welcher HTTP-Antwortcode gesendet werden soll.

Alles in Ordnung!

Und ich stimme @ashs zu: Eine Minute oder weniger 502-Fehler einmal oder zweimal im Monat hat die Suche nicht beeinträchtigt. Ich sehe oft aktuelle Beiträge in den Google-Ergebnissen.

2 „Gefällt mir“

Ich erhalte nach dieser Aktion weiterhin einen 502 Bad Gateway-Fehler von Cloudflare…

1 „Gefällt mir“

Ein 502-Fehler deutet wahrscheinlich darauf hin, dass Nginx nicht startet, vermutlich aufgrund eines Konfigurationsfehlers. Das Ausführen von nginx -t zeigt an, ob die Konfigurationsdatei in Ordnung ist. Wenn keine Fehler vorliegen, führen Sie systemctl status nginx.service aus, um den Status des Nginx-Dienstes zu überprüfen.

5 „Gefällt mir“

Ich habe Nginx zum Laufen gebracht, aber danach bekam ich nur noch 404-Fehler, obwohl ich alles an der richtigen Stelle platziert habe und es hätte angezeigt werden sollen.

1 „Gefällt mir“

Meine Frage bezieht sich direkt auf den Titel des Themas, aber nicht auf die in diesem Thema verwendete Methode, daher hoffe ich, dass es in Ordnung ist, sie in dieser Diskussion zu belassen.

Ich habe etwas sehr Einfaches eingerichtet, um dieses Problem zu lösen, und habe eine spezifische Frage.

Ich habe einen separaten Droplet bei DigitalOcean erstellt und über den Marketplace einen LAMP-Server installiert. Anschließend habe ich eine einfache HTML-Seite mit einigen Bildern hochgeladen, um anzuzeigen, dass der Server zur Wartung außer Betrieb ist. Anschließend würde ich bei Bedarf eine IP-Adresse zwischen meinem regulären Discourse-Server und diesem Wartungsserver hin- und herschalten.

Hier ist die Frage: Damit der ‚Wartungs’-Server korrekt geladen werden konnte, musste ich letztendlich über Certbot ein Zertifikat für diesen Server erhalten (zusätzlich zu dem, das ich bereits für die Haupt-Discourse-Instanz hatte). Mit anderen Worten: 2 Zertifikate für dieselbe Domain auf verschiedenen Servern. Es hat funktioniert, aber ich war immer besorgt, ob das in Zukunft Probleme verursachen könnte. Die Online-Lektüre deutet darauf hin, dass dies in Ordnung ist, aber ich wollte sehen, ob jemand direkte Erfahrungen damit gemacht hat.

2 „Gefällt mir“

Das ist vollkommen in Ordnung. Je nachdem, wie Sie die Validierung durchgeführt haben, können Zertifikatserneuerungen jedoch nicht funktionieren – zum Beispiel, wenn Ihr Wartungsserver eine HTTP-basierte Validierung verwendet, schlägt dies fehl, solange die Domain nicht darauf zeigt, was den Zweck wahrscheinlich zunichtemacht. Es könnte sinnvoll sein, dass der Wartungsserver gelegentlich das neueste Zertifikat vom Hauptserver kopiert, anstatt eines bei Let’s Encrypt anzufordern.

3 „Gefällt mir“

Vielen Dank für deine Antwort und deinen Vorschlag, Felix.

Ich muss zugeben, dass ich keine Ahnung habe, ob mein Server eine HTTP-basierte Validierung verwendet (ich habe alles über dieses fantastische Certbot erledigt), aber dein Bedenken ist absolut logisch. Ich habe etwas gesucht, konnte aber keine Ressourcen finden, die erklären, wie man Zertifikate so kopiert, wie du vorschlägst. Außerdem gehe ich davon aus, dass ich eine Art Cron-Job einrichten müsste. Falls du weitere Vorschläge hast, wäre das toll. Ansonsten vielen Dank nochmals für deine Hilfe.

1 „Gefällt mir“

Um Dateien direkt von Server zu Server zu kopieren, sind scp oder rsync gute Werkzeuge – dies könnte ein guter Ausgangspunkt sein.
Mein Vorschlag wäre tatsächlich, einen Cron-Job einzurichten, der das Zertifikat regelmäßig vom Hauptserver auf den Wartungsserver kopiert :slight_smile:

Oh, und zur Erklärung des Hintergrunds der HTTP-basierten Validierung: Um zu überprüfen, ob die Domain wirklich Ihnen gehört, fordert Let’s Encrypt eine bestimmte Datei von Ihrem Server an und erwartet eine bestimmte Antwort. Certbot kann dies automatisch übernehmen (indem es Ihren Server vorübergehend so konfiguriert, dass er diese Datei für die Validierungsanfrage zurückgibt). Dies funktioniert jedoch natürlich nur, wenn die Anfrage tatsächlich Ihren Server erreicht. Wenn Ihre DNS-Einstellungen nicht auf Ihren Server zeigen oder Sie die IP-Adresse woanders hingelegt haben, geht die Anfrage an den falschen Server, Let’s Encrypt erhält nicht die erwartete Antwort und weigert sich, das Zertifikat zu signieren.

3 „Gefällt mir“

Ich werde mir das noch einmal genauer ansehen. Vielen Dank nochmals für die Links und die Hilfe.

1 „Gefällt mir“

…löst das das Problem ohne manuelle Einrichtung? Danke.

1 „Gefällt mir“

Wenn Sie eine „im Aufbau befindliche“ Seite wünschen, während die Website neu aufgebaut wird, müssen Sie die mühsamen Schritte oben ausführen. Ich würde empfehlen, zu einer 2-Container-Installation zu wechseln, die etwas mehr Aufwand bei der Wartung erfordert (Sie müssen wissen, wann der Datencontainer neu erstellt werden muss), aber nur etwa 30 Sekunden Ausfallzeit hat, wenn der neue Container hochfährt, aber derzeit eine beträchtliche Menge an RAM benötigt (2 GB reichen möglicherweise nicht aus, aber ich bin mir nicht ganz sicher).

4 „Gefällt mir“

Beachten Sie, dass das Paket letsencrypt jetzt im Allgemeinen certbot genannt wird.

1 „Gefällt mir“