Cloudflare R2: Einrichtung navigieren und Konfigurationsfehler behandeln

Diese Zeile ist nicht richtig eingerückt. Sie sollte genau 2 Leerzeichen haben, wie after_code

Ist das ein Problem? Denn einige Einstellungen beginnen ohne Leerzeichen. Und wenn ich kompiliere, gibt es keinen Fehler. Beispiel:

Das sieht alles gut aus. Wie sieht der Teil after_assets_precompile aus, nach dem ich gefragt habe?

Sie müssen zwei Leerzeichen vor „after_assets_precompile“ einfügen.

2 „Gefällt mir“

Ich werde das tun und Sie auf dem Laufenden halten. Vielen Dank für Ihre Zeit <3

1 „Gefällt mir“

Wenn ich dies anwende, erhalte ich die folgende Fehlermeldung und es wird nicht geladen, die Website kann nicht erreicht werden:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #<Process::Status: pid 4803 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

./discourse-doctor Ich habe dies ausgeführt, dann neu kompiliert und die gleiche Fehlermeldung erhalten.

Wenn ich den Container betrete und die folgenden Codes ausführe, erhalte ich eine Fehlermeldung:

rake uploads:migrate_to_s3

Fehler:

rake uploads:migrate_to_s3 --trace
Plugin name is 'DiscourseMatheditor', but plugin directory is named 'discourse-matheditor'
Plugin name is 'discourse-post-voting', but plugin directory is named 'discourse-question-answer'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
** Invoke uploads:migrate_to_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_to_s3
Please note that migrating to S3 is currently not reversible!
[CTRL+c] to cancel, [ENTER] to continue

Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

Einige ähnliche ungelöste Probleme:

Gibt es in den anderen von Ihnen erwähnten Themen Anweisungen, um die Uploads manuell abzuschließen?

Das ist nur die letzte Fehlermeldung, die eigentlichen Fehler davon wären weiter oben, wie erwähnt:

1 „Gefällt mir“

Nein, das habe ich nicht gesehen. Es muss jedoch einen Grund geben, warum es nach der Kompilierung nicht hinzugefügt wird, und wir sollten diesen Fehler sehen können. Vielleicht kann ich mir ansehen, ob angegeben ist, wie dieser angezeigt wird.

Ich wollte es noch einmal versuchen. Ich habe die notwendigen S3-Verbindungen zu app.yml hinzugefügt und sie neu kompiliert. Dieses Mal habe ich after_assets_precompile entfernt. Alle URLs wurden auf CDN umgestellt und die Style-Dateien wurden nicht geladen. Wenn ich manuell in den Container gehe und versuche: rake s3:upload_assets, erhalte ich die folgende Fehlermeldung.

Attempting to apply ASSETS S3 CORS ruleset in bucket cloudflarebucketname.
rake aborted!
Aws::S3::Errors::AccessDenied: Access Denied (Aws::S3::Errors::AccessDenied)

Wenn ich versuche: rake uploads:migrate_to_s3 --trace

Die Fehlermeldung, die ich erhalten habe:


Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)

Alle Fehlermeldungen für “rake s3:upload_assets”:

