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

Essa linha não está indentada corretamente. Ela deve ter 2 espaços exatamente como after_code

Isso é um problema? porque algumas configurações começam sem espaços. e quando eu compilo, ele não dá nenhum erro. Exemplo:

Tudo isso parece bom. Como é a parte after_assets_precompile sobre a qual perguntei?

Você precisa inserir dois espaços antes de “after_assets_precompile”.

2 curtidas

Farei isso e avisarei. Muito obrigado pelo seu tempo <3

1 curtida

Ao aplicar isso, ocorre o seguinte erro e o site não carrega, não sendo possível acessá-lo:

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.

Executei o ./discourse-doctor, depois recompiliei e obtive o mesmo erro.

Ao entrar no contêiner e executar os seguintes códigos, recebo um erro:

rake uploads:migrate_to_s3

Erro:

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

Algumas questões semelhantes não resolvidas:

Algum dos outros tópicos que você mencionou por acaso tem instruções para finalizar os uploads manualmente?

Essa é apenas a camada final de falha, os erros reais disso estariam mais acima, como mencionado:

1 curtida

Não, eu não vi. No entanto, deve haver uma razão pela qual ele não o adiciona após a compilação e devemos ser capazes de ver esse erro. Talvez eu possa dar uma olhada se está declarado como ver isso.

Queria tentar novamente. Adicionei as conexões S3 necessárias ao app.yml e as recompilhei. desta vez, removi after_assets_precompile. Todas as URLs mudaram para cdn e os arquivos de estilo não foram carregados. Quando entro manualmente no container e tento: rake s3:upload_assets, recebo o seguinte erro.

Tentando aplicar o conjunto de regras CORS ASSETS no bucket cloudflarebucketname.
rake abortou!
Aws::S3::Errors::AccessDenied: Acesso negado (Aws::S3::Errors::AccessDenied)

Se eu tentar isto: rake uploads:migrate_to_s3 --trace

O erro que recebi:


Migrando uploads para S3 para 'default'...
Alguns uploads não foram migrados para o novo esquema. Executando a migração, isso pode levar algum tempo...
rake abortou!
FileStore::ToS3MigrationError: Alguns uploads não puderam ser migrados para o novo esquema. Você precisa corrigir isso manualmente. (FileStore::ToS3MigrationError)

Todas as mensagens de erro para “rake s3:upload_assets”:

root@domain-app:/var/www/discourse# rake s3:upload_assets --trace
O nome do plugin é 'DiscourseMatheditor', mas o diretório do plugin é nomeado 'discourse-matheditor'
O nome do plugin é 'discourse-post-voting', mas o diretório do plugin é nomeado 'discourse-question-answer'
O nome do plugin é 'discourse-topic-voting', mas o diretório do plugin é nomeado 'discourse-voting'
** Invocar s3:upload_assets (primeira vez)
** Invocar environment (primeira vez)
** Executar environment
** Invocar s3:ensure_cors_rules (primeira vez)
** Invocar environment
** Executar s3:ensure_cors_rules
Instalando regras CORS...
Tentando aplicar o conjunto de regras CORS ASSETS no bucket cloudflarebucketname.
rake abortou!
Aws::S3::Errors::AccessDenied: Acesso negado (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>'
Tarefas: TOP => s3:upload_assets => s3:ensure_cors_rules

É difícil sair desta situação.

Algo me diz que os códigos S3 são executados somente após a compilação e suportam apenas o Amazon S3. O que você acha?

Funciona para mim. Acho que há uma configuração para ignorar as regras do CORS. Você pode consultar Configurar um provedor de armazenamento de objetos compatível com S3 para uploads para ver o que é.

isso?: DISCOURSE_S3_INSTALL_CORS_RULE: false

Isso funcionou muito bem, mas há um problema. Os arquivos theme-javascripts não são enviados para o S3. Naturalmente, o design do site é danificado. Apenas a pasta de assets é carregada. O que podemos fazer para enviar outros arquivos de design?

Esta é a última vez que lhe direi que você incluiu a parte que chama a tarefa rake para fazer upload para o s3.

Boa sorte.

1 curtida

O que estou perdendo? O código abaixo está anexado e, quando o reconstruo, ele carrega os arquivos de assets, mas não os arquivos de tema.


Quando executo isso entrando no container: rake uploads:migrate_to_s3, recebo o seguinte erro:

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)

Meu arquivo app.yml é o seguinte. Desativei esta configuração porque ela não carregava os temas-javascripts e folhas de estilo: DISCOURSE_CDN_URL.

Tentarei abri-lo novamente à meia-noite e compilá-lo, mas não sei o que perdi. Procurei para ver o que mais você poderia querer dizer com isso, mas não encontrei nada diferente: “a tarefa rake para fazer upload para 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

