Einrichtung von BackBlaze S3 mit BunnyCDN

Es hat ewig gedauert, bis ich herausgefunden habe, wie man all das umsetzt, daher wollte ich diese Anleitung erstellen, um es anderen Leuten zu erleichtern. Das Ausliefern deiner Bilder auf diese Weise soll deine Website schneller laden lassen. Meine Discourse-Installation kombiniert einen DigitalOcean Droplet, BackBlaze B2 S3, BunnyCDN und die kostenlose Version von Cloudflare.

Ich habe mich nach etwas Recherche zu Zuverlässigkeit, Preisen und Benchmarks für diese Dienste entschieden. Sie schienen die besten Optionen für mich zu sein. Cloudflare hilft bei der Sicherheit, kann die Seite jedoch leicht verlangsamen, soweit ich das verstanden habe – du solltest das also selbst prüfen. Backblaze hat Partnerschaften sowohl mit Cloudflare als auch mit Bunny, die einen kostenlosen Datentransfer ermöglichen.

Obwohl Cloudflare als CDN bezeichnet wird, funktioniert es nicht wie ein herkömmliches CDN und wird wahrscheinlich nicht allein ausreichen, um S3 mit Discourse einzurichten. Du wirst möglicherweise einen weiteren CDN-Anbieter benötigen; BunnyCDN funktioniert bei mir gut. Falls jemand es erfolgreich nur mit Cloudflare geschafft hat, lass es mich bitte wissen :stuck_out_tongue:

So richtest du Uploads auf S3 ein:
Zuerst musst du dich bei Backblaze anmelden, dann Buckets erstellen und die Details in die Discourse-Einstellungen eingeben:

Anschließend meldest du dich bei BunnyCDN an und befolgst diese Anleitung:

bunny.net - The Global Edge Platform that truly Hops (Empfehlungslink, ich erhalte 20 $ Gutschrift auf meiner Rechnung)

Nachdem du deine BunnyCDN-Pull-Zone erstellt hast, musst du die korrekte URL ermitteln, die du in die Discourse-Admin-Backend-Einstellung für „s3 cdn url" eingibst. Gehe zu deinem BunnyCDN-Dashboard > Pull Zones > Manage Pull Zones > klicke auf deine Zone > kopiere die URL neben „host name".

Die URL sollte ungefähr so aussehen: example.b-cdn.net, aber du musst sicherstellen, dass du https:// davor setzt, also: https://example.b-cdn.net

Speichere die Änderungen im Bereich der Discourse-Admin-Einstellungen.

Drücke in deinem Browser auf deiner Discourse-Website zweimal Strg+F5.

Führe einen Test durch, indem du ein Bild im Discourse-Text-Composer hochlädst. Untersuche das Testbild-Element oder sieh dir die Bildquelle an, um sicherzustellen, dass es funktioniert hat. Die URL sollte sich von deiner normalen Domain unterscheiden und etwa so aussehen: example.b-cdn.net / Dateiname

Ab jetzt wird jedes hochgeladene Bild in deinem Backblaze-Bucket gespeichert und belegt keinen Speicherplatz auf deinem DigitalOcean-Droplet :stuck_out_tongue:

Uploads auf S3 sichern
Wenn du deine Discourse-Backups in deinem Backblaze-Bucket speichern möchtest, musst du Folgendes tun:

In der Anleitung, die ich weiter oben in diesem Thread verlinkt habe, beachte, wie erklärt wird, dass du zwei separate Buckets benötigst. Ein Bucket ist öffentlich; dies ist dein Upload-Bucket, in dem Benutzer Bilder auf deinem Forum hochladen können. Der andere Bucket ist privat; dies ist dein Backup-Bucket. Es ist wichtig, automatisierte Backups von Discourse zu erstellen, falls etwas kaputtgeht. Dann kannst du dein Backup laden und es reparieren.

Auf deinem BunnyCDN-Dashboard solltest du eine zweite Pull-Zone erstellen. Deine erste Pull-Zone war für Uploads, diese neue Pull-Zone ist für Backups.

bunnycdn dashboard > pull zones > add pull zone

Befolge dieselbe Anleitung, die ich früher verlinkt habe: „How to Speed up your Backblaze B2 file delivery with BunnyCDN" von BunnyCDN, verknüpfe diesmal jedoch die neue Pull-Zone mit deinem Backup-Bucket statt mit deinem Upload-Bucket.

