Cloudflare R2: Navegando na Configuração e Lidando com Erros de Configuração

Consigo baixar backups, nunca tive problemas com isso.

Com uploads do S3 incluídos?

Muito útil, só que quando faço upload, copiar a imagem da área de transferência não funciona, você enfrenta esse problema? No final, foi feito o upload para o R2, mas não ficou visível na postagem:

Você olhou para o URL da imagem, como ele se parece?

Então, ainda não podemos configurar o r2 através do app.yml? Apenas através da configuração do site, que é DB_S3_CONFIG?

Use este método, você pode fazer upload dos uploads locais antigos para o R2, via rake uploads:migrate_to_s3?

Ei, obrigado a todos por isso.

Se entendi corretamente, “DISCOURSE_CDN_URL” pode ser o mesmo que “DISCOURSE_S3_CDN_URL”, que é o domínio público personalizado vinculado ao bucket no Cloudflare? Ou alguma outra configuração é necessária para isso?

Sim, você deve adicionar o mesmo nome de domínio ao discourse container.yml. Aqui está um exemplo de uso:

  ## O endereço HTTP ou HTTPS da CDN para esta instância do Discourse (configurado para puxar)
  ## Veja https://meta.discourse.org/t/14857 para detalhes
  #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

As configurações desativadas com este caractere devem ser configuradas através do painel de administração; exemplos são fornecidos no código. Se preferir, você também pode habilitar essas configurações dentro da seção de configuração, fica a seu critério.

1 curtida

Esta opção quebrará o site quando definida em app.yml, pois nem todos os arquivos estáticos, como JavaScript, são hospedados no R2 por algum motivo.

1 curtida

Isto é ótimo. Acabei de seguir o guia na postagem nº 39 e tudo funcionou. Tenho apenas uma sugestão e 2 perguntas.

Sugestão:
Pelo que li, você deve tornar os arquivos do CDN publicamente disponíveis e o bucket de backup privado. Então, criei 2 buckets e deixei o de backup privado, enquanto tornava o bucket de arquivos público com um domínio personalizado. Isso apenas significou que tive que colocar 2 caminhos diferentes nas 2 caixas em admin.
Eu vi muitas pessoas colocando seus backups como um caminho de seu bucket de nível superior, estou pensando incorretamente sobre isso? Ou isso é apenas uma peculiaridade do CF R2?

P1:
Adicionei o ‘DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true’ no meu app.yml e reconstruí, mas quando vou para backups e clico no botão de backup, ainda recebo o pop-up dizendo que os uploads não serão incluídos. Isso é apenas porque o pop-up não tem nenhuma lógica por baixo ou algo está errado?

P2:
Se eu quiser que os uploads atuais sejam movidos para o R2, quais são os comandos concisos?
Eu procurei e tentei:

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

Mas parece que o primeiro comando rake só funciona se eu definir as opções do S3 no arquivo app.yml. Isso está correto?
Se eu fizer isso, o R2 continuará funcionando?

1 curtida

Ok, testado e considerado insuficiente.
Parece que o primeiro comando rake só funciona para a 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)

Existe outro comando que faz a mesma coisa com outros fornecedores de S3?

1 curtida

Você fez algum acompanhamento para ver se podemos obter o R2 como uma solução totalmente funcional?

R2 funciona bem; apenas não use ou defina esta opção: DISCOURSE_CDN_URL

Certo, o que significa que não está funcionando totalmente porque alguns arquivos estáticos não estão sendo enviados/hospedados corretamente.
Estou apenas procurando fazer tudo funcionar em vez de apenas parte dele funcionar.

1 curtida

Não consigo impedir que o DC pense que é a AWS, quando na verdade é o CF R2, os backups simplesmente não são enviados. Só quero usá-lo para zips de backup, em vez da AWS. Acredito que preenchi corretamente todas as configurações e meu token de acesso tem escopo de “leitura e gravação de objetos” para este bucket específico. Adicionei também a política cors da thread.

[2025-09-06 13:56:44] Compactando o arquivo, isso pode levar algum tempo...
[2025-09-06 13:56:49] Enviando o arquivo...
[2025-09-06 13:56:49] EXCEPTION: 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] Excluindo backups antigos...
[2025-09-06 13:56:49] Limpando coisas...
[2025-09-06 13:56:49] Removendo o arquivo do armazenamento local...
[2025-09-06 13:56:49] Removendo sobras de '.tar'...
[2025-09-06 13:56:49] Marcando o backup como concluído...
[2025-09-06 13:56:49] Notificando 'Firsh' sobre o fim do backup...
[2025-09-06 13:56:54] Concluído!

Isso também parece estar funcionando bem para mim! (lembre-se de definir a URL do cdn, caso contrário, os uploads funcionarão, mas os downloads não)