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

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