Configure um provedor de armazenamento de objetos compatível com S3 para uploads

Olá @mcwumbly. Foi muito fácil de encontrar quando eu podia pesquisar por “clone S3”. Não consegui encontrá-lo agora. Havia algo de errado com esse título? Existe alguma pesquisa que o encontrará? Poderíamos adicionar um (não me lembro o nome) para que ele possa vincular automaticamente algumas palavras como a instalação padrão faz (mas não consigo pensar em quais palavras usar).

3 curtidas

Como alguém que vincula esses tópicos várias vezes por semana, meio que concordo :stuck_out_tongue:

Talvez adicionar “clones s3” ao corpo do OP ajude na busca?

2 curtidas

Eu encontrei “compatível com S3” mais comum no uso geral, que é por isso que eu o alterei durante uma varredura de atualização dos títulos de documentação em geral, por exemplo: AWS S3 Compatible Object Storage | MinIO

Acho que a sugestão de colocar outros termos de pesquisa no corpo do OP faz sentido. (Acabei de adicioná-lo neste aqui).

1 curtida

Parece bom. Acho que teremos que mudar com os tempos. :person_shrugging:

Sim. Não é tão difícil assim. Você consegue, @pfaffman!

@falco:

2 curtidas

Olá, alguém conseguiu fazer o Contabo Object Storage funcionar para uploads compatíveis com S3? Parece que ao fazer upload, ele prefixa o nome do repositório na URL.

Por exemplo, se você tem um bucket chamado community, ele cria uma URL como https://community.eu2.contabostorage.com

Encontrei esse comportamento no Duplicati, por exemplo, mas ele pode excluir o prefixo do nome do bucket no domínio.

Agradeceria se alguém tivesse a solução para poder usar este Object Storage, pois ele tem preços muito bons.

Fiz vários testes para configurar o domínio como CNAME no meu domínio do Cloudflare para fornecer o SSL, mas para community.cdn.midominio.com o certificado SSL não é mais coberto porque eles usam um wildcard e se eu desativar o proxy do Cloudflare, ele reclama porque o certificado não está correto.

Saudações,

1 curtida

Você já tentou definir a configuração do S3 CDN para https://community.eu2.contabostorage.com? Na minha opinião, isso funcionará.

Não existe, é o endpoint da contabo eu2.contabostorage.com

1 curtida

Sim, mas qual será o URL final de um arquivo de exemplo em um bucket?

2 curtidas

![](upload://u6BBQfNFGrA4yuaLeqABnVkt87U.png)

Ele quer dizer que se você mesmo fizer upload de um arquivo para o bucket (usando qualquer ferramenta que consiga usar para fazer upload de um arquivo), qual URL você usaria para acessar o arquivo?

2 curtidas

https://eu2.contabostorage.com/9198f3bf2d6e43dd86fab037ebad3aee:comunidad/castopod-1.png

A estrutura é
Host: https://eu2.contabostorage.com/
Usuário: 9198f3bf2d6e43dd86fab037ebad3aee
Bucket: comunidad
Arquivo: castopod-1.png

2 curtidas

Essa não é uma URL funcional. Mas acho que poderia ser se você substituísse dois pontos por uma barra?

Essa não é a maneira como você descreveu em sua primeira postagem, então talvez agora ele possa fazer outra sugestão.

1 curtida

Então tente definir

  DISCOURSE_S3_CDN_URL: "https://eu2.contabostorage.com/9198f3bf2d6e43dd86fab037ebad3aee:comunidad"

e reconstruir.

2 curtidas

O R2 da Cloudflare está finalmente disponível publicamente (levou apenas um ano, aparentemente). (Aqui está o anúncio original: Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees)

Criei um bucket.

Criei um token https://developers.cloudflare.com/r2/data-access/s3-api/tokens que inclui: “Editar: Permitir acesso de edição a todos os objetos e operações de Listar, Gravar e Excluir de todos os buckets”

Aqui está o que tentei:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: redacted
  DISCOURSE_S3_SECRET_ACCESS_KEY: redacted
  DISCOURSE_S3_CDN_URL: https://pub-72eaa03782c542edbe00598fd1666be1.r2.dev
  DISCOURSE_S3_BUCKET: lc-testing
  DISCOURSE_S3_BACKUP_BUCKET: lc-testing/backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_ENDPOINT: https://cb46accbfcc3db1bdbba2bce07f8b509.r2.cloudflarestorage.com
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  FORCE_S3_UPLOADS: 1

Mas o upload de ativos falha com isto:

Aws::S3::Errors::NotImplemented: Header 'x-amz-acl' with value 'public-read' not implemented

E então lembrei-me de tornar o bucket público, como descrito em Public buckets · Cloudflare R2 docs

Mas ainda assim não funcionou.

S3 API compatibility · Cloudflare R2 docs mostra que x-amz-acl não é implementado.

Analisando o código do Discourse, não me parece óbvio que seja possível fazer o R2 funcionar sem alterações no núcleo.

Após desativar os uploads, os backups funcionam, então o R2 parece ser uma maneira muito barata de ter backups S3. Mas como eu tinha tornado aquele bucket público, o backup também era público (se você conseguir adivinhar o nome do arquivo), então se isso for resolvido, você vai querer buckets separados para backups e uploads.

Removi esta linha e consegui ver que ele carregou um arquivo, e consegui acessá-lo usando um domínio personalizado como s3_cdn_url. (E uma edição semelhante na tarefa rake do s3 permite que os ativos sejam carregados.)

5 curtidas

Então, acho que o adicionamos como não compatível no OP até que eles implementem ACL de nível de objeto. Obrigado por testar!

2 curtidas

Sim. As alterações necessárias no núcleo para permitir que ele pule a configuração do ACL parecem bem complicadas. Você poderia dizer que está tudo bem apenas para backups. Se você não fizer malabarismos para tornar o bucket público, tudo ficará bem.

1 curtida

O problema é o endpoint s3

1 curtida

Acabei de testar o R2, mas parece que eles não estão respeitando nossas informações de “Content-Encoding”, mesmo que a documentação deles diga que vão. Talvez em um ano seja utilizável.

3 curtidas

É necessário adicionar um aviso às seções MinIO ou geral. Precisamos incluir um aviso de que “O Discourse usa o modo DNS para caminhos em sistemas de armazenamento compatíveis com S3. Se o backend suportar apenas o modo de caminho e não o modo DNS para caminhos de bucket, ele não será compatível com o Discourse.” É por isso que o MinIO originalmente não estava na lista e foi adicionado posteriormente.

Também preciso atualizar a seção Servidor de Armazenamento MinIO - preciso que a ressalva nº 2 declare o seguinte:

  1. Você tem o Suporte a Domínio habilitado na configuração do MinIO para caminhos de bucket orientados por domínio. Isso é obrigatório, pois o Discourse não suporta caminhos de bucket orientados por caminho não orientados por domínio com mecanismos de armazenamento S3.

EDIT: Parece que com esta postagem obtive o status de Membro (nível de confiança 2), então pude editar a postagem da wiki agora. Nenhuma ação é necessária dos moderadores, mesmo que eu tenha pedido a eles para fazer as edições.

4 curtidas

Incrível! Obrigado pela sua ajuda em manter as coisas atualizadas. Isso parece o tipo de aviso que eu ficaria feliz em ter.

:clinking_glasses: :palms_up_together:

2 curtidas