Consulta sobre o suporte do Discourse para armazenamento Amazon S3

Gostaria de perguntar sobre um problema técnico em relação ao suporte do Discourse para armazenamento Amazon S3.

Encontrei uma postagem em um fórum de 2013 que já discutia o suporte do Discourse para S3. Também encontrei alguns tópicos relacionados ao descarregamento de CDN, mas não parece haver muita informação detalhada sobre este tópico.

Eu mesmo construí um fórum Discourse e tenho sido muito persistente em habilitar uploads de vídeo. Tive muitas ideias, mas como não sou programador, tem sido difícil colocá-las em prática — sempre preciso da ajuda de outros para progredir aos poucos.

O próprio Discourse suporta pequenos uploads de vídeo, e eu já habilitei esse recurso. No entanto, a arquitetura do Discourse não é realmente adequada para lidar com uploads de vídeo de forma eficiente. Após muita pesquisa, descobri que é possível usar o armazenamento Amazon S3 em conjunto com o descarregamento de CDN, ou, alternativamente, armazenamento S3 com uma configuração de cache proxy.

De fato, já pedi a um amigo para me ajudar a configurar o armazenamento S3 e o cache proxy. (Para esclarecer, não considerei usar uma CDN devido a preocupações com custos — o serviço de CDN da Amazon S3 pode ser bastante caro.)

Agora estou enfrentando um problema: durante os testes, mesmo que o armazenamento S3 tenha sido configurado corretamente, e teoricamente todos os uploads do fórum devam ir diretamente para o S3, os arquivos de vídeo ainda não podem ser enviados para o armazenamento S3.

Alguém poderia explicar o que pode estar mal configurado ou o que pode estar causando esse problema?

Obrigado

O que acontece em vez disso? Você recebe uma mensagem de erro?

Você também pode querer verificar as configurações “tamanho máximo de anexo kb” e “extensões autorizadas”, ambas em Configurações do Site - Arquivos.

Observe que, mesmo com CDN e S3, essa configuração ainda não é muito adequada para vídeos, pois não há transcodificação para oferecer o melhor ajuste para a largura de banda e resolução dos clientes.

3 curtidas


Muito obrigado pela sua resposta. Eis a situação:
No momento, as imagens do meu fórum podem ser carregadas com sucesso para o S3, mas os vídeos não. É realmente confuso para mim.

Embora eu entenda que o S3 ainda pode não ser ideal para lidar com vídeos, o conteúdo principal do fórum é texto e imagens. O recurso de vídeo serve apenas para atender às necessidades de alguns usuários, e os próprios vídeos não serão muito grandes. Muito obrigado pelo lembrete.

Você esqueceu de responder à minha pergunta :slight_smile:

3 curtidas

A CDN da Amazon é mais barata do que a saída de buckets S3. Você definitivamente quer uma CDN na frente do seu bucket S3.

Suspeito que o erro sobre o qual você não nos contou tem a ver com vídeos muito grandes. Existem configurações para mudar isso, mas pode ser melhor habilitar Enable direct S3 uploads (Habilitar uploads diretos para S3).

3 curtidas


Ao tentar carregar um vídeo para o meu fórum, agora aparece diretamente a mensagem:

“Desculpe, esse arquivo é muito grande (tamanho máximo é 50 MB). Por que não carregar seu arquivo grande para um serviço de compartilhamento em nuvem e, em seguida, colar o link?”

No entanto, meu vídeo tem apenas 10 MB. Atualmente, estou usando armazenamento S3 com CloudFront CDN para entrega.

Acho a solução de problemas muito difícil. Você poderia fornecer o procedimento correto assumindo que nenhuma operação prévia foi realizada? Pedirei ao meu amigo para seguir os passos corretos e tentar novamente.

Olá, obrigado pela sua resposta.

Já pedi ao meu amigo para mudar do método de armazenamento S+ com cache proxy para o método de armazenamento S3 + entrega CDN CloudFront. No entanto, parece que falhou e ainda não sei o motivo. Então, eu estava me perguntando se você poderia fornecer os comandos de execução exatos para que meu amigo possa tentar novamente.

Além disso, sou muito persistente em ter funcionalidade de vídeo no meu fórum para a conveniência dos meus usuários. Então, tive uma nova ideia e gostaria de saber se ela é viável — realmente espero ter sua opinião.

Primeiro, devo explicar que não tenho absolutamente nenhum conhecimento de codificação ou programação. Minha especialização universitária foi em japonês, então, além de aprender a língua japonesa, eu realmente não tenho nenhum entendimento de código. Se algumas das minhas ideias parecerem ingênuas à primeira vista, por favor, me perdoe.

