Como usar o servidor de armazenamento MinIO executado por você para sua instância do Discourse

Utilizando o servidor MinIO para armazenamento de objetos compatível com S3

O MinIO é uma solução de servidor de armazenamento de objetos compatível com S3, nativa da nuvem por padrão, mas fácil de implantar em servidores locais, VPS ou servidores em nuvem para uso como alternativa ao Amazon AWS S3 ou a outros sistemas, sendo compatível com o Discourse quando configurado corretamente.

Esta seção pressupõe que o seguinte seja verdadeiro no seu ambiente:

  1. Você possui uma instância de servidor MinIO totalmente configurada
  2. O suporte a domínios está habilitado na configuração do MinIO
  3. A configuração de DNS está corretamente definida para o MinIO, de modo que os subdomínios dos buckets sejam resolvidos corretamente para o servidor MinIO
  4. O bucket discourse-data existe no servidor MinIO e possui uma política “pública” definida
  5. O bucket discourse-backups existe no servidor MinIO e é um bucket privado para uploads (não acessível publicamente — política padrão para novos buckets)
  6. Sua URL de CDN S3 é uma CDN corretamente configurada apontando para o bucket e armazenando em cache as requisições, conforme mencionado anteriormente neste documento.

Se você atender a todos os requisitos acima, estará pronto para começar.

Um exemplo de configuração seria assim:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3

Isso fornecerá uma configuração básica do MinIO com um servidor MinIO no lugar do Amazon S3.

4 curtidas

É ótimo saber que o MinIO agora funciona bem com buckets no estilo de subdomínio e é novamente compatível com o Discourse.

Você pode editar a wiki Usando Armazenamento de Objetos para Uploads (S3 & Clones) para incluir instruções do MinIO?

3 curtidas

Já funcionou com buckets tanto no estilo de subdomínio quanto no de caminho por um tempo. No entanto, o componente de configuração de DNS é o mais problemático — ele precisa de regras especiais de DNS com curinga para funcionar, ou de um servidor DNS personalizado que esteja ativamente ciente de todos os buckets reais ou não. Fiz isso no bind9 com zonas de curinga, mas ao tentar fazer o mesmo no Cloudflare ou em outros provedores, os recursos do estilo de subdomínio falham estrepitosamente.

Se você achar que o texto acima é adequado para aquela seção, ficarei feliz em incluí-lo. Mas ele incluirá a seção de ‘ressalvas’ — e eu apreciaria qualquer sugestão ou revisão que você queira que eu faça primeiro quanto à redação, etc. (E note que não incluí uma URL de CDN, pois não tenho uma CDN em minha implantação, porque $$$ não é algo com que eu possa experimentar).

3 curtidas

Usuários que executam o MinIO apenas para o Discourse também podem criar manualmente as entradas de DNS para os 2 buckets do Discourse, certo?

A ressalva neste tópico deve ser suficiente. A configuração do MinIO está completamente fora do escopo deste fórum, mas, dado um MinIO funcional, fazer o Discourse utilizá-lo é um caso de uso válido.

2 curtidas

Correto, mas como você mesmo disse, a configuração está fora do escopo, então vou apenas afirmar que os caminhos dos subdomínios dos buckets precisam ser resolvidos (e deixarei a configuração de DNS para os ${ADMINS} da instância).

2 curtidas

Sim, e editei a wiki de acordo. No entanto, o MinIO não (que eu saiba) oferece um serviço em nuvem, então deixei o ‘Nome do Serviço’ na tabela de conteúdos da wiki no início em branco. Ajuste conforme desejar.

2 curtidas

Incrível! Obrigado pela contribuição!

1 curtida

De nada!

Eu também fiz alguns ajustes. O provedor é auto-hospedado, mas a seção do MinIO ainda está vinculada. Isso deve resolver o fato de não haver uma solução em nuvem fornecida que eu tenha encontrado até o momento. (Você pode fechar este tópico agora, se desejar, já que ele foi integrado à postagem da wiki).

3 curtidas

Também descobri (obrigado pelo código de código aberto e pela documentação decente do MinIO!) que o CORS já está ativado por padrão em todos os verbos de ação HTTP do MinIO — então não há necessidade de instalar as regras de CORS, elas já estão presentes. Também atualizei a seção do MinIO auto-hospedado, além de alguns ajustes gramaticais.

Obrigado ao @Falco por ajudar a rastrear o problema que notei durante a construção/reconstrução do aplicativo para isso e por oferecer orientações básicas sobre a configuração do CDN com StackPath (porque eu queria um teste totalmente funcional e já utilizo o CDN da StackPath para outra coisa, então usar a pilha do CDN verificou que tudo funcionou!)

2 curtidas

Não entendi como configurar o estilo de caminho forçado. Quando configuro a versão 2.6.8 com Minio através das configurações S3, ele sempre anexa o nome do bucket ao endpoint S3, onde deveria anexá-lo como caminho após o endpoint S3.

Parece também, pela amostra de configuração no GitHub, que a opção s3_force_path_style foi removida. Estou perdendo alguma coisa? Obrigado.

@ceelian

O Discourse usa o modo DNS, não o modo de caminho, para S3. É assim há MUITO TEMPO, é por isso que não especifico nada sobre o modo de caminho no guia OU na página do guia de armazenamento S3. Você também deve aprender a criar novas threads em vez de ressuscitar uma thread antiga para algo não relacionado.

1 curtida

@teward Obrigado pelo feedback. Desculpe por ressuscitar o tópico, estou acostumado com a forma de escrever do GitHub issues :slight_smile: Vou iniciar um novo tópico sobre como podemos usar o Discourse S3 no modo de caminho.

FYI: você não pode. Não acredito que o modo de caminho seja mais suportado, e é por isso que a opção de forçar o modo de caminho para o Discourse desapareceu. É também por isso que a seção que originalmente adicionei à página de como configurar um provedor de armazenamento de objetos compatível com S3 agora diz, sob ressalvas e requisitos:

  1. Você tem o Suporte de Domínio habilitado na configuração do MinIO, para URLs de bucket orientadas por domínio. Isso é obrigatório e não uma opção, não há suporte baseado em caminho no Discourse para caminhos de bucket.

Há muito tempo, quando comecei a trabalhar com o Discourse, eles tinham essa opção, depois ela foi removida e tive que parar de usar o MinIO como backend. AGORA, como há documentação no MinIO sobre como fazer o modo DNS funcionar (ou seja, caminhos bucket[.]server[.]com agora como o S3 faz), ele funciona quando você configura o MinIO corretamente. (Obrigado à equipe/moderadores/sistema por aumentar meu nível de confiança para editar a própria wiki agora).

2 curtidas

Obrigado pelo esclarecimento e pela dica de como resolver o problema!

Este tópico foi automaticamente fechado 24 horas após a última resposta. Novas respostas não são mais permitidas.