Erros ao tentar usar armazenamento S3 personalizado

Como estou constantemente frustrado com a quebra do plugin Azure Blob Storage, executei um servidor Flexify.IO para traduzir o protocolo Azure para o S3.

No entanto, após configurá-lo no Discourse, não funciona. O erro é:

Falha ao abrir conexão TCP para support.xxx.xxx.xxx.xxx:443 (getaddrinfo: Nome ou serviço desconhecido)

onde xx.xx.xx.xx é o endereço IP do gateway S3 e support é o nome do bucket…

O engraçado é que… usei o S3 Browser para testar o endpoint e funcionou perfeitamente.

Então, alguém gentil pode me dizer o que fiz de errado?

Só consigo ver que isso pode ser devido à região, já que a região exposta pelo endpoint é eastasia (uma região Azure válida), mas só posso escolher entre as regiões padrão da AWS em uma lista. No entanto, ainda é estranho, porque o erro parece indicar falha na conexão com o próprio endpoint, e não uma incompatibilidade de região.

Tenho a sensação de que minha configuração para s3_bucket está errada, já que ela está anexando o nome do bucket à própria URL do endpoint.

Devo usar o formato bucket/pasta? O que devo colocar em cada um?

EDIT: Pelo código-fonte, parece estar hardcoded. E se meu provedor de armazenamento não usar o nome do bucket como prefixo?

Você deve tentar seguir a documentação sobre Usando Armazenamento de Objetos para Uploads (S3 e Clones) para o seu caso de uso. É muito mais flexível. Quando você conseguir fazê-lo funcionar, pode adicioná-lo à wiki também!

2 curtidas

Dado isso:

Então isso está definitivamente errado:

A mensagem de erro diz exatamente isso. getaddrinfo: Name or service not known é uma falha na consulta DNS; nunca haverá um nome de host como “support.303.303.303.303”.

De onde você tirou a parte “support”?

A documentação do Flexify diz:

Altere o endpoint S3 que sua aplicação usa para s3.flexify.io (ou outro nome de host mostrado nas configurações).

Portanto, você não pode usar o console de administração para alterá-lo. Em vez disso, leia o tópico que @falco menciona :arrow_double_up: e comece com:

  DISCOURSE_S3_ENDPOINT: https://s3.flexify.io
2 curtidas

Ah, desculpe. support é o nome do bucket. Posso ver que o S3 simplesmente adiciona o nome do bucket como prefixo ao nome de domínio, e o Discourse assume isso.

Sim, eu percebi isso. Então preciso codificar os endpoints diretamente no app.yaml, correto?

@Falco @schleifer Tudo bem, tentei, mas, infelizmente, ainda estou recebendo exatamente o mesmo erro.

Portanto, acho que não funciona mesmo quando está hard-coded no app.yaml. Eles parecem ir para o mesmo fluxo de código.

Esta é a minha configuração do app.yaml:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: eastasia
  DISCOURSE_S3_ENDPOINT: https://??.??.??.??
  DISCOURSE_S3_ACCESS_KEY_ID: ???
  DISCOURSE_S3_SECRET_ACCESS_KEY: ???
  DISCOURSE_S3_BUCKET: support

Ele ainda está tentando acessar support.??.??.??.??:443.

Então, imagino que no Discourse o bucket deve formar um subdomínio?

EDIÇÃO 1

Tudo bem, removi as configurações do app.yaml e criei um subdomínio com support nele que aponta para xx.xx.xx.xx. Agora, quando faço o upload, ele gira por um longo tempo e depois retorna um erro genérico:

Aws::S3::Errors::BadRequest

Existe alguma maneira de obter a mensagem de erro exata?

Você já tentou verificar a página /logs?

Sim, mas não há nada lá…

Qual é o valor exato que você está usando para a variável de ambiente do endpoint?

OK, encontrei uma configuração no Flexify.IO para definir o modo de subdomínio. Agora está funcionando. :champagne:

Vou atualizar a wiki!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.