Funktioniert es jetzt?
Perfekt. Es hat so lange gedauert, aber abgesehen davon, dass es funktioniert, habe ich auch so viel über die Discourse-Konfiguration gelernt!
Danke!
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.
@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.
Ich weiß es nicht. Sie können sich die Sidekiq-Jobs ansehen und sicherstellen, dass sie laufen. Es sollte funktionieren.
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!
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.
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.
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?
Es könnte eine Regression geben. Sind Sie sicher, dass Sie das benutzerdefinierte
hinzugefügt haben, das nur Google benötigt?
Oh. Nun, ich dachte, jemand hätte das getan. ![]()
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.
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
@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.
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 nachafter_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?
Muss ich wirklich separate Buckets für Uploads und Backups verwenden?
Nein, das müssen Sie nicht, aber es ist normalerweise der einfachste Weg, dies einzurichten. Im Wesentlichen müssen Sie entweder zwei verschiedene Buckets oder ein Präfix für den Backup-Bucket verwenden. Die folgenden Kombinationen funktionieren beispielsweise:
- Unterschiedliche Buckets
- s3_upload_bucket:
your-uploads-bucket- s3_backup_bucket:
your-backups-bucket
- Unterschiedliche Präfixe
- s3_upload_bucket:
your-uploads-bucket/uploads- s3_backup_bucket:
your-uploads-bucket/backups
(Organizing objects using prefixes - Amazon Simple Storage Service) Sie können Präfixe verwenden, um die Daten zu organisieren, die Sie in Amazon S3 Buckets speichern. Ein Präfix ist eine Zeichenkette am Anfang des Objektschlüsselnamens. Ein Präfix kann jede Länge haben, vorbehaltlich der maximalen Länge des Objektschlüsselnamens (1.024 Bytes). Sie können sich Präfixe als eine Möglichkeit vorstellen, Ihre Daten ähnlich wie Verzeichnisse zu organisieren. Präfixe sind jedoch keine Verzeichnisse.
- 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?
Ich habe S3-Uploads in meiner Discourse-Instanz aktiviert (die schon eine Weile läuft); was mache ich mit den vorhandenen lokalen Uploads?
Um Ihre vorhandenen Uploads nach S3 zu migrieren, können Sie ein paar Rake-Tasks ausführen. Um dies durchzuführen, benötigen Sie SSH-Zugriff, Root-Berechtigungen und müssen sich in der Discourse-App befinden (gemäß Administrative Bulk Operations). Oh, und Sie müssen einige Umgebungsvariablen in app.yml festlegen. Nichts für schwache Nerven.
Sobald Sie all das getan haben, sind Sie bereit für die Rake-Tasks:
rake uploads:migrate_to_s3 rake posts:rebakeSobald diese abgeschlossen sind (und die Uploads gut funktionieren), müssen Sie keine Uploads mehr in Ihre Backups aufnehmen. Und als Bonus können Sie im Katastrophenfall ein Backup von der Kommandozeile wiederherstellen (behalten Sie einfach eine Kopie von app.yml irgendwo auf).
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?
Wenn Sie fragen müssten (wie ich es tun würde), dann würde ich mich für eine andere entscheiden.
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?

