Está funcionando agora?
Perfeito. Demorei muito, mas além de estar funcionando, também aprendi muito sobre a configuração do Discourse!
Obrigado!
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.
@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.
Não sei. Você pode verificar os trabalhos do Sidekiq e garantir que eles estejam em execução. Deve funcionar.
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!
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.
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.
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?
Pode haver uma regressão. Você tem certeza de que adicionou o customizado
que só o Google precisa?
Ah. Bem, eu pensei que alguém tinha. ![]()
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.
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
@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.
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ósafter_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?
Eu realmente preciso usar buckets separados para uploads e backups?
Não, você não precisa, mas geralmente é a maneira mais fácil de configurar. Essencialmente, você precisa usar dois buckets diferentes ou um prefixo para o bucket de backup. Por exemplo, as seguintes combinações funcionarão:
- Buckets diferentes
- s3_upload_bucket:
seu-bucket-de-uploads- s3_backup_bucket:
seu-bucket-de-backups
- Prefixos diferentes
- s3_upload_bucket:
seu-bucket-de-uploads/uploads- s3_backup_bucket:
seu-bucket-de-uploads/backups
- 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?
Ativei os uploads S3 na minha instância do Discourse (que está em funcionamento há algum tempo); o que faço com os uploads locais existentes?
Para migrar seus uploads existentes para S3, você pode executar algumas tarefas rake. Para realizá-las, você precisa de acesso SSH, permissões de root e ter entrado no aplicativo discourse (conforme Operações em Massa Administrativas). Ah, e você tem que definir algumas variáveis de ambiente em app.yml. Não é para os fracos de coração.
Depois de ter feito tudo isso, você estará pronto para as tarefas rake:
rake uploads:migrate_to_s3 rake posts:rebakeDepois que essas tarefas forem concluídas (e os uploads estiverem funcionando bem), você não precisará mais incluir os uploads em seus backups. E como bônus, você poderá Restaurar um backup da linha de comando em caso de catástrofe (apenas guarde uma cópia do app.yml em algum lugar).
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?
Se você precisar perguntar (como eu faria), então eu escolheria outro.
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?

