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

Está funcionando agora?

1 curtida

Perfeito. Demorei muito, mas além de estar funcionando, também aprendi muito sobre a configuração do Discourse!

Obrigado!

2 curtidas

OK. Decidi postar o guia passo a passo que criei quando estava realizando esta configuração.

Como Configurar Backup S3 e CDN S3 do Fórum Discourse (Itechguides.com)

As etapas neste guia são para usar o DigitalOcean Space e o StackPack CDN.

3 curtidas

@pfaffman Gostaria de saber se você poderia me ajudar com este problema adicional de backup:

Após concluir a configuração de backup e clonagem do S3, meu backup automático não está sendo executado. A captura de tela abaixo mostra minha configuração.

Posso executar backups manualmente. O problema são os backups automáticos agendados - eles não são executados.

1 curtida

Não sei. Você pode verificar os trabalhos do Sidekiq e garantir que eles estejam em execução. Deve funcionar.

1 curtida

4 posts foram divididos em um novo tópico: Dicas sobre o Google Cloud S3

Olá,

Obrigado por corrigir minha postagem. Mas não consigo editar minha postagem para evitar informações enganosas.

Olá,

Estou um pouco preso e confuso e espero que alguém possa me ajudar.
Primeiro, tive uma instalação do Bitnami e percebi o quanto isso me daria trabalho, então reinstalei usando a instalação padrão.
Consegui restaurar meu backup e tudo ficou bem, mesmo tendo passado da versão 2.8 para a beta 2.9.

Testei meu backup novamente no meu Google Bucket e ele ainda funcionou perfeitamente.

Note que toda a configuração do S3 foi feita através da interface web e não via variáveis de ambiente.

Por motivos de GDPR, criei um novo bucket de backup na Europa (vamos chamá-lo de discourse-backup-eu) e, como consegui alterar a variável de ambiente, defini DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com, reconstruí o aplicativo, alterei o nome do bucket de backup na interface web, executei o backup novamente e fiquei muito satisfeito ao ver os arquivos de backup aparecendo em meu novo bucket de backup na Europa.

Agora eu queria que os uploads fossem para outro bucket e evitar encher o espaço em disco da minha VM.