Graças ao servidor que aluguei para o meu fórum ter sido desativado, tive que investir esforço na reconstrução dele, o que me permitiu aprender os pontos-chave do armazenamento S3 e da CDN CloudFront. Em seguida, apliquei esse conhecimento e me perguntei se existem outros provedores de serviços de armazenamento e CDN. Consultei o ChatGPT e fiquei feliz em obter as respostas que queria.

Na verdade, eu sempre quis construir um site de vídeos, mas desisti rapidamente por causa dos custos de disco rígido. Agora que conheço a nova solução, reacendi a ideia de construir um site de vídeos para suportar os vídeos do fórum Discourse.

Com base na recomendação do GPT, aprendi que posso usar PeerTube ou MediaCMS para o sistema do site de vídeos — ambos são excelentes.

Atualmente, tenho dois pontos de dúvida:

Primeiro ponto: Ambos os sistemas de sites de vídeos podem suportar o armazenamento Backblaze B2 com entrega CDN Cloudflare. Como os vídeos não são armazenados no meu próprio disco rígido, a reprodução do site de vídeos já chama a API do Backblaze B2. O que eu quero é que o fórum seja conectado ao site de vídeos, não postando links, mas usando o botão de upload do fórum para chamar diretamente meu site de vídeos MediaCMS (por exemplo) como fonte. Isso significaria duas chamadas de API:

  1. O fórum chama o site de vídeos MediaCMS.
  2. O site de vídeos MediaCMS chama o armazenamento Backblaze B2.

Gostaria de saber se chamadas de API repetidas como essa são tecnicamente viáveis.

Segundo ponto: Se o sistema do fórum e o sistema do site de vídeos podem compartilhar o sistema de contas de usuário, para que os usuários possam usar a mesma conta. Isso afeta como as chamadas de API funcionariam.

  • Opção 1: Como administrador do site de vídeos, registro uma conta de administrador vinculada ao fórum. Quando o fórum carrega um vídeo via API, tecnicamente é o administrador que o carrega para o site MediaCMS.
  • Opção 2: Com um sistema de contas de usuário compartilhado, o upload do vídeo é realizado pela conta do próprio usuário no fórum e, via API, é sincronizado para o site MediaCMS. Então o usuário pode ver o vídeo carregado em sua própria conta no site de vídeos.

Consultei o GPT sobre essas abordagens e o GPT geralmente deu feedback positivo. No entanto, infelizmente, em uso repetido, descobri que o GPT pode fornecer orientação e ajuda com decisões de alto nível, mas para respostas detalhadas, às vezes pode ser impreciso. Como não tenho conhecimento de codificação, não tenho certeza se essas ideias são realmente viáveis.

Se possível, ficaria muito grato se você pudesse apontar quais partes dessas ideias são viáveis e quais podem não ser.

Eles provavelmente deveriam participar deste tópico, então. Eles seguiram Configurar um provedor de armazenamento de objetos compatível com S3 para uploads e colocaram as configurações no arquivo ymll e adicionaram a parte que envia os ativos para o S3?

Talvez o navegador, de alguma forma, não esteja comunicando o tamanho apropriadamente.

Você tentou isso?


Olá. Na verdade, a situação é a seguinte:
Vídeos com menos de 10 MB podem ser carregados no meu próprio servidor, mas os arquivos de vídeo em si não podem ser carregados no S3.
Ao carregar um vídeo, o sistema captura automaticamente o primeiro quadro como miniatura, e a imagem em miniatura pode ser carregada no S3.

No entanto, para vídeos com mais de 10 MB, nada pode ser carregado.

Se seu amigo tivesse seguido Configurar um provedor de armazenamento de objetos compatível com S3 para uploads, você não veria enable_s3_uploads. Não está claro se definir essas configurações no banco de dados em vez de em ENV faz parte do problema.

Isso não é o mesmo que Habilitar uploads diretos do S3. Isso é "Habilitar uploads diretos do S3".

Você também precisa alterar Tamanho máximo da imagem KB e Tamanho máximo do anexo KB.

Mas eu alterei meu upload máximo para 100MB e tentei fazer upload de um arquivo de 37MB e recebi o erro "arquivo muito grande", então você pode estar certo de que há um bug. Não atualizei o site onde testei por um tempo.

1 curtida

Você o alterou em app.yml também?

Muito obrigado por toda a sua ajuda.
Ele disse que seguiu as instruções em Configure an S3 compatible object storage provider for uploads, mas não funcionou.
No entanto, agora há pouco, depois que ele fez o mesmo que você sugeriu e alterou o tamanho máximo do arquivo de upload para 100 MB, o vídeo foi carregado com sucesso para o armazenamento S3.
Muito obrigado!

Então ele fez errado e deveria ter pedido ajuda. Provavelmente ele omitiu a parte que faz o upload de ativos para o S3.

Legal! Existe um tópico em algum lugar sobre como aumentar esse limite de 100MB também.

1 curtida