Como Mover o Armazenamento de Mídia do Mastodon do Local para o Backblaze B2
🔍 WiseChecker

Como Mover o Armazenamento de Mídia do Mastodon do Local para o Backblaze B2

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 media para copiar arquivos locais existentes para o bucket B2 e remover cópias locais.

ADVERTISEMENT

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

  1. 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 como mastodon-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.
  2. 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-web e sudo systemctl stop mastodon-sidekiq. Pare também o serviço de streaming API, se usado: sudo systemctl stop mastodon-streaming.
  3. Edite o arquivo .env.production do Mastodon
    Abra /home/mastodon/live/.env.production com 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_REGION e S3_ENDPOINT dependem 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.

  4. 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.
  5. Reinicie os serviços do Mastodon
    Saia do shell do usuário mastodon. Execute: sudo systemctl start mastodon-web, sudo systemctl start mastodon-sidekiq e sudo 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.
  6. Copie os arquivos de mídia existentes para o Backblaze B2
    O Mastodon fornece a ferramenta tootctl para 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 usage para verificar se a contagem e o tamanho da mídia correspondem ao bucket remoto.
  7. 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.

ADVERTISEMENT

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.

ADVERTISEMENT