Instâncias do Mastodon geram grandes volumes de arquivos de mídia a partir de uploads de usuários e conteúdo remoto em cache. Armazenar esses arquivos no mesmo servidor do banco de dados e código do aplicativo enche rapidamente o espaço em disco e pode degradar o desempenho. Mover o armazenamento de mídia para o Backblaze B2 reduz o uso de disco do servidor e diminui os custos de hospedagem. Este artigo explica como configurar sua instância do Mastodon para usar o Backblaze B2 como backend principal de armazenamento de mídia.
Principais Conclusões: Migrando Mídia do Mastodon para o Backblaze B2
- Configuração do .env.production: Definir variáveis de ambiente compatíveis com S3 redireciona o Active Storage do Mastodon para o Backblaze B2.
- rails assets:precompile e db:migrate: Comandos necessários após alterar o provedor de armazenamento para aplicar a nova configuração.
- Migração de mídia existente: Use comandos
tootctl mediapara copiar arquivos locais existentes para o bucket B2 e remover cópias locais.
Entendendo o Armazenamento de Mídia do Mastodon e o Backblaze B2
O Mastodon usa o Active Storage do Ruby on Rails para gerenciar anexos de arquivos. Por padrão, o Active Storage salva arquivos no sistema de arquivos local em public/system. Este local inclui imagens e vídeos enviados por usuários, emojis personalizados e mídia em cache de instâncias federadas. Em uma instância movimentada, este diretório pode exceder dezenas de gigabytes em semanas.
O Backblaze B2 é um serviço de armazenamento de objetos compatível com S3. O Active Storage do Mastodon pode ser configurado para usar qualquer provedor compatível com S3 definindo variáveis de ambiente. A migração envolve alterar essas variáveis, executar comandos Rails para atualizar o aplicativo e copiar arquivos existentes para o bucket B2. Nenhuma alteração de código é necessária. Todo o processo leva cerca de 30 minutos para uma instância pequena.
Pré-requisitos para este guia:
- Acesso root ou sudo ao servidor Mastodon
- Uma conta Backblaze B2 com uma chave de aplicação que tenha permissões de leitura e escrita
- Um bucket B2 criado com configurações padrão (público ou privado; o Mastodon gerenciará o acesso)
- Mastodon v3.5 ou posterior (versões mais antigas exigem gems adicionais)
Passos para Configurar o Mastodon para Armazenamento Backblaze B2
- Crie um bucket Backblaze B2 e uma chave de aplicação
Faça login na sua conta Backblaze. Navegue até B2 Cloud Storage e clique em Criar um Bucket. Nomeie o bucket comomastodon-media. Defina o tipo de bucket como Privado. Após a criação, vá para Chaves de Aplicação e clique em Gerar Nova Chave de Aplicação. Selecione o bucket que você acabou de criar. Permita acesso de leitura e escrita. Copie os valores de ID da Chave e Chave de Aplicação. Mantenha-os seguros. - Pare os processos web e sidekiq do Mastodon
No seu servidor, pare os serviços para evitar gravações de arquivos durante a alteração de configuração. Execute:sudo systemctl stop mastodon-webesudo systemctl stop mastodon-sidekiq. Pare também o serviço de streaming API, se usado:sudo systemctl stop mastodon-streaming. - Edite o arquivo .env.production do Mastodon
Abra/home/mastodon/live/.env.productioncom um editor de texto. Localize a seção para armazenamento S3. Se não existir, adicione as seguintes linhas. Substitua os placeholders pelos seus valores reais:S3_ENABLED=true S3_BUCKET=mastodon-media S3_REGION=us-west-001 AWS_ACCESS_KEY_ID=seu_backblaze_key_id AWS_SECRET_ACCESS_KEY=sua_backblaze_application_key S3_ENDPOINT=https://s3.us-west-001.backblazeb2.com S3_PROTOCOL=https S3_HOSTNAME=s3.us-west-001.backblazeb2.com S3_ALIAS_HOST=https://seu-nome-de-bucket.s3.us-west-001.backblazeb2.com
Os valores de
S3_REGIONeS3_ENDPOINTdependem da região do seu bucket B2. Encontre o endpoint correto no painel do Backblaze B2 nos detalhes do bucket. Não use aspas ao redor dos valores. - Execute a pré-compilação de assets e migração de banco de dados do Rails
Mude para o usuário mastodon:sudo -i -u mastodon. Navegue até o diretório live:cd /home/mastodon/live. Execute:RAILS_ENV=production bundle exec rails assets:precompile. Este comando gera novos arquivos de asset que incluem a configuração S3. Em seguida, execute:RAILS_ENV=production bundle exec rails db:migrate. Isso atualiza o esquema do banco de dados, se necessário. - Reinicie os serviços do Mastodon
Saia do shell do usuário mastodon. Execute:sudo systemctl start mastodon-web,sudo systemctl start mastodon-sidekiqesudo systemctl start mastodon-streaming. Verifique o status dos serviços:sudo systemctl status mastodon-web. Certifique-se de que todos os serviços estão ativos e em execução. - Copie os arquivos de mídia existentes para o Backblaze B2
O Mastodon fornece a ferramentatootctlpara gerenciamento de mídia. Execute o seguinte comando para enviar toda a mídia local para o B2:RAILS_ENV=production bin/tootctl media remove --days=0. Este comando remove a mídia local com mais de 0 dias (ou seja, toda a mídia), mas somente após garantir que os arquivos existam no armazenamento remoto. Aguarde a conclusão do comando. Em seguida, execute:RAILS_ENV=production bin/tootctl media usagepara verificar se a contagem e o tamanho da mídia correspondem ao bucket remoto. - Remova o diretório de mídia local
Após confirmar que todos os arquivos estão no B2, exclua o diretório de mídia local para liberar espaço em disco. Execute:sudo rm -rf /home/mastodon/live/public/system. Esta ação não pode ser desfeita. Realize este passo somente após verificar que seu bucket B2 contém todos os arquivos.
Problemas Comuns ao Mover Mídia do Mastodon para o Backblaze B2
Uploads de mídia falham após a mudança para o B2
Isso geralmente indica valores incorretos de S3_ENDPOINT ou S3_HOSTNAME. Verifique se o endpoint corresponde exatamente à região do Backblaze B2. Confirme também se a chave de aplicação tem permissões de escrita. Verifique os logs do Mastodon em /home/mastodon/live/log/production.log para mensagens de erro relacionadas ao S3.
Arquivos de mídia existentes não acessíveis após a migração
O comando tootctl media remove remove apenas arquivos que já estão armazenados remotamente. Se você excluiu arquivos locais antes de enviá-los para o B2, a mídia estará faltando. Para recuperar, você deve restaurar os arquivos locais de um backup e executar novamente as etapas de migração na ordem correta. Sempre verifique o conteúdo do bucket B2 antes de excluir arquivos locais.
Nova mídia é salva localmente em vez de no B2
A variável S3_ENABLED deve estar definida exatamente como true. Espaços à direita ou capitalização incorreta farão com que o Mastodon ignore a configuração S3. Após editar o arquivo .env, reinicie todos os serviços do Mastodon e teste fazendo upload de uma nova postagem com uma imagem. Verifique o log de produção para confirmar que o caminho do arquivo aponta para o endpoint B2.
Armazenamento Local do Mastodon vs Backblaze B2
| Item | Armazenamento Local | Backblaze B2 |
|---|---|---|
| Local de armazenamento | Sistema de arquivos do servidor | Armazenamento remoto de objetos |
| Custo | Custo do disco do servidor (incluído no VPS) | Pague por GB armazenado e baixado |
| Escalabilidade | Limitada pelo tamanho do disco | Praticamente ilimitada |
| Necessidade de backup | Deve fazer backup da mídia separadamente | B2 inclui 99,999999999% de durabilidade |
| Carga no servidor | Operações de arquivo consomem CPU e I/O | Transferência de serviço de arquivos para a borda CDN |
Após mover a mídia para o Backblaze B2, sua instância do Mastodon armazenará toda a mídia enviada por usuários e em cache remotamente. O uso de disco do servidor cairá significativamente, reduzindo o tamanho do backup e prolongando a vida útil do SSD. Monitore o uso do bucket B2 no painel do Backblaze para acompanhar os custos. Para instâncias grandes, considere ativar o S3_ALIAS_HOST com um subdomínio personalizado para melhorar os tempos de carregamento através de uma CDN.