Configure o BackBlaze S3 com BunnyCDN

Levou-me uma eternidade descobrir como fazer tudo isso, então quis criar este guia para facilitar a vida das pessoas. Servir suas imagens dessa forma deve fazer seu site carregar mais rápido. Minha configuração do Discourse combina um droplet da DigitalOcean, BackBlaze B2 S3, BunnyCDN e a versão gratuita do Cloudflare.

Escolhi esses serviços após pesquisar um pouco sobre confiabilidade, preços e benchmarks. Eles pareciam as melhores opções para mim. O Cloudflare ajuda na segurança, mas, pelo que entendi, também pode deixar o site um pouco mais lento, então vale a pena investigar isso. A Backblaze tem parcerias tanto com o Cloudflare quanto com o Bunny que permitem transferência de dados gratuita.

Embora o Cloudflare seja chamado de CDN, ele não funciona como os CDNs comuns e provavelmente não funcionará sozinho para configurar o S3 com o Discourse. Você pode precisar de outro provedor de CDN; o BunnyCDN funciona bem para mim. Se alguém conseguiu fazer isso apenas com o Cloudflare, me avise como :stuck_out_tongue:

Como configurar os uploads para o S3:
Primeiro, você precisa se cadastrar na Backblaze, criar buckets e inserir os detalhes nas configurações do Discourse:

Em seguida, cadastre-se no BunnyCDN e siga este guia:

bunny.net - The Global Edge Platform that truly Hops (link de indicação, ganho um crédito de 20 dólares na minha fatura)

Após criar sua zona de pull no BunnyCDN, você precisa obter a URL correta para inserir na configuração de backend do administrador do Discourse para “s3 cdn url”. Vá para o painel do BunnyCDN > pull zones > gerenciar zonas de pull > clique na sua zona > copie a URL ao lado de “host name”.

A URL deve se parecer com algo assim: example.b-cdn.net, mas você precisará garantir que coloque https:// na frente dela, assim: https://example.b-cdn.net

Salve as alterações na área de configurações de administrador do Discourse.

Pressione Ctrl+F5 duas vezes no seu navegador na página do seu site Discourse.

Faça um teste enviando uma imagem no editor de texto do Discourse. Inspeccione o elemento da imagem de teste ou visualize a fonte da imagem para garantir que funcionou. A URL deve ser diferente do seu domínio normal; deve ser algo como example.b-cdn.net / nome_do_arquivo

Agora, toda vez que alguém enviar uma imagem, ela ficará no seu bucket da Backblaze e não ocupará espaço no seu droplet da DigitalOcean :stuck_out_tongue:

Backup de Uploads para o S3
Se você quiser configurar os backups do Discourse para irem para o seu bucket da Backblaze, faça o seguinte:

No guia que postei mais acima neste tópico, preste atenção na explicação de que são necessários dois buckets separados. Um bucket é público; este é o seu bucket de uploads para que os usuários enviem imagens no seu fórum. O outro bucket é privado; este é o seu bucket de backups. É importante fazer backups automatizados do Discourse caso algo quebre, assim você poderá carregar seu backup e corrigir o problema.

No painel do BunnyCDN, crie uma segunda zona de pull. Sua primeira zona de pull era para uploads; esta nova zona de pull será para backups.

painel do bunnycdn > pull zones > adicionar zona de pull

Siga o mesmo guia que vinculei anteriormente, “Como acelerar a entrega de arquivos Backblaze B2 com o BunnyCDN” do BunnyCDN, mas desta vez vincule a nova zona de pull ao seu bucket de backups em vez do bucket de uploads.

Recomendo usar o “high volume tier 5$/TB” na página de criação da zona de pull do BunnyCDN. Acho que os backups não precisam do tier mais caro e rápido “standard tier 10$/TB” que usei para o bucket de uploads.

Configure suas opções de backup na área de configurações de administrador do Discourse. “backup location” deve ser definido como S3 e “s3 endpoint” deve apontar para o que você tem na Backblaze, algo assim:
s3.us-west-002.backblazeb2.com

Pressione Ctrl+F5 duas vezes no seu site para limpar o cache.

Inicie um backup e aguarde que ele termine. Em seguida, aguarde 5 minutos e verifique a pasta de backups da Backblaze; você deverá ver o novo backup lá.

Migrando Imagens Antigas:
Esta etapa é opcional, mas recomendada, especialmente se você estiver com pouco espaço de armazenamento no seu servidor. Então, você configurou tudo para novos uploads de imagens, mas as imagens antigas também podem ser transferidas para seus buckets. Para que esse processo funcione, siga o seguinte:

Configurando o CDN Cloudflare
Esta etapa é opcional, já que a Backblaze estabeleceu uma parceria que torna a transferência de dados para o Bunny gratuita também. No entanto, para segurança adicional e outros recursos, você pode fazer os dados passarem primeiro pelo Cloudflare e, em seguida, fazer o Bunny buscar os dados de onde o Cloudflare os deixa.

https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

8 curtidas

Só queria dizer que fiz o mesmo que o Bill e confirmei que funciona! O único detalhe é que funciona para arquivos novos, mas não para os antigos. O legal do método do Bill é que nem precisou de uma reconstrução. No entanto, espero que alguém descubra como fazer os arquivos antigos funcionarem com o S3 também.

