Konfigurieren Sie einen S3-kompatiblen Objektspeicheranbieter für Uploads

Funktioniert es jetzt?

1 „Gefällt mir“

Perfekt. Es hat so lange gedauert, aber abgesehen davon, dass es funktioniert, habe ich auch so viel über die Discourse-Konfiguration gelernt!

Danke!

2 „Gefällt mir“

OK. Ich habe beschlossen, die Schritt-für-Schritt-Anleitung zu veröffentlichen, die ich bei der Durchführung dieser Konfiguration erstellt habe.

Anleitung zur Konfiguration von Discourse Forum S3-Backup und S3-CDN (Itechguides.com)

Die Schritte in dieser Anleitung beziehen sich auf die Verwendung von DigitalOcean Space und StackPack CDN.

3 „Gefällt mir“

@pfaffman Ich habe mich gefragt, ob Sie mir bei diesem zusätzlichen Backup-Problem helfen könnten:

Nach Abschluss der S3-Backup- und Klonkonfiguration läuft mein automatisches Backup nicht. Der Screenshot unten zeigt meine Konfiguration.

Ich kann Backups manuell ausführen. Das Problem sind die geplanten automatischen Backups – sie laufen nicht.

1 „Gefällt mir“

Ich weiß es nicht. Sie können sich die Sidekiq-Jobs ansehen und sicherstellen, dass sie laufen. Es sollte funktionieren.

1 „Gefällt mir“

4 Beiträge wurden in ein neues Thema aufgeteilt: Tipps zu Google Cloud S3

Hallo,

Vielen Dank, dass Sie meinen Beitrag korrigiert haben. Ich kann meinen Beitrag jedoch nicht bearbeiten, um irreführende Informationen zu vermeiden.

Hallo,

Ich stecke fest und bin verwirrt und hoffe, jemand kann mir helfen.
Ich hatte zuerst eine Bitnami-Installation und merkte, wie viele Probleme mir das im Laufe der Zeit bereiten würde. Ich habe die Installation mit der Standardinstallation neu durchgeführt.
Ich konnte mein Backup wiederherstellen und alles war in Ordnung, obwohl ich von der 2.8 zur 2.9 Beta wechselte.

Ich habe mein Backup erneut auf meinem Google Bucket getestet und es funktionierte immer noch einwandfrei.

Beachten Sie, dass die gesamte S3-Konfiguration über die Weboberfläche und nicht über Umgebungsvariablen erfolgte.

Aus DSGVO-Gründen habe ich einen neuen Backup-Bucket in Europa erstellt (nennen wir ihn discourse-backup-eu) und da ich die Umgebungsvariable ändern konnte, habe ich DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com gesetzt, die App neu erstellt, den Namen des Backup-Buckets in der Weboberfläche geändert, das Backup erneut ausgeführt und war sehr erfreut, die Backup-Dateien in meinem neuen Backup-Bucket in Europa erscheinen zu sehen.

Jetzt wollte ich, dass die Uploads in einen anderen Bucket gehen und die Festplattenspeicher meines VMs nicht füllen.