Desculpe por ter desperdiçado seu tempo, mas seria bom se a documentação do usuário incluísse esses problemas. Agora sabemos que r2 funciona. Basta adicionar as duas configurações a seguir:


DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_INSTALL_CORS_RULE: false

Podemos mover as pastas de imagens e assets do site para a área S3. Há apenas o problema de que os arquivos de tema e os arquivos de estilo não são transferidos e tentarei novamente à meia-noite. Espero ter sucesso e marcarei este problema como resolvido, é claro, após explicar a solução.

Nota: O servidor Postgresql é separado, não uso o do localhost. Acho que não há problema com isso.
Obrigado a todos que dedicaram tempo.

Esse é o comando a ser executado para fazer o upload dos ativos. Minha suposição é que você ainda tem algo errado que está impedindo o upload dos ativos do grin.

1 curtida

Bom, se não estou fazendo nada de errado, então preciso encontrar o problema. Quando entro no container e executo o código “rake s3:upload_assets”, tudo parece bem. Mesmo se eu ativar ou desativar esta configuração, ela não carrega os arquivos de estilo (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
....
....
....

Como eu disse, se não estou fazendo algo errado, tento encontrar o erro e como corrigi-lo. Se houver alguma melhoria, adicionarei aqui, obrigado.

Olá a todos,

Queria compartilhar minha experiência e os passos sobre como configurei com sucesso o Cloudflare R2 para uploads e backups no meu fórum Discourse. Espero que isso ajude outras pessoas que procuram usar o Cloudflare R2 com o Discourse.

Visão Geral da Configuração:

  • Plataforma: Discourse (instalação Bitnami)
  • Bucket: Cloudflare R2
  • Domínio Personalizado: Configurado para servir arquivos publicamente
  • Configuração: Feita inteiramente através das configurações do site do Discourse (nenhuma variável de ambiente foi tocada)

Guia Passo a Passo:

  1. Criar um Bucket Cloudflare R2:
    • Faça login na sua conta Cloudflare e navegue até o armazenamento R2.
    • Crie um novo bucket para seus uploads do Discourse (por exemplo, forum-uploads).
    • Anote a URL da API S3 do Bucket, o ID da Chave de Acesso e a Chave de Acesso Secreta.
  2. Configurar Domínio Personalizado para CDN:
    • Para servir o conteúdo do seu bucket R2 publicamente, crie um domínio personalizado no Cloudflare.
    • Por exemplo, usei forumfiles.example.in.
    • Certifique-se de configurar as configurações de DNS para apontar para o CNAME fornecido pelo Cloudflare. Como tenho um domínio no Cloudflare, ele fez isso por mim.
  3. Configurar Configurações do Site do Discourse:
    • s3_bucket: O nome do seu bucket R2 (por exemplo, forum-uploads).
    • s3_region: Defina como Leste dos EUA (Norte da Virgínia). Não havia opção de automático.
    • s3_endpoint: Use a URL da API S3 do Bucket fornecida pelo Cloudflare (por exemplo, https://\u003cseu-id-unico-do-bucket\u003e.r2.cloudflarestorage.com).
    • s3_access_key_id: Seu ID da Chave de Acesso do R2.
    • s3_secret_access_key: Sua Chave de Acesso Secreta do R2.
    • s3_cdn_url: Seu domínio personalizado para CDN (por exemplo, https://forumfiles.example.in).
    • Certifique-se de que habilitar backups s3 e habilitar uploads s3 estejam marcados.
  4. Ajustar Permissões e CORS:
    • Defina seu bucket R2 como privado e configure uma política CORS:
[
  {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "POST", "PUT", "HEAD"],
      "AllowedOrigins": ["*"],
      "ExposeHeaders": ["ETag"],
      "MaxAgeSeconds": 3000
  }
]
*   Isso garante que os uploads funcionem corretamente sem problemas de CORS.
  1. Testar a Configuração:
    • Faça o upload de um arquivo ou imagem de teste através do seu fórum Discourse para verificar se os uploads estão funcionando corretamente.
    • Verifique se os arquivos estão acessíveis através do seu domínio personalizado (por exemplo, https://forumfiles.example.in/original/1X/...).
    • Verifique os backups, consegui executar backups com sucesso. Verifiquei no bucket R2 e ele também está listado nas configurações do site.

Conclusão:

Seguindo estes passos, consegui integrar o Cloudflare R2 com o Discourse de forma transparente, lidando com uploads e backups de forma eficiente. Se você tiver alguma dúvida ou encontrar problemas, sinta-se à vontade para perguntar!

6 curtidas

Você testou se o Discourse pode baixar arquivos do Cloudflare R2? por exemplo, para incluir uploads do S3 em um backup completo da instância.

Não parece funcionar porque o Cloudflare está faltando algo na API S3 do R2, e o migrate_to_s3 também não funciona.

1 curtida