Aliás, os backups também não funcionam. Pelo menos não para mim, e fiz exatamente a mesma coisa que o Bill.

5 curtidas

Você pode migrar arquivos antigos usando a tarefa rake.

1 curtida

Se você se refere a este comando, já o tentei e ele não fez o upload dos ativos antigos:

sudo -E -u discourse bundle exec rake s3:upload_assets

Também rebakei meus posts, mas sem sucesso.

A tarefa é:

cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_to_s3
cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_from_s3

Isso funciona para você, @AntiMetaman?
Se sim, vou adicioná-lo ao guia.

Vou tentar descobrir como fazer os backups funcionarem corretamente e também atualizarei o guia com isso. Tenho certeza de que preciso criar uma segunda zona de pull.

Meus backups estão funcionando bem com o Backblaze… Que problema você está enfrentando?

1 curtida

Meus backups estão funcionando bem com esse método também. Você deve ter configurado algo errado. Vou atualizar o guia agora mesmo com como configurei os backups. @AntiMetaman

Desculpe, não entendi isso. Como assim? Se está funcionando bem para mim, por que você está sugerindo que eu tenha configurado algo errado?

Ele está falando comigo @itsbhanusharma. Meus backups não estão funcionando. Minha configuração é a mesma da do Bill. No entanto, não usei uma zona de pull separada para o bucket de backup, então talvez seja por isso. Eu só tenho o nome do bucket de backup nas variáveis de ambiente.

Vou tentar a sugestão do Bhanu de migrar os ativos do S3 mais tarde.

Criei duas zonas de pull, uma para cada bucket (upload e backup). Iniciei um backup pelo meu painel de administração, mas ele falhou. O único dado que o Discourse conhece é o nome do bucket de backup.

DISCOURSE_S3_CDN_URL: https://duelistsunite.b-cdn.net
DISCOURSE_S3_BUCKET: s3omega
DISCOURSE_S3_BACKUP_BUCKET: s3omegabackup
DISCOURSE_BACKUP_LOCATION: s3

Não tenho certeza do que estou esquecendo aqui. Existe uma variável S3_CDN_BACKUP_URL? Considerando que a URL é diferente para o backup.

@itsbhanusharma Além disso, tentei seu método, mas migrate_from_S3 está indefinido.

Também não tinha certeza se você se referia a migrate_to_s3, então tentei isso também, mas também estava indefinido.

Peço desculpas pela confusão, quis dizer rake uploads:migrate_to_s3

1 curtida

Parece que o rake é abortado porque ele adiciona o amazonaws.com à URL, o que, na verdade, está incorreto. Esse é o problema. Se você usar um S3 que não seja da Amazon, o rake não funcionará, pois está hardcoded para alterar a URL.

1 curtida

Você pode confirmar ou negar se adicionou configurações à seção env do app.yml ou se adicionou as configurações na página Admin > Configurações?

Também configurei meus backups para funcionar com o S3. Assim, tenho tanto as uploads antigas quanto as novas operando com o S3. Estou usando o Cloudflare para SSL e proteção contra DDoS, o BunnyCDN para as zonas de upload e pull de backup, e o BackBlaze para o armazenamento S3. Agora estou tudo certo!

Observe que é melhor definir as variáveis de ambiente no app.yml, conforme mostrado aqui: Configure an S3 compatible object storage provider for uploads

Em seguida, reconstrua para que a configuração do S3 seja definida globalmente e não apenas no painel de administração. Dessa forma, ao migrar os arquivos antigos para o S3, você poderá fazer isso mais facilmente com três comandos:

./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

3 curtidas

Não tenho certeza do que estou perdendo aqui. Existe um S3_CDN_BACKUP_URL? Considerando que a URL é diferente para o backup.

Você resolveu essa dúvida? Também não estou claro sobre onde colocar a URL da zona de pull que aponta para o bucket de backup.

Edição: Estou correto ao perceber que o CDN é necessário apenas para o bucket de uploads? O guia sobre esse tópico sugere que uma segunda zona de pull do CDN deve ser criada para o bucket de backup. Se isso estiver errado, talvez o guia precise ser atualizado @Bill

Parece que é necessário apenas o nome do bucket de backup. A partir do nome, é possível obter a URL S3 de backup, pois será a mesma da upload, exceto pela diferença no nome. É por isso que não é necessário definir uma URL S3 de backup separada. Isso, é claro, pressupõe que ambos os buckets estejam no mesmo serviço S3.

Mas se o bucket de backup é privado, como a CDN acessaria? Sou novo em CDNs e posso estar perdendo algo, mas suspeito que o Discourse não usa a CDN de forma alguma para fazer backups.

Eles fazem. Eu fui ao meu bucket de backup e vi que o backup foi carregado lá. Ele é privado, mas o Discourse pode acessá-lo. Você pode configurar as permissões se a URL estiver disponível. Também é possível configurar para que apenas o seu site ou qualquer fonte HTTPS possa acessar o bucket.

Você pode verificar se o backup passou pela CDN ou se foi feito diretamente da sua instalação do Discourse para o BackBlaze B2?