Also habe ich einen neuen Bucket konfiguriert (nennen wir ihn discourse-uploads), ihn öffentlich gemacht und meinem Dienstkonto die Rolle Storage Legacy Bucket Owner für diesen neuen Bucket zugewiesen.
Dann habe ich eine Regel zu meinem bestehenden Load Balancer (nennen wir ihn https://www.example.com) hinzugefügt, um einen Backend-Bucket mit aktiviertem Cloud CDN zu verwenden, wie hier hier beschrieben. Die Regel /discourse-uploads/* verweist auf den Bucket discourse-uploads.

Ich habe mein CDN mit einer test.jpg im Stammverzeichnis des Buckets getestet, konnte es aber nicht über https://www.example.com/discourse-uploads/test.jpg erreichen und musste einen Unterordner namens discourse-uploads im Bucket erstellen, die test.jpg hinein verschieben und jetzt kann ich mein Testbild über https://www.example.com/discourse-uploads/test.jpg sehen.

Im Web-UI habe ich den Dummy-Bucket-Namen unter “s3 upload bucket” geändert (den ich zuvor beim Einrichten des Backups setzen musste) auf discourse-uploads, die CDN-URL mit https://www.example.com/discourse-uploads gefüllt und “enable s3 uploads” angekreuzt.

Von da an, wenn ich versuchen würde, ein Bild hochzuladen, würde ich ein Popup mit der Meldung “Ungültiges Argument” im Browserfenster erhalten (von einem 422-Fehler mit einem JSON-Inhalt, der im Grunde dasselbe sagt).

Ich habe versucht, alle Beiträge neu zu backen, aber ohne Erfolg, ich hatte immer noch den Fehler.

Also dachte ich, ich sollte versuchen, die Umgebungsvariablen anstelle der Web-UI zu verwenden.

und die folgende Konfiguration verwenden:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

Ich habe die App neu erstellt.
Dann kann ich Discourse nicht mehr öffnen, da keine der Assets in den Bucket hochgeladen wurden und ich einen 404 erhalte.
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

Ich dachte, der Versuch, direkt in einen Unterordner im Bucket hochzuladen, sei ein wenig übertrieben, obwohl der OP vorschlägt, dass es funktioniert (zumindest für den Backup-Bucket).

habe die Umgebungsvariable geändert in
DISCOURSE_S3_BUCKET: discourse-uploads
(Ich dachte, ich könnte später mit der Host-Regel spielen, um das Hochladen in einen Unterordner zu vermeiden)

und neu erstellt, um zu sehen, ob etwas hochgeladen wird, aber nichts wird in den Bucket hochgeladen und Discourse kann immer noch wegen 404s nicht geöffnet werden.

Meine Fragen sind also:

  • Kollidieren die Web-UI und die Umgebungsvariable?
  • Wann sollen die Assets in den Bucket hochgeladen werden?
  • Wie kann ich das debuggen? Ich sehe keine Fehler in den Protokollen.
  • Ist es möglich, einen Unterordner eines Buckets in der Konfiguration festzulegen?
  • Sobald dies funktioniert, werden die zuvor hochgeladenen Bilder in den Bucket übertragen? Wenn ich neu backe, wie sehen die URLs der zuvor hochgeladenen Bilder aus?

Danke!

1 „Gefällt mir“

Haben Sie diesen Teil hinzugefügt?

Ich habe vor einiger Zeit einen PR mit einer Vorlage dafür eingereicht, aber ich glaube nicht, dass er jemals Beachtung fand.

Außerdem ist es schwierig, Buckets zu wechseln. Sie müssen nicht nur alle Assets vom alten in den neuen kopieren, sondern auch die Datenbank aktualisieren, um den neuen Bucket zu verwenden. Ich glaube, es gibt ein Thema dazu.

Wenn Sie die Umgebungsvariablen verwenden (was Sie tun sollten), sind diese Einstellungen in der Weboberfläche nicht mehr sichtbar.

1 „Gefällt mir“

Ein Beitrag wurde in ein bestehendes Thema eingefügt: Tipps zu Google Cloud S3

Ja. Wenn ich mich richtig erinnere, gab es oben eine Diskussion darüber, dass Google etwas nicht erlaubt (Zugriff auf Listen, vielleicht?), aber es gab eine Problemumgehung, bei der etwas „Legacy“ verwendet wurde. Daran erinnere ich mich. Sie müssen die obigen 100 Nachrichten durchscrollen, um es zu finden. Wenn es funktioniert, wäre es großartig, wenn Sie den OP aktualisieren könnten, um zu sagen, wie Sie es zum Laufen gebracht haben, damit die nächste Person, die es wissen muss, es leichter finden kann.

1 „Gefällt mir“

Vielen Dank nochmals für Ihre Antwort!
Die Warnung bezüglich des Google Buckets bezog sich auf die Verwendung für Backups, da die Dateien nicht aufgelistet werden konnten.
Ich habe bereits gepostet, wie man das beheben kann

Schlagen Sie vor, dass ich die OP mit diesen Informationen aktualisiere? Ich glaube nicht, dass ich das kann.

Nochmals, das Backup funktioniert, aber der Upload der Assets nicht, laut OP sollte dies auch ohne die Storage Legacy Bucket Owner Rechte funktionieren.

Ich glaube, es gibt hier möglicherweise eine Regression, was meinen Sie @Falco?

1 „Gefällt mir“

Es könnte eine Regression geben. Sind Sie sicher, dass Sie das benutzerdefinierte

hinzugefügt haben, das nur Google benötigt?

2 „Gefällt mir“

Oh. Nun, ich dachte, jemand hätte das getan. :person_shrugging:

Das war es, was ich vorgeschlagen habe. Es ist ein Wiki, daher bin ich mir ziemlich sicher, dass du das kannst, obwohl ich mir nicht zu 100 % sicher bin, welche Vertrauensstufen beteiligt sind.

1 „Gefällt mir“

Vielen Dank für Ihre Antwort, ja, ich habe sie einbezogen:

Beachten Sie, dass ich es mit und ohne den Unterordner versucht habe
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
und
DISCOURSE_S3_BUCKET: discourse-uploads

Danke nochmals

2 „Gefällt mir“

@tuanpembual hat es ursprünglich getan, bezog sich aber auf Storage Legacy Object Owner anstelle von Storage Legacy Bucket Owner

Ich bin nur ein „Basisbenutzer“, das muss der Grund sein, warum ich es nicht bearbeiten kann.

3 „Gefällt mir“

Ich werde versuchen, die Antworten auf meine Fragen zusammenzufassen:

  • Kollidieren die Web-UI und die ENV-Variable?
  • Wann sollen die Assets in den Bucket hochgeladen werden?
    Durch Hinzufügen dieses Snippets zu app.yml im Hook-Bereich wird es nach after_assets_precompile (während des Rebuilds der App) hochgeladen.
  • Wie kann ich das debuggen? Ich sehe keine Fehler in den Logs.
    Durch Ausführen von:
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
  • Ist es möglich, einen Unterordner eines Buckets in der Konfiguration festzulegen?
  • Sobald dies funktioniert, werden die zuvor hochgeladenen Bilder in den Bucket übertragen? Wie sehen die URLs der zuvor hochgeladenen Bilder aus, wenn ich sie neu backe?
3 „Gefällt mir“

Hallo, ich habe nach Objektspeicheranbietern gesucht und auf der OP gesehen, dass man bei einigen von ihnen „CORS überspringen und es manuell konfigurieren“ muss. Ich bin mit CORS nicht vertraut und weiß nichts über dessen Konfiguration. Sollte ich mich also von denen fernhalten, die diese Einstellung benötigen, oder ist es einfach einzurichten?

1 „Gefällt mir“

Wenn Sie fragen müssten (wie ich es tun würde), dann würde ich mich für eine andere entscheiden.

1 „Gefällt mir“

Bestätigen Sie nur, nachdem ich die folgenden Schritte ausgeführt habe:

rake uploads:migrate_to_s3

rake posts:rebake

Ich kann den lokalen Upload-Ordner vollständig entfernen, ja?

1 „Gefällt mir“