Então configurei um novo bucket (vamos chamá-lo de discourse-uploads), o tornei público, adicionei a função Storage Legacy Bucket Owner à minha conta de serviço nesse novo bucket.
Em seguida, adicionei uma regra ao meu balanceador de carga existente (vamos chamá-lo de https://www.example.com) para usar um bucket de backend com Cloud CDN ativado, conforme instruído aqui. A regra sendo /discourse-uploads/* aponta para o bucket discourse-uploads.

Testei meu CDN com um test.jpg na raiz do bucket, mas não consegui acessá-lo via https://www.example.com/discourse-uploads/test.jpg e tive que criar uma subpasta chamada discourse-uploads dentro do bucket, movi o test.jpg para dentro e agora consigo ver minha imagem de teste via https://www.example.com/discourse-uploads/test.jpg.

Na interface web, alterei o nome do bucket dummy em “s3 upload bucket” (fui forçado a definir anteriormente enquanto configurava o backup) para discourse-uploads, preenchi a URL do CDN com https://www.example.com/discourse-uploads e marquei “enable s3 uploads”.

A partir daí, se eu tentasse fazer upload de uma imagem, receberia um pop-up dizendo Argumento Inválido na janela do navegador (vindo de um erro 422 com um conteúdo JSON dizendo basicamente o mesmo).

Tentei refazer todos os posts, mas não teve efeito, ainda tive o erro.

Então pensei que deveria tentar usar as variáveis de ambiente em vez da interface web.

e usar a seguinte configuração:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: qualquer
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

Reconstruí o aplicativo.
Então não consigo mais abrir o discourse porque nenhum dos assets foi carregado no bucket e recebo um 404
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

Pensei que tentar fazer upload diretamente para uma subpasta no bucket era um pouco exagerado, embora o OP sugira que funciona (pelo menos para o bucket de backup)

alterei a variável de ambiente para
DISCOURSE_S3_BUCKET: discourse-uploads
(Pensando que mais tarde posso brincar com a regra do host em vez de ter que fazer upload para uma subpasta)

e reconstruí para ver se algo era carregado, mas nada é carregado no bucket e o discourse ainda falha ao abrir por causa de 404s.

Então minhas perguntas são:

  • A interface web e a variável de ambiente colidem?
  • Quando os assets deveriam ser carregados no bucket?
  • Como posso depurar isso? Não vejo nenhum erro nos logs.
  • É possível definir uma subpasta de um bucket na configuração?
  • Uma vez que isso funcione, as imagens previamente carregadas serão transferidas para o bucket? Se eu refizer, como ficará a URL das imagens previamente carregadas?

Obrigado!

1 curtida

Você incluiu esta parte?

Eu enviei um PR com um template para fazer isso há um tempo, mas acho que ele nunca recebeu atenção.

Além disso, mudar buckets é difícil. Você precisa não apenas copiar todos os ativos do antigo para o novo, mas também atualizar o banco de dados para usar o novo bucket. Acredito que exista um tópico sobre isso.

Se você usar as variáveis de ambiente (o que você deveria), essas configurações não estarão mais visíveis na Interface Web.

1 curtida

Uma postagem foi mesclada em um tópico existente: Dicas sobre o Google Cloud S3

Sim. Se minha memória não me falha, há uma discussão acima sobre o Google não permitir algo (acesso à lista, talvez?), mas havia uma solução alternativa sobre o uso de algum “legado” algo. É o que me lembro. Você terá que rolar pelas mais de 100 mensagens acima para encontrá-lo. Se funcionar, seria ótimo se você pudesse atualizar o OP para dizer como você fez funcionar para que a próxima pessoa que precisar saber possa encontrá-lo mais facilmente.

1 curtida

Obrigado novamente pela sua resposta!
O aviso sobre o bucket do Google era sobre o uso para backups porque ele não conseguia listar os arquivos.
Eu já postei sobre como corrigir isso

Você está sugerindo que eu atualize o OP com essa informação? Acho que não consigo.

Novamente, o backup funciona, mas o upload dos ativos não, de acordo com o OP, isso deveria funcionar mesmo sem os direitos de Proprietário do Bucket de Legado de Armazenamento.

Acho que pode haver uma regressão aqui, o que você acha @Falco?

1 curtida

Pode haver uma regressão. Você tem certeza de que adicionou o customizado

que só o Google precisa?

2 curtidas

Ah. Bem, eu pensei que alguém tinha. :person_shrugging:

Era isso que eu estava sugerindo. É um wiki, então tenho certeza que você pode, embora não tenha 100% de certeza sobre quais níveis de confiança estão envolvidos.

1 curtida

Obrigado pela sua resposta, sim, eu incluí:\n\n[quote="Jerome Hordies, post:339, topic:148916, username:Jerome_Hordies"]\nDISCOURSE_USE_S3: true\nDISCOURSE_S3_REGION: whatever\nDISCOURSE_S3_INSTALL_CORS_RULE: false\nFORCE_S3_UPLOADS: 1\nDISCOURSE_S3_ENDPOINT: https://storage.googleapis.com\nDISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID\nDISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY\nDISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads\nDISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads\nDISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu\nDISCOURSE_BACKUP_LOCATION: s3\n[/quote]\n\nNote que tentei com e sem a subpasta \nDISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads\ne \nDISCOURSE_S3_BUCKET: discourse-uploads\n\nObrigado novamente

2 curtidas

@tuanpembual fez isso inicialmente, mas se referiu ao Storage Legacy Object Owner em vez do Storage Legacy Bucket Owner

Eu sou apenas um “usuário básico”, esse deve ser o motivo pelo qual não consigo editar.

3 curtidas

Vou tentar resumir as respostas às minhas perguntas:

  • A interface do usuário da Web e a variável de ambiente colidem?
  • Quando os ativos devem ser carregados no bucket?
    Ao adicionar este trecho ao app.yml na seção hook, ele será carregado após after_assets_precompile (durante a reconstrução do aplicativo).
  • Como posso depurar isso? Não vejo nenhum erro nos logs.
    Executando:
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
  • É possível definir uma subpasta de um bucket na configuração?

Você pode usar prefixos para organizar os dados que armazena em buckets do Amazon S3. Um prefixo é uma sequência de caracteres no início do nome da chave do objeto. Um prefixo pode ter qualquer comprimento, sujeito ao comprimento máximo do nome da chave do objeto (1.024 bytes). Você pode pensar em prefixos como uma maneira de organizar seus dados de forma semelhante a diretórios. No entanto, prefixos não são diretórios.

  • Quando isso funcionar, as imagens previamente carregadas serão transferidas para o bucket? Se eu refizer o bake, como será a URL das imagens previamente carregadas?
3 curtidas

Olá, tenho procurado por provedores de armazenamento de objetos e vi na OP que para alguns deles, você precisará “ignorar o CORS e configurá-lo manualmente”. Não estou familiarizado com CORS nem com sua configuração, então devo evitar os que precisam dessa configuração ou é simples configurá-la?

1 curtida

Se você precisar perguntar (como eu faria), então eu escolheria outro.

1 curtida

Apenas confirme, depois que eu fizer as etapas

rake uploads:migrate_to_s3
rake posts:rebake

posso remover a pasta de uploads local por completo, sim?

1 curtida