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

Ainda não há desenvolvimento no Cloudflare R2? Pareceu bom para mim..

Você leu a nota sobre isso acima? É incompatível com arquivos gzip, e não havia indicação de que houvesse um plano para mudá-los. Talvez funcione com tudo, exceto uploads?

Você tentou? Funcionou?

1 curtida

Sim, eu li, mas foi há 2 anos e algumas coisas podem ter mudado.

Eu queria tentar hoje, ativei o R2 e adicionei o site. Só não tenho certeza de como configurar isso na etapa do discourse. Porque ainda não consegui encontrar onde obter as chaves ou códigos secretos do Cloudflare. Estou experimentando, talvez um pequeno detalhe possa me ajudar :slight_smile:

3 curtidas

O mesmo :thinking: meu bucket está ativo, mas talvez o discourse ainda não tenha suporte, mas espero por isso.

1 curtida

Esta página descreve como obter as chaves: Authentication · Cloudflare R2 docs

2 curtidas

Tentei de tudo, mas sempre recebo este erro:

Aws::S3::Errors::BadRequest

Será que estou esquecendo de algo?

Quando faço upload de uma imagem do painel R2, essa imagem abre com a URL especial do cdn. O problema é que a imagem não pode ser carregada no site. Criei o cors e abri todos os métodos.

[
  {
    "AllowedOrigins": [
      "https://SITENAME.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "HEAD",
      "DELETE",
      "PUT"
    ]
  }
]

Alguma ideia?

1 curtida

Isso é possível, mas a palavra da Cloudflare há 2 anos era que não era provável que mudasse, então alguém que está realmente animado com o R2 precisará descobrir. Dito isso, parece possível que funcione para tudo exceto arquivos gz, o que acho que significa apenas backups.

Mas não ter backups s3 parece muito a perder.

Isso soa como se você não tivesse a chave certa ou o endpoint certo.

2 curtidas

Francamente, estou atualmente usando o Cloudflare no meu site Discourse e é geralmente bom ter tudo em um só lugar. Portanto, lidar com a Amazon pode ser um pouco cansativo quando você tem o R2. Tentei instalar o Amazon S3 por um tempo e, por algum motivo, não consegui carregar os arquivos de estilo. (ok, vou tentar novamente), mas seria bom não ignorar o Cloudflare, tanto mais quando se usa o fórum de suporte do Cloudflare Discourse :slight_smile:

1 curtida

Isso geralmente acontece quando você não adiciona a estrofe que envia os assets para o s3 (você também precisaria dela para fazer qualquer serviço semelhante ao s3 funcionar se você definisse a variável use_s3).

2 curtidas

Então você tentou outra coisa e fez funcionar? O que você fez? Você pode escrever isso como os outros em Configure um provedor de armazenamento de objetos compatível com S3 para uploads?

Funciona para backups?

Tentei tudo o que pude. Tentei fazer isso experimentalmente alterando as configurações. Mas toda vez eu recebo este erro e, quando olho para ele, parece que a imagem não foi carregada.

Também não consegui ver nada nos códigos de erro. Seria bom se eu pudesse fazê-lo funcionar, ter a maior parte de tudo em um painel (cloudflare) seria empolgante e eficaz.

Tentei para backup, desculpe. Quando falhei, voltei para a Amazon. Ficaria muito feliz se houvesse alguém mais bem-sucedido do que eu a esse respeito :slight_smile:

Fiz o upload de uma imagem do painel R2 e posso acessá-la. No entanto, não consigo fazer o upload de uma imagem pelo discourse, ele dá o erro acima.

Então, talvez não funcione como a documentação diz que não funciona.

1 curtida

Ou talvez eu lhe deva um pedido de desculpas. Eu pareço ter feito funcionar, embora não tenha tempo para prometer que posso escrever instruções que permitam que você faça funcionar.

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
  DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
  DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
  DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
  DISCOURSE_CDN_URL: '=CDN_URL='
  DISCOURSE_S3_BUCKET: '=BUCKET='
  DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