Ich empfehle, auf der Seite zur Erstellung einer BunnyCDN-Pull-Zone das „High Volume Tier 5 /TB" zu verwenden. Ich denke, für Backups ist das teurere/schnellere „Standard Tier 10 /TB", das ich für meinen Upload-Bucket genutzt habe, nicht notwendig.

Richte deine Backup-Einstellungen im Bereich der Discourse-Admin-Einstellungen ein. „Backup location" sollte auf S3 gesetzt sein und „s3 endpoint" sollte auf deinen Backblaze-Endpunkt zeigen, etwas wie:
s3.us-west-002.backblazeb2.com

Drücke zweimal Strg+F5 auf deiner Website, um den Cache zu leeren.

Starte ein Backup und warte, bis es abgeschlossen ist. Warte dann 5 Minuten und prüfe deinen Backblaze-Backup-Ordner; du solltest das neue Backup dort sehen.

Ältere Bilder migrieren:
Dieser Schritt ist optional, aber empfehlenswert, besonders wenn dein Server wenig Speicherplatz hat. Du hast also alles für neue Bild-Uploads eingerichtet, aber ältere Bilder können ebenfalls in deine Buckets übertragen werden. Damit dieser Prozess funktioniert, musst du Folgendes befolgen:

Einrichten von Cloudflare CDN
Dieser Schritt ist optional, da Backblaze eine Partnerschaft eingegangen ist, die den Datentransfer zu Bunny ebenfalls kostenlos macht. Für zusätzliche Sicherheit und weitere Funktionen kannst du den Datenverkehr jedoch zunächst über Cloudflare leiten und dann Bunny das Abrufen der Daten von dem Ort lassen, an dem Cloudflare sie hinterlegt.

https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

8 „Gefällt mir“

Ich wollte nur sagen, dass ich das Gleiche wie Bill gemacht habe und bestätigen kann, dass es funktioniert! Der einzige Haken ist, dass es nur für neue Dateien und nicht für die alten funktioniert. Das Tolle an Bills Methode ist, dass sie nicht einmal einen Neuaufbau erfordert. Ich hoffe jedoch, dass jemand herausfindet, wie man die alten Dateien auch mit S3 zum Laufen bringt.

Übrigens funktionieren Backups auch nicht. Zumindest nicht bei mir, und ich habe exakt das Gleiche wie Bill gemacht.

5 „Gefällt mir“

Sie können alte Dateien mithilfe des Rake-Tasks migrieren.

1 „Gefällt mir“

Wenn du diesen Befehl meinst, habe ich ihn bereits ausprobiert, aber die alten Assets wurden nicht hochgeladen:

sudo -E -u discourse bundle exec rake s3:upload_assets

Ich habe meine Beiträge auch neu erstellt, aber ohne Erfolg.

Die Aufgabe lautet:

cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_to_s3
cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_from_s3

Funktioniert das bei dir, @AntiMetaman?
Falls ja, werde ich es in den Leitfaden aufnehmen.

Ich werde versuchen herauszufinden, wie ich Backups korrekt zum Laufen bringe, und den Leitfaden entsprechend aktualisieren. Ich weiß sicher, dass ich eine zweite Pull-Zone einrichten muss.

Bei mir funktionieren die Backups mit Backblaze einwandfrei… Welches Problem hast du?

1 „Gefällt mir“

Meine Backups funktionieren mit dieser Methode ebenfalls einwandfrei. Du musst etwas falsch eingestellt haben. Ich aktualisiere den Leitfaden sofort und erkläre, wie ich die Backups eingerichtet habe. @AntiMetaman

Es tut mir leid, ich verstehe das nicht ganz. Wie kann es sein, dass bei mir alles funktioniert, wenn du vorschlägst, dass ich etwas falsch eingestellt habe?

Er spricht mit mir @itsbhanusharma. Meine Backups funktionieren nicht. Meine Konfiguration ist die gleiche wie Bills. Ich habe jedoch keine separate Pull-Zone für den Backup-Bucket verwendet, vielleicht ist das der Grund. Ich habe nur den Namen des Backup-Buckets in den Umgebungsvariablen.

Ich werde später Bhanus Vorschlag befolgen, die S3-Assets zu migrieren.

