Ich muss dies möglicherweise in drei separate Beiträge aufteilen, aber sie hängen zusammen, daher beginne ich mit einem.
Vor ein paar Tagen habe ich dieses Tutorial (How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean) so ziemlich wortwörtlich verwendet und mein eigenständiges Discourse-Droplet auf Digital Ocean auf zwei Droplets innerhalb eines Load-Balancers migriert, bisher lief alles gut.
Anschließend habe ich dieses Tutorial (Configure an S3 compatible object storage provider for uploads) durchgearbeitet, aber nach dem Wiederaufbau von Discourse über die Kommandozeile zeigte meine Discourse-Website nur einen leeren Bildschirm. Ich habe im Inspektor im Browser nachgesehen und festgestellt, dass der Browser all meine Inhalte blockierte, weil sie über HTTP und nicht über HTTPS ausgeliefert wurden. Das liegt wahrscheinlich daran, dass der Load-Balancer SSL-terminiert ist, sodass alles Externe HTTPS ist, die Server selbst aber über HTTP laufen.
Zu diesem Zeitpunkt habe ich meine Server wieder komplett lahmgelegt und versucht, sie mit HTTPS innerhalb des Load-Balancers zum Laufen zu bringen, aber es war einfach nicht möglich. Ich konnte das Digital Ocean Space/CDN nicht mit S3/CDN gemäß diesem Tutorial (Configure an S3 compatible object storage provider for uploads) zum Laufen bringen. Ich habe es genauestens geprüft und jeden Aspekt mehrmals inspiziert, aber es funktionierte nicht. Die einzige Möglichkeit, Discourse wieder aufzubauen, bestand darin, den Parameter DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com aus app.yml zu entfernen, aber dann, obwohl es aufgebaut war, konnte ich den Server nicht zum Antworten bringen. Ich erhielt entweder eine 503 Server nicht antwortet-Fehlermeldung oder eine normale Browser-Meldung, dass der Server nicht antwortet oder getrennt wurde. Dies variierte je nach den Load-Balancer- und DO Space/CDN-Einstellungen, die ich ausprobierte. Ich habe jede mögliche Kombination von Einstellungen ausprobiert und nichts hat es mir ermöglicht, eine Seite auszuliefern.
Als ich den DISCOURSE_S3_ENDPOINT-Parameter beibehielt, erhielt ich während des Discourse-Wiederaufbaus die folgende Fehlermeldung, die jedoch verschwand, wenn ich den S3_ENDPOINT-Parameter auskommentierte.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId
Alle meine Dateien wurden nach S3 synchronisiert, daher gehe ich davon aus, dass der Zugriffsschlüssel in Ordnung war und das Problem irgendwie durch den S3_ENDPOINT-Parameter verursacht wurde.
Heute habe ich aufgegeben, den vorherigen Versuch zum Laufen zu bringen, und ein Backup meiner Droplets wiederhergestellt, die nur mit HTTP-Load-Balancing liefen. Schließlich habe ich es wieder zum Laufen gebracht, indem ich dieses Tutorial (Set up file and image uploads to S3) befolgt habe, aber dieses Mal habe ich die S3-Einstellungen über das Discourse Admin-Panel bearbeitet, anstatt die app.yml mit den Einstellungen aus dem empfohlenen Tutorial zu bearbeiten. Es hat endlich funktioniert, aber der wichtige Unterschied ist, dass ich die S3-CDN-Einstellungen bewusst weggelassen habe. Ich habe bestätigt, dass Bilder, die in Beiträge hochgeladen werden, auf S3 gespeichert werden und ich kann Discourse direkt nach S3 sichern, und das ist eigentlich alles, was ich will. Allerdings habe ich jetzt drei Probleme, die mich verfolgen, eines ist kritisch und zwei sind ignoriertbar, obwohl ich hier gerne Bestätigung erhalten würde, wenn möglich.
Das kritische Problem ist, dass sich Benutzer nicht mehr über den Patreon-Login-Button auf der Discourse-Login-Seite anmelden können. Diese Meldung wird angezeigt:
Sorry, there was an error authorizing your account. Please try again.
Die URL lautet:
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon
Ich würde mich sehr über Ratschläge freuen, was ich versuchen könnte, um dies zum Laufen zu bringen, aber ich frage mich wieder, ob dies daran liegt, dass die Server intern kein HTTPS ausführen. Wie Sie an der URL sehen können, sind sie extern auf HTTPS, daher ist es schwer, sicher zu sein. Ich hoffe, jemand hier hat Erfahrung mit Digital Ocean Load-Balancing usw. mit Discourse.
Die anderen beiden Probleme werden jetzt in der Admin-Konsole wie unten aufgeführt:
Einige Ratschläge basierend auf Ihren aktuellen Website-Einstellungen
- Ihre Website verwendet SSL. Aber
[force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https)ist in Ihren Website-Einstellungen noch nicht aktiviert. - Der Server ist so konfiguriert, dass Dateien nach S3 hochgeladen werden, aber es ist kein S3-CDN konfiguriert. Dies kann zu teuren S3-Kosten und einer langsameren Website-Leistung führen. Weitere Informationen finden Sie unter „Verwendung von Objektspeicher für Uploads“.
Ich habe nichts dagegen, force_https zu aktivieren, aber ich befürchte, dass es mich von meinem Server aussperren wird, da die internen Load-Balanced-Server kein HTTPS ausführen und ich aufgrund der Probleme von gestern nur ungern weitere zwölf Stunden damit verbringen möchte, mir den Kopf an der Wand einzuschlagen und unzählige 15-minütige Wiederaufbauten von Discourse zu beobachten, um nirgendwohin zu gelangen. Auch hier gilt: Wenn jemand weiß, dass es sicher ist, force_https mit meinen Konfigurationen zu aktivieren, lassen Sie es mich bitte wissen.
Und das zweite Problem, das wieder einmal nicht gut über die Parameter in der app.yml-Datei lief, daher zögere ich, dies auch noch einmal zu versuchen. Können Sie bestätigen, dass dies im Wesentlichen dasselbe bewirken würde wie die Parameter, die der app.yml-Datei hinzugefügt wurden? Wenn ja, werde ich diese zweite Nachricht einfach ignorieren. Umgekehrt, wenn es aus irgendeinem Grund sicher ist, es zu versuchen, lassen Sie es mich wissen und ich werde ein Backup erstellen und es ausprobieren.
Entschuldigung für den langen Beitrag. Ich hoffe, Sie können herausfinden, worum ich Ratschläge bitte.