Não se esqueça da estrofe que executa a tarefa rake para enviar uploads para o S3.

Tente isso e veja se funciona para você. Um teste rápido mostra que funciona para uploads, ativos e backups. Então, acho que o problema com os arquivos gzip não se aplica mais.

4 curtidas

Após corrigir a região (auto) e a última url, funcionou. No entanto, há um problema. Ao recriar, os arquivos de estilo não são carregados e, naturalmente, o site não abre. Contudo, ao abrir apenas para upload, consigo fazer upload de imagens do site e podemos acessá-las pela url do cdn. O único problema é que quero que os arquivos de estilo sejam servidos pelo CDN. Como podemos fazer isso? Acho que este é o nosso único problema.

Você precisa seguir as instruções para enviar os assets para o S3:

O que você usou para CDN? Se foi cloudflare, como você o configurou?

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Eu adicionei isso. Quando eu recompilo, todos os links no site mudam com a URL do cdn. No entanto, esses arquivos de estilo não são carregados no cloudflare. Então eu apenas adicionei a configuração da região de upload ao arquivo app.yml e compilei dessa forma. Quando eu ativo o S3 do admin, as imagens recém-carregadas são carregadas no cloudflare R2 e o acesso é fornecido.

O único problema é que quando eu adiciono as configurações do S3 antes de compilar o arquivo app.yml, os arquivos de estilo recém-criados não parecem ser carregados. Mas as URLs e as URLs do cdn mudam no site.

CORS:

[
  {
    "AllowedOrigins": [
      "https://domain.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "PUT",
      "HEAD",
      "DELETE"
    ]
  }
]

Este problema pode ter algo a ver com o Argo? No entanto, as imagens estão carregando sem problemas no momento.

Para depurar, você pode entrar no contêiner e tentar executar as tarefas do rake lá e ver o que acontece.

Passei cerca de 4 horas nisso ontem, então receio que meu suporte gratuito neste projeto esteja acabando.

Não sei sobre as coisas de CORS. Eu permitiria tudo de qualquer lugar para ter certeza de que não é esse o problema. Eu não fiz nada com CORS no meu site de teste.

Você está executando isso no k8s?

1 curtida

Desculpe tomar seu tempo. Se eu pudesse ajudar financeiramente, eu ajudaria. Respeito seu tempo.

Eu não sei o que é k8s. Estou trabalhando no meu próprio servidor e ativei o Argo. O R2 também está ativo. Tudo está funcionando muito bem agora, apenas após a nova compilação ele não carrega os arquivos de estilo (js, css etc.) no R2. Executarei os testes necessários mais tarde e os adicionarei aqui. Se eu for bem-sucedido, explicarei em detalhes como encontrar o problema ou fazê-lo funcionar.

1 curtida

O que é Argo?

Se esta for uma instalação padrão, você pode executar o comando rake dentro do contêiner

./launcher enter app
rake ...

Você tem certeza de que está incluindo a parte USE_S3? (Eu acho que sim, pois acho que é isso que faz com que os ativos sejam esperados na CDN)

Argo: Overview · Cloudflare Argo Smart Routing docs

Adicionei a configuração USE_S3 antes de compilar, exemplo abaixo:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
  DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_S3_BUCKET: 'cloudflaredomain'
  DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

Após recompilar, todas as URLs mudam como esperado. URL do CDN. O único problema é que esses ativos não são carregados no R2. Eu já havia adicionado esta configuração:

  after_code:
     - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Aqui está o início do app.yml:

templates:
  #- "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Descomente a linha a seguir para habilitar o ouvinte IPv6
  #- "templates/web.ipv6.template.yml"
  #- "templates/web.ratelimited.template.yml"
  ## Descomente estas duas linhas se desejar adicionar o Lets Encrypt (https)
  # - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

## quais portas TCP/IP este contêiner deve expor?
## Se você deseja que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
## veja https://meta.discourse.org/t/17247 para detalhes
expose:
  - "80:80"   # http
  - "443:443" # https

Agora tentarei entrar no contêiner e fazer o upload dos ativos para o S3.