Ich habe zwei Pull-Zonen erstellt, eine für jeden der Buckets (Upload und Backup). Ich habe über mein Admin-Panel eine Sicherung gestartet, diese ist jedoch fehlgeschlagen. Das Einzige, was Discourse über den Sicherungs-Bucket weiß, ist sein Name.

DISCOURSE_S3_CDN_URL: https://duelistsunite.b-cdn.net
DISCOURSE_S3_BUCKET: s3omega
DISCOURSE_S3_BACKUP_BUCKET: s3omegabackup
DISCOURSE_BACKUP_LOCATION: s3

Ich bin mir nicht sicher, was ich hier übersehe. Gibt es eine S3_CDN_BACKUP_URL, da die URL für die Sicherung anders ist?

@itsbhanusharma Außerdem habe ich deinen Ansatz ausprobiert, aber migrate_from_S3 ist nicht definiert.

Außerdem war ich mir nicht sicher, ob du migrate_to_s3 meintest, also habe ich das auch ausprobiert, aber auch das war nicht definiert.

Entschuldigung für die Verwirrung, ich meinte rake uploads:migrate_to_s3

1 „Gefällt mir“

Es scheint, dass der Rake-Befehl abbricht, da amazonaws.com zur URL hinzugefügt wird, was jedoch falsch ist. Das ist das Problem. Wenn Sie einen S3-Speicher verwenden, der nicht von Amazon stammt, funktioniert der Rake-Befehl nicht, da die URL-Änderung hartkodiert ist.

1 „Gefällt mir“

Kannst du bestätigen oder dementieren, ob du Einstellungen zum app.yml env-Bereich hinzugefügt hast, oder hast du die Einstellungen unter Admin > Einstellungen hinzugefügt?

Ich habe meine Backups ebenfalls mit S3 eingerichtet. Somit funktionieren sowohl alte als auch neue Uploads mit S3. Ich nutze Cloudflare für SSL und DDoS-Schutz, BunnyCDN für die Upload- und Backup-Pull-Zones sowie BackBlaze für den S3-Speicher. Jetzt ist alles in Ordnung!

Beachten Sie, dass es besser ist, die Umgebungsvariablen in der app.yml wie hier gezeigt zu definieren: Configure an S3 compatible object storage provider for uploads

Bauen Sie dann neu, damit die S3-Konfiguration global definiert ist und nicht nur im Admin-Bereich. Auf diese Weise können Sie alte Dateien einfacher mit drei Befehlen nach S3 migrieren:

./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

3 „Gefällt mir“

Ich bin mir nicht sicher, was mir hier entgeht. Gibt es eine S3_CDN_BACKUP_URL? Da die URL für das Backup anders ist.

Hast du diese Frage geklärt? Mir ist auch nicht ganz klar, wo ich die URL für die Pull-Zone eintragen soll, die auf den Backup-Bucket verweist.

Edit: Liege ich richtig, wenn ich annehme, dass das CDN nur für den Upload-Bucket benötigt wird? Die Anleitung zu diesem Thema schlägt vor, dass für den Backup-Bucket eine zweite CDN-Pull-Zone erstellt werden sollte. Falls das falsch ist, sollte die Anleitung vielleicht aktualisiert werden, @Bill

Anscheinend wird nur der Name des Backup-Buckets benötigt. Aus dem Namen lässt sich die Backup-S3-URL ableiten, da diese bis auf den Namensunterschied identisch mit der Upload-URL ist. Deshalb müssen Sie keine separate S3-Backup-URL definieren. Dies setzt natürlich voraus, dass sich beide Buckets im selben S3-Service befinden.

Aber wenn der Backup-Bucket privat ist, wie könnte dann das CDN darauf zugreifen? Ich bin neu bei CDNs und habe vielleicht etwas übersehen, aber ich vermute, dass Discourse das CDN überhaupt nicht für Backups verwendet.

Das tun sie. Ich habe in meinen Backup-Bucket geschaut und sehe, dass das Backup dort hochgeladen wurde. Es ist privat, aber Discourse kann darauf zugreifen. Wenn die URL vorhanden ist, können Sie die Berechtigungen einrichten. Sie können auch festlegen, dass nur Ihre Website oder jede HTTPS-Quelle auf den Bucket zugreifen kann.

Können Sie bestätigen, dass das Backup über das CDN gelaufen ist und nicht direkt von Ihrer Discourse-Installation zu BackBlaze B2?