root@domain-app:/var/www/discourse# rake s3:upload_assets --trace
Plugin name is 'DiscourseMatheditor', but plugin directory is named 'discourse-matheditor'
Plugin name is 'discourse-post-voting', but plugin directory is named 'discourse-question-answer'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
** Invoke s3:upload_assets (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke s3:ensure_cors_rules (first_time)
** Invoke environment
** Execute s3:ensure_cors_rules
Installing CORS rules...
Attempting to apply ASSETS S3 CORS ruleset in bucket cloudflarebucketname.
rake aborted!
Aws::S3::Errors::AccessDenied: Access Denied (Aws::S3::Errors::AccessDenied)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/client.rb:5424:in `get_bucket_cors'
/var/www/discourse/lib/s3_helper.rb:385:in `fetch_bucket_cors_rules'
/var/www/discourse/lib/s3_helper.rb:166:in `ensure_cors!'
/var/www/discourse/lib/tasks/s3.rake:60:in `sync'
/var/www/discourse/lib/tasks/s3.rake:184:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:241:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:241:in `invoke_prerequisites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets => s3:ensure_cors_rules

Es ist schwer, aus dieser Situation herauszukommen.

Irgendetwas sagt mir, dass die S3-Codes, die nur nach der Kompilierung ausgeführt werden, Amazon S3 unterstützen. Was denkst du?

Bei mir funktioniert es. Ich glaube, es gibt eine Einstellung, um die CORS-Regeln zu überspringen. Sie könnten sich Konfigurieren eines S3-kompatiblen Objektspeichers für Uploads ansehen, um zu sehen, was es ist.

this?: DISCOURSE_S3_INSTALL_CORS_RULE: false

Das hat super funktioniert, aber es gibt ein Problem. theme-javascripts-Dateien werden nicht auf S3 hochgeladen. Natürlich ist das Design der Website beschädigt. Nur der Assets-Ordner wird hochgeladen. Was können wir tun, um andere Designdateien hochzuladen?

Das ist das letzte Mal, dass ich Ihnen sage, dass Sie den Teil einbeziehen, der die Rake-Aufgabe zum Hochladen auf S3 aufruft.

Viel Glück.

1 „Gefällt mir“

Was übersehe ich? Der folgende Code ist angehängt und wenn ich ihn neu kompiliere, werden die Asset-Dateien, aber nicht die Theme-Dateien geladen.


Wenn ich dies ausführe, indem ich den Container betrete: rake uploads:migrate_to_s3 erhalte ich die folgende Fehlermeldung:

Aktualisiere die URLs in der Datenbank...
Entferne alte optimierte Bilder...
Markiere alle Beiträge mit Lightboxen für die erneute Verarbeitung...
1001 Beiträge wurden zur erneuten Verarbeitung markiert
rake abgebrochen!
FileStore::ToS3MigrationError: 9 von 3769 Uploads wurden nicht nach S3 migriert. Die S3-Migration ist für die Datenbank 'default' fehlgeschlagen. (FileStore::ToS3MigrationError)

Meine app.yml-Datei sieht wie folgt aus. Ich habe diese Einstellung deaktiviert, da sie die Theme-JavaScript- und Stylesheet-Dateien nicht hochgeladen hat: DISCOURSE_CDN_URL.

Ich werde versuchen, sie um Mitternacht erneut zu öffnen und zu kompilieren, aber ich weiß nicht, was ich übersehen habe. Ich habe gesucht, um zu sehen, was Sie sonst noch damit meinen könnten, aber ich konnte nichts anderes finden: “die rake-Aufgabe zum Hochladen nach S3”

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: 'https://xxxxx.eu.r2.cloudflarestorage.com'
  DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxx'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxx'
  DISCOURSE_S3_CDN_URL: 'https://cdn.xxxxx.com'
  #DISCOURSE_CDN_URL: 'https://cdn.xxxxx.com'
  DISCOURSE_S3_BUCKET: 'cloudflarer2xxxxx'
  #DISCOURSE_S3_BACKUP_BUCKET: 'cloudflarer2xxxxxbackups'
  #DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
  DISCOURSE_S3_INSTALL_CORS_RULE: false

Es tut mir leid, dass ich Ihre Zeit verschwendet habe, aber es wäre schön, wenn die Benutzerdokumentation diese Probleme enthalten würde. Jetzt wissen wir, dass R2 funktioniert. Fügen Sie einfach die folgenden beiden Einstellungen hinzu:


DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_INSTALL_CORS_RULE: false

Wir können den Ordner Bilder und Assets auf der Website in den S3-Bereich verschieben. Es gibt nur das Problem, dass die Theme-Dateien und Stil-Dateien nicht übertragen werden, und ich werde es um Mitternacht noch einmal versuchen. Ich hoffe, ich werde erfolgreich sein und werde dieses Problem als gelöst markieren, natürlich nach Erklärung der Lösung.

Hinweis: Der Postgresql-Server ist separat, ich benutze nicht den auf localhost. Ich schätze, damit gibt es kein Problem.
Vielen Dank an alle, die sich die Zeit genommen haben.

Das ist der Befehl, der ausgeführt werden muss, um Assets hochzuladen. Ich vermute, dass Sie immer noch etwas falsch machen, das verhindert, dass Assets von grin hochgeladen werden.

1 „Gefällt mir“

Gut, wenn ich nichts falsch mache, muss ich das Problem finden. Wenn ich den Container betrete und den Code „rake s3:upload_assets“ ausführe, scheint alles in Ordnung zu sein. Selbst wenn ich diese Einstellung ein- oder ausschalte, werden die Stil-Dateien (theme-javascripts und stylesheets) nicht geladen: „DISCOURSE_CDN_URL: ‚https://cdn.xxxxx.com‘“.

rake s3:upload_assets --trace
Plugin name is 'DiscourseMatheditor', but plugin directory is named 'discourse-matheditor'
Plugin name is 'discourse-post-voting', but plugin directory is named 'discourse-question-answer'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
** Invoke s3:upload_assets (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke s3:ensure_cors_rules (first_time)
** Invoke environment
** Execute s3:ensure_cors_rules
Installing CORS rules...
skipping
** Execute s3:upload_assets Skipping: assets/break_string-cc617154cd04790e.js
....
....
....

Wie gesagt, wenn ich nichts falsch mache, versuche ich, den Fehler zu finden und wie ich ihn beheben kann. Wenn es Verbesserungen gibt, werde ich sie hier hinzufügen, danke.

Hallo zusammen,

ich möchte meine Erfahrungen und die Schritte teilen, wie ich Cloudflare R2 erfolgreich für Uploads und Backups in meinem Discourse-Forum konfiguriert habe. Ich hoffe, das hilft anderen, die Cloudflare R2 mit Discourse nutzen möchten.

Einrichtungsübersicht:

  • Plattform: Discourse (Bitnami-Installation)
  • Bucket: Cloudflare R2
  • Benutzerdefinierte Domain: Für die öffentliche Bereitstellung von Dateien eingerichtet
  • Konfiguration: Vollständig über die Discourse-Site-Einstellungen vorgenommen (keine Umgebungsvariablen wurden berührt)

Schritt-für-Schritt-Anleitung:

  1. Cloudflare R2 Bucket erstellen:
    • Melden Sie sich bei Ihrem Cloudflare-Konto an und navigieren Sie zu R2 Storage.
    • Erstellen Sie einen neuen Bucket für Ihre Discourse-Uploads (z. B. forum-uploads).
    • Notieren Sie sich die Bucket S3 API URL, den Access Key ID und den Secret Access Key.
  2. Benutzerdefinierte Domain für CDN einrichten:
    • Um Ihre R2 Bucket-Inhalte öffentlich bereitzustellen, erstellen Sie eine benutzerdefinierte Domain in Cloudflare.
    • Ich habe zum Beispiel forumfiles.example.in verwendet.
    • Stellen Sie sicher, dass die DNS-Einstellungen auf die von Cloudflare bereitgestellte CNAME verweisen. Da ich eine Domain bei Cloudflare habe, hat es das für mich erledigt.
  3. Discourse-Site-Einstellungen konfigurieren:
    • s3_bucket: Ihr R2 Bucket-Name (z. B. forum-uploads).
    • s3_region: Auf US East (N. Virginia) setzen. Es gab keine Option für Auto.
    • s3_endpoint: Verwenden Sie Ihre von Cloudflare bereitgestellte Bucket S3 API URL (z. B. https://\u003cyour-bucket-unique-id\u003e.r2.cloudflarestorage.com).
    • s3_access_key_id: Ihre R2 Access Key ID.
    • s3_secret_access_key: Ihr R2 Secret Access Key.
    • s3_cdn_url: Ihre benutzerdefinierte Domain für CDN (z. B. https://forumfiles.example.in).
    • Stellen Sie sicher, dass enable s3 backups und enable s3 uploads aktiviert sind.
  4. Berechtigungen und CORS anpassen:
    • Setzen Sie Ihren R2 Bucket auf privat und konfigurieren Sie eine CORS-Richtlinie:
[
  {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "POST", "PUT", "HEAD"],
      "AllowedOrigins": ["*"],
      "ExposeHeaders": ["ETag"],
      "MaxAgeSeconds": 3000
  }
]
*   Dies stellt sicher, dass die Uploads ohne CORS-Probleme korrekt funktionieren.
  1. Einrichtung testen:
    • Laden Sie eine Testdatei oder ein Bild über Ihr Discourse-Forum hoch, um zu überprüfen, ob die Uploads korrekt funktionieren.
    • Prüfen Sie, ob die Dateien über Ihre benutzerdefinierte Domain zugänglich sind (z. B. https://forumfiles.example.in/original/1X/...).
    • Überprüfen Sie die Backups. Ich konnte erfolgreich Backups ausführen. Ich habe sie im R2 Bucket gegengeprüft und sie sind auch in den Site-Einstellungen aufgeführt.

Fazit:

Durch Befolgen dieser Schritte konnte ich Cloudflare R2 nahtlos in Discourse integrieren und sowohl Uploads als auch Backups effizient verwalten. Wenn Sie Fragen haben oder auf Probleme stoßen, können Sie diese gerne stellen!

6 „Gefällt mir“

Haben Sie getestet, ob Discourse Dateien von Cloudflare R2 herunterladen kann? Zum Beispiel, um S3-Uploads in ein vollständiges Backup der Instanz aufzunehmen.

Es scheint nicht zu funktionieren, da Cloudflare etwas in der R2 S3 API vermisst, und auch migrate_to_s3 funktioniert nicht.

1 „Gefällt mir“