Cloudflare R2: Configurazione e gestione degli errori di impostazione

Quella riga non è indentata correttamente. Dovrebbe avere 2 spazi esattamente come after_code

È un problema? perché alcune impostazioni iniziano senza spazi. e quando compilo non dà alcun errore. Esempio:

Tutto sembra a posto. Che aspetto ha la parte after_assets_precompile di cui ho chiesto?

Devi inserire due spazi prima di “after_assets_precompile”.

2 Mi Piace

Lo farò e ti farò sapere. Grazie mille per il tuo tempo <3

1 Mi Piace

Quando applico questo, si verifica il seguente errore e non si carica, il sito non può essere raggiunto:

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.

Ho eseguito ./discourse-doctor, poi ricompilato, ottenendo lo stesso errore.

Quando entro nel container ed eseguo i seguenti codici, ottengo un errore:

rake uploads:migrate_to_s3

Errore:

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

Alcuni problemi simili irrisolti:

Qualcuno degli altri argomenti che hai menzionato ha per caso istruzioni per completare i caricamenti manualmente?

Questo è solo il livello di fallimento finale, gli errori effettivi da esso sarebbero più in alto, come menziona:

1 Mi Piace

No, non l’ho visto. Tuttavia, ci deve essere un motivo per cui non lo aggiunge dopo la compilazione e dovremmo essere in grado di vedere questo errore. Forse posso dare un’occhiata se è indicato come vederlo.

Volevo riprovare. Ho aggiunto le connessioni S3 necessarie ad app.yml e le ho ricompilate. questa volta, ho rimosso after_assets_precompile. Tutti gli URL sono stati modificati in CDN e i file di stile non sono stati caricati. Quando accedo manualmente al container e provo: rake s3:upload_assets, ottengo il seguente errore.

Tentativo di applicare il set di regole CORS ASSETS S3 nel bucket cloudflarebucketname.
rake interrotto!
Aws::S3::Errors::AccessDenied: Access Denied (Aws::S3::Errors::AccessDenied)

Se provo questo: rake uploads:migrate_to_s3 --trace

L’errore che ho ottenuto:


Migrazione degli upload a S3 per 'default'...
Alcuni upload non sono stati migrati al nuovo schema. Eseguendo la migrazione, ciò potrebbe richiedere del tempo...
rake interrotto!
FileStore::ToS3MigrationError: Alcuni upload non hanno potuto essere migrati al nuovo schema. Devi risolverlo manualmente. (FileStore::ToS3MigrationError)

Tutti i messaggi di errore per “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

È difficile uscire da questa situazione.

Qualcosa mi dice che i codici S3 vengono eseguiti solo dopo la compilazione e supportano Amazon S3. Cosa ne pensi?

Funziona per me. C’è un’impostazione per saltare le regole cors, credo. Potresti dare un’occhiata a Configurare un provider di archiviazione di oggetti compatibile con S3 per i caricamenti per vedere di cosa si tratta.

questo?: DISCOURSE_S3_INSTALL_CORS_RULE: false

Ha funzionato benissimo, ma c’è un problema. I file theme-javascripts non vengono caricati su S3. Naturalmente, il design del sito è danneggiato. Viene caricata solo la cartella assets. Cosa possiamo fare per caricare altri file di design?

Questa è l’ultima volta che ti dirò che includi la parte che chiama il rake task per caricare su s3.

Buona fortuna.

1 Mi Piace

Cosa mi manca? Il codice sottostante è allegato e quando lo ricompilo carica i file degli asset ma non i file del tema.


Quando lo eseguo entrando nel container: rake uploads:migrate_to_s3 ottengo il seguente errore:

Updating the URLs in the database...
Removing old optimized images...
Flagging all posts containing lightboxes for rebake...
1001 posts were flagged for a rebake
rake aborted!
FileStore::ToS3MigrationError: 9 of 3769 uploads are not migrated to S3. S3 migration failed for db 'default'. (FileStore::ToS3MigrationError)

Il mio file app.yml è il seguente. Ho disattivato questa impostazione perché non caricava i javascript e gli stylesheet del tema: DISCOURSE_CDN_URL.

Proverò a riaprirlo a mezzanotte e a compilarlo, ma non so cosa mi sia sfuggito. Ho cercato per vedere cos’altro potresti intendere con questo, ma non ho trovato niente di diverso: “il rake task per caricare su 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

Mi dispiace di aver perso il tuo tempo, ma sarebbe bello se la documentazione utente includesse questi problemi. Ora sappiamo che r2 funziona. Basta aggiungere le seguenti due impostazioni:


DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_INSTALL_CORS_RULE: false

Possiamo spostare le cartelle images e assets del sito nell’area S3. C’è solo il problema che i file del tema e i file di stile non vengono trasferiti e ci riproverò a mezzanotte. Spero di avere successo e segnerò questo problema come risolto, ovviamente, dopo aver spiegato la soluzione.

Nota: il server Postgresql è separato, non uso quello su localhost. Suppongo che non ci siano problemi con questo.
Grazie a tutti coloro che hanno dedicato del tempo.

Questo è il comando da eseguire per caricare gli asset. La mia ipotesi è che tu abbia ancora qualcosa di sbagliato che impedisce il caricamento degli asset da grin.

1 Mi Piace

Bene, se non sto facendo nulla di sbagliato, allora devo trovare il problema. Quando entro nel container ed eseguo il codice “rake s3:upload_assets”, tutto sembra a posto. Anche se attivo o disattivo questa impostazione, non carica i file di stile (theme-javascripts e stylesheets): “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
....
....
....

Come ho detto, se non sto facendo qualcosa di sbagliato, cerco di trovare l’errore e come risolverlo. Se ci saranno miglioramenti, li aggiungerò qui, grazie.

Ciao a tutti,

Volevo condividere la mia esperienza e i passaggi su come ho configurato con successo Cloudflare R2 sia per i caricamenti che per i backup nel mio forum Discourse. Spero che questo aiuti altri che cercano di utilizzare Cloudflare R2 con Discourse.

Panoramica della configurazione:

  • Piattaforma: Discourse (installazione Bitnami)
  • Bucket: Cloudflare R2
  • Dominio personalizzato: Configurato per servire file pubblicamente
  • Configurazione: Eseguita interamente tramite le impostazioni del sito di Discourse (nessuna variabile d’ambiente è stata modificata)

Guida passo passo:

  1. Crea un bucket Cloudflare R2:
    • Accedi al tuo account Cloudflare e vai allo storage R2.
    • Crea un nuovo bucket per i caricamenti del tuo forum (ad esempio, forum-uploads).
    • Annota l’URL API S3 del bucket, l’Access Key ID e la Secret Access Key.
  2. Configura il dominio personalizzato per CDN:
    • Per servire pubblicamente il contenuto del tuo bucket R2, crea un dominio personalizzato in Cloudflare.
    • Ad esempio, ho usato forumfiles.example.in.
    • Assicurati di configurare le impostazioni DNS per puntare al CNAME fornito da Cloudflare. Poiché ho un dominio su Cloudflare, l’ha fatto per me.
  3. Configura le impostazioni del sito di Discourse:
    • s3_bucket: Il nome del tuo bucket R2 (ad esempio, forum-uploads).
    • s3_region: Imposta su US East (N. Virginia). Non c’era l’opzione di automatico.
    • s3_endpoint: Usa l’URL API S3 del bucket fornito da Cloudflare (ad esempio, https://<il-tuo-id-univoco-del-bucket>.r2.cloudflarestorage.com).
    • s3_access_key_id: Il tuo Access Key ID R2.
    • s3_secret_access_key: La tua Secret Access Key R2.
    • s3_cdn_url: Il tuo dominio personalizzato per la CDN (ad esempio, https://forumfiles.example.in).
    • Assicurati che enable s3 backups e enable s3 uploads siano selezionati.
  4. Regola permessi e CORS:
    • Imposta il tuo bucket R2 su privato e configura una policy CORS:
[
  {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "POST", "PUT", "HEAD"],
      "AllowedOrigins": ["*"],
      "ExposeHeaders": ["ETag"],
      "MaxAgeSeconds": 3000
  }
]
  • Ciò garantisce che i caricamenti funzionino correttamente senza problemi CORS.
  1. Test della configurazione:
    • Carica un file o un’immagine di prova tramite il tuo forum Discourse per verificare che i caricamenti funzionino correttamente.
    • Verifica se i file sono accessibili tramite il tuo dominio personalizzato (ad esempio, https://forumfiles.example.in/original/1X/...).
    • Controlla i backup, sono riuscito a eseguire correttamente i backup. Ricontrollato nel bucket R2 e sono elencati anche nelle impostazioni del sito.

Conclusione:

Seguendo questi passaggi, sono stato in grado di integrare Cloudflare R2 con Discourse senza problemi, gestendo sia i caricamenti che i backup in modo efficiente. Se hai domande o incontri problemi, non esitare a chiedere!

6 Mi Piace

Hai testato se discourse può scaricare file da Cloudflare R2? ad esempio per includere i caricamenti S3 in un backup completo dell’istanza.

Non sembra funzionare perché a Cloudflare manca qualcosa nell’API S3 di R2, inoltre migrate_to_s3 non funziona.

1 Mi Piace