Hallo,
ich bin verwirrt durch die Installationsanweisungen. Gibt es eine Möglichkeit, Discourse horizontal zu skalieren?
Zum Beispiel: 2+ Docker-Container auf verschiedenen Servern, die jeweils Discourse ausführen?
Die Konfiguration mit mehreren Containern ist zwar viel flexibler und robuster, aber auch komplexer einzurichten. Eine Einrichtung mit mehreren Containern ermöglicht es Ihnen:
Ausfallzeiten beim Upgrade auf neue Versionen von Discourse zu minimieren. Sie können neue Web-Prozesse starten, während Ihre Seite läuft, und erst nach dem Build das neue Image aktivieren.
Ihr Forum auf mehrere Server zu skalieren.
Server für Redundanz hinzuzufügen.
Bestimmte erforderliche Dienste (z. B. die Datenbank) auf leistungsstärkerer Hardware auszuführen.
Wenn Sie eine Einrichtung mit mehreren Containern wünschen, sehen Sie sich die Vorlagen data.yml und web_only.yml im samples-Verzeichnis an. Um diesen Prozess zu erleichtern, injiziert launcher eine Umgebungsvariable namens DISCOURSE_HOST_IP, die innerhalb des Images verfügbar sein wird.
Gibt es eine Stelle, an der ich mehr Informationen darüber finde, wie ich die Container auf verschiedenen Servern und nicht viele Container auf demselben Server ausführen kann?
Sie stellen externe Dienste für PostgreSQL, Redis und den Load Balancer bereit und konfigurieren die app.yml so, dass diese verwendet werden, wie zum Beispiel im Artikel Discourse mit einem separaten PostgreSQL-Server betreiben.
Führen Sie irgendwo ./launcher bootstrap app aus. Dadurch wird ein Container-Image auf dem lokalen Rechner erstellt. Laden Sie dieses Image in Ihren Container-Registry-Dienst hoch.
Jetzt können Sie so viele Instanzen wie gewünscht starten und ihnen alle befehlen, das im vorherigen Schritt exportierte Image auszuführen.
Sie können Multisite verwenden, um einen einzelnen Container mehrere Sites bedienen zu lassen (unter Verwendung derselben Plugins und derselben Discourse-Version). Dies beschreibt, wie dies ohne externen Reverse-Proxy funktioniert. Wenn Sie es versuchen, hinterlassen Sie bitte einen Kommentar dort und teilen Sie mir mit, ob es funktioniert hat. Ich beabsichtige, dies hier zu veröffentlichen, sobald ich ziemlich sicher bin, dass es funktioniert.
Das Ausführen von Containern auf mehreren Servern ist dasselbe wie bei einer der oben genannten Methoden. Sie hätten mehrere Container, die denselben Redis und Postgres teilen, die hinter einem Load Balancer laufen.
Die meisten Dinge, die nichts mit der offiziellen Standardinstallation von Discourse zu tun haben, werden nicht unterstützt, da es unendlich viele Möglichkeiten gibt, diese Dinge zu tun.
Erste Frage zu Sidekiq im Falle der Ausführung mehrerer web_only.yml-Docker-Container auf jeweils unterschiedlichen VMs: In diesem ersten Fall kann eine andere Sidekiq-Instanz, die denselben Redis-Server teilt, denselben Job zweimal ausführen. Ist Discourse robust für diese Art von Fehler? Ist es zuverlässiger, einen Sidekiq in einer dedizierten VM (oder Docker) zu verwenden, und wie trennt man ihn von web_only Discourse?
Zu Ihren letzten Anmerkungen bezüglich der unterstützten Installation: Ich kann verstehen, dass es unendlich viele Möglichkeiten gibt, mehrere Containerkonfigurationen zu erstellen, aber meiner Meinung nach benötigen wir eine unterstützte Methode, um mehrere Instanzen für horizontale Skalierung und/oder Hochverfügbarkeit in zwei Fällen auszuführen: basierend auf VM (unterschiedliche Discourse web_only-Docker-Container auf unterschiedlichen VMs und Redis/Postgres sind auf anderen separaten VMs direkt installiert, ohne Docker zu verwenden) und basierend auf Containern (alles basiert auf Containern).