Cloudflare R2: Configurazione e gestione degli errori di impostazione

Posso scaricare i backup, non ho mai avuto problemi con questo.

Con caricamenti S3 inclusi?

Molto utile, solo che quando carico l’immagine dagli appunti non funziona, riscontri questo problema? Alla fine è stata caricata su R2 ma non è visibile nel post:

Hai guardato l’URL dell’immagine, com’è?

Quindi non possiamo ancora configurare r2 tramite app. yml? Solo tramite impostazioni del sito Web, ovvero DB_S3_CONFIG?

Utilizza questo metodo, puoi caricare i vecchi caricamenti locali su R2, tramite rake uploads : migrate to s3?

Ehi, grazie a tutti per questo.

Se ho capito bene, “DISCOURSE_CDN_URL” può essere uguale a “DISCOURSE_S3_CDN_URL”, che è il dominio pubblico personalizzato collegato al bucket su Cloudflare? O è necessaria qualche altra configurazione per questo?

Sì, devi aggiungere lo stesso nome di dominio al file container.yml di Discourse. Ecco un esempio di utilizzo:

  ## L'indirizzo CDN HTTP o HTTPS per questa istanza di Discourse (configurato per il pull)
  ## Vedi https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  #DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: 'https://45dv544v56x****************************564564.eu.r2.cloudflarestorage.com'
  DISCOURSE_S3_ACCESS_KEY_ID: '564dfds4f54sdfs********65564545'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'sddfsdf564564**********6545sd4f54sd56f4s6d5'
  DISCOURSE_S3_CDN_URL: 'https://cdn.discourse.com.br'
  ##DISCOURSE_CDN_URL: 'https://cdn.discourse.com.br'
  #DISCOURSE_S3_BUCKET: 'cloudflarebucketname'
  #DISCOURSE_S3_BACKUP_BUCKET: 'cloudflarebackupbucketname/backups'
  #DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
  DISCOURSE_S3_INSTALL_CORS_RULE: false

Le impostazioni disabilitate con questo carattere devono essere configurate tramite il pannello di amministrazione; gli esempi sono forniti nel codice. Se preferisci, puoi anche abilitare queste impostazioni all’interno della sezione di configurazione, a tua discrezione.

1 Mi Piace

Questa opzione interromperà il sito se impostata su app.yml, poiché non tutti i file statici come JavaScript sono ospitati su R2 per qualche motivo.

1 Mi Piace

Questo è fantastico. Ho seguito la guida nel post n. 39 e tutto ha funzionato. Ho solo un suggerimento e 2 domande.

Suggerimento:
Da quello che ho letto, dovresti rendere i file CDN del bucket pubblicamente disponibili e il bucket di backup privato. Quindi ho creato 2 bucket e ho lasciato quello di backup privato rendendo i file del bucket pubblici con un dominio personalizzato. Significava solo che dovevo inserire 2 percorsi diversi nelle 2 caselle sotto admin.
Ho visto molte persone inserire i loro backup come percorso del loro bucket di livello superiore, sto pensando in modo errato a questo proposito? O è solo un’idiosincrasia con CF R2?

D1:
Ho aggiunto ‘DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true’ nel mio app.yml e ricostruito, ma quando vado su backup e clicco sul pulsante di backup, ricevo ancora il popup che mi dice che gli upload non saranno inclusi. È solo perché il popup non ha alcuna logica sotto di esso o qualcosa non va?

D2:
Se voglio che gli upload correnti vengano spostati su R2, quali sono i comandi concisi?
Ho cercato e provato:

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

Ma sembra che quel primo comando rake funzioni solo se imposto le opzioni S3 nel file app.yml. È corretto?
Se lo faccio, R2 continuerà a funzionare?

1 Mi Piace

Ok, testato e trovato carente.
Sembra che il primo comando rake funzioni solo per AWS.

rake aborted!
Seahorse::Client::NetworkingError: Failed to open TCP connection to exotics-unlimited.s3.auto.amazonaws.com:443 (getaddrinfo: Name or service not known) (Seahorse::Client::NetworkingError)

Esiste un altro comando che fa la stessa cosa con altri fornitori S3?

1 Mi Piace

Hai fatto qualche approfondimento per vedere se possiamo ottenere R2 come soluzione completamente funzionante?

R2 funziona bene; basta non usare o impostare questa opzione: DISCOURSE_CDN_URL

Giusto, il che significa che non funziona completamente perché alcuni file statici non vengono inviati/ospitati correttamente.
Sto solo cercando di far funzionare tutto invece di far funzionare solo una parte.

1 Mi Piace

Non riesco a impedire a DC di pensare che sia AWS, mentre è CF R2, i backup non vengono caricati. Voglio usarlo solo per i file zip di backup, invece di AWS. Credo di aver compilato correttamente tutte le impostazioni e il mio token di accesso è “lettura e scrittura di oggetti” limitato a questo bucket specifico. Ho aggiunto anche la policy CORS dal thread.

[2025-09-06 13:56:44] Compressione dell'archivio in formato Gzip, potrebbe richiedere del tempo...
[2025-09-06 13:56:49] Caricamento dell'archivio in corso...
[2025-09-06 13:56:49] ECCEZIONE: Aws::S3::Errors::Forbidden
[2025-09-06 13:56:49] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/object.rb:559:in `rescue in exists?'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/object.rb:554:in `exists?'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:46:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:351:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:9:in `backup'
/var/www/discourse/script/spawn_backup_restore.rb:31:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2025-09-06 13:56:49] Eliminazione dei vecchi backup in corso...
[2025-09-06 13:56:49] Pulizia in corso...
[2025-09-06 13:56:49] Rimozione dell'archivio dallo storage locale...
[2025-09-06 13:56:49] Rimozione dei file residui '.tar'...
[2025-09-06 13:56:49] Marcatura del backup come completato...
[2025-09-06 13:56:49] Notifica a 'Firsh' della fine del backup...
[2025-09-06 13:56:54] Finito!

Sembra funzionare bene anche per me! (ricorda di impostare l’URL della CDN, altrimenti i caricamenti funzioneranno ma i recuperi no)