Hochverfügbarkeits-3-Server-Einrichtung

Unterstützt Discourse mehrere Maschinen (jeweils mit einem einzelnen Docker-Container) hinter einem eigenständigen Load Balancer?

Ich benötige eine Discourse-Installation, die den Ausfall eines Servers bewältigen kann, daher lautet meine Standardlösung, drei Server hinter einem Load Balancer zu konfigurieren (wobei der LB das SSL-Zertifikat verwaltet).

Ich habe eigenständige externe PostgreSQL- und Redis-Server für Discourse konfiguriert. (Dies alles läuft auf Google Cloud Platform). Ich verwende den Discourse-Launcher, um den reinen Web-Docker-Container zu konfigurieren.

  1. Unterstützt Discourse den Betrieb mehrerer Container, wenn sich jeder Container auf einer anderen Maschine befindet?
  2. Sollte ich einfach den erstellten Docker-Container von der ersten Maschine auf die anderen Maschinen kopieren?
  3. Wie werden hochgeladene Logos behandelt?
  4. Werden hochgeladene Logos, Favicons usw. in der Datenbank gespeichert?

Vielen Dank für Ihre Hilfe.

Ja, so betreiben wir es bei unserem Hosting-Service.

  1. Ja
  2. Ja
  3. Sie sollten die Verwendung von Object Storage für Uploads (S3 & Klonen) konfigurieren.
  4. Nein, sie werden wie in Punkt 3 erwähnt im Object Storage abgelegt.

Danke, Rafael. Sehr geschätzt.

Ich habe ein Problem mit dem SSL-Terminierung am Load Balancer festgestellt. Discourse gibt alle seine Links als HTTP an.

Gibt es eine Möglichkeit, Discourse darauf hinzuweisen, dass seine Links HTTPS sein sollten?

Ja, gehen Sie in die Rails-Konsole und setzen Sie es mit folgendem Befehl auf HTTPS:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.force_https = true

Ausgezeichnet. Nochmals vielen Dank.

Ich gehe davon aus, dass ich in die app.yml folgendes einfügen könnte:
- exec: rails c "SiteSetting.force_https = true"

Ich habe keine Ahnung von Rails. Sollte es in meinem Befehl oben ‘rails c’ oder ‘rails r’ heißen?

Wir haben in unserer Beispieldatei ein Beispiel für das Ändern der Site-Einstellungen beim Bootstrap-Vorgang:

Ja, genau von dort habe ich meinen Befehl kopiert.

Eine letzte Frage: Wird der Docker-Container überwacht? Falls der Docker-Container aus irgendeinem Grund stoppt, hat launcher dann etwas eingerichtet, um ihn neu zu starten?

Ja, launcher bittet Docker, die Container automatisch neu zu starten.

Okay. Ich habe jetzt Discourse auf einer einzelnen Maschine zum Laufen gebracht. Ich habe zwei weitere Maschinen. Das Docker-Gast-/freigegebene Volume zeigt auf ein NFS-Verzeichnis, damit alle Maschinen auf die hochgeladenen Dateien zugreifen können (insbesondere Logos usw.).

Ich habe die Docker-Images auf die Maschinen 2 und 3 kopiert (docker save -o app-image local_discourse/app und dann docker load -i app-image).

Ich war der Ansicht, dass ein einfaches ./launcher start app funktionieren würde, aber es versucht, containers/app.yml zu überprüfen.

Werden Probleme auftreten, wenn ich zulasse, dass app.yml von Maschine 2 und 3 überprüft (und Änderungen an der DB vorgenommen) werden?

Gibt es einen besseren Weg, drei Maschinen mit einem einzigen Setup laufen zu lassen?

Sie haben zwei Möglichkeiten:

  • Verwenden Sie – ich denke, es ist ./launcher start-command app – auf dem vollständig eingerichteten Rechner (dem „Build-Rechner“), um eine vollständige Docker-Befehlszeile zu erhalten.
  • Kopieren Sie die app.yml und führen Sie das durch, was Sie gerade versucht haben (launcher start).

Ich würde die Umgebungsvariable DISCOURSE_FORCE_HTTPS: true setzen.