Como Configurar uma Instância Mastodon com Armazenamento Wasai S3
🔍 WiseChecker

Como Configurar uma Instância Mastodon com Armazenamento Wasai S3

Instâncias Mastodon armazenam arquivos de mídia dos usuários, como imagens, vídeos e avatares de perfil. Por padrão, esses arquivos são salvos no disco local do servidor da instância. Conforme sua instância cresce, o armazenamento local enche rapidamente e se torna caro para expandir. O Wasabi oferece uma solução de armazenamento de objetos compatível com S3, econômica e que se integra diretamente ao Mastodon. Este artigo explica como configurar sua instância Mastodon para usar o Wasabi como backend de armazenamento de mídia.

Principais pontos: Configurando Mastodon com armazenamento Wasabi S3

  • Bucket e chaves de acesso Wasabi: Crie um novo bucket no Wasabi e gere chave de acesso e chave secreta para o Mastodon usar.
  • Variáveis de ambiente no mastodon.env: Adicione S3_ENABLED, S3_BUCKET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, S3_ENDPOINT e S3_REGION ao arquivo de ambiente do Mastodon.
  • Reinicie os serviços do Mastodon: Após editar o arquivo de ambiente, reinicie os serviços mastodon-sidekiq e mastodon-web para aplicar as alterações.

ADVERTISEMENT

Entendendo o armazenamento Wasabi S3 para Mastodon

O Wasabi é um serviço de armazenamento em nuvem hot que é totalmente compatível com a API S3 da Amazon. Isso significa que o Mastodon pode usar o Wasabi como substituto direto do AWS S3. O principal benefício é o custo: o Wasabi não cobra taxas de egress e tem um preço de armazenamento fixo menor que o AWS S3 em muitas regiões. O Mastodon usa a gem fog-aws para se comunicar com serviços compatíveis com S3. Quando o armazenamento S3 está ativado, o Mastodon envia todos os arquivos de mídia dos usuários para o bucket configurado, em vez de salvá-los no sistema de arquivos local. Isso transfere a sobrecarga de armazenamento do servidor da instância e facilita a escalabilidade.

Antes de iniciar a configuração, você precisa de uma conta Wasabi com uma assinatura ativa. Você também precisa de acesso SSH ao seu servidor Mastodon e capacidade de editar o arquivo de ambiente. A localização padrão desse arquivo é /home/mastodon/live/.env.production ou dentro de uma configuração Docker Compose. Se você usa Docker, as variáveis de ambiente geralmente são definidas em um arquivo .env ou diretamente no arquivo docker-compose.yml.

Passos para configurar o Mastodon para usar armazenamento Wasabi S3

Siga estes passos em ordem para conectar sua instância Mastodon ao Wasabi. O processo envolve criar um bucket Wasabi, gerar credenciais e editar o arquivo de ambiente do Mastodon.

  1. Crie um bucket Wasabi
    Faça login no console Wasabi. Navegue até a seção Buckets e clique em Create Bucket. Escolha um nome de bucket globalmente único, por exemplo mastodon-media-sua-instancia. Selecione a região mais próxima do seu servidor, como us-east-1 ou eu-central-1. Deixe as configurações padrão para bloqueio de objetos e versionamento, a menos que você tenha requisitos específicos.
  2. Gere chaves de acesso no Wasabi
    No console Wasabi, vá para Access Keys. Clique em Create New Access Key. Copie o Access Key ID e o Secret Access Key. Armazene-os com segurança. Você não poderá ver o Secret Access Key novamente após fechar a janela.
  3. Encontre o endpoint S3 do Wasabi para sua região
    O Wasabi fornece endpoints diferentes por região. Por exemplo, o endpoint para us-east-1 é s3.us-east-1.wasabisys.com. Consulte a documentação do Wasabi para a URL exata do endpoint da sua região escolhida.
  4. Edite o arquivo de ambiente do Mastodon
    Conecte-se via SSH ao seu servidor Mastodon. Se você instalou o Mastodon a partir da fonte, abra o arquivo de ambiente com nano /home/mastodon/live/.env.production. Se você usa Docker, edite o arquivo .env no diretório do Mastodon. Adicione ou modifique as seguintes linhas:

    S3_ENABLED=true
    S3_BUCKET=mastodon-media-sua-instancia
    AWS_ACCESS_KEY_ID=sua-chave-de-acesso-wasabi
    AWS_SECRET_ACCESS_KEY=sua-chave-secreta-wasabi
    S3_ENDPOINT=https://s3.us-east-1.wasabisys.com
    S3_REGION=us-east-1
    S3_PROTOCOL=https
    S3_HOSTNAME=s3.us-east-1.wasabisys.com

    Substitua o nome do bucket, chaves, endpoint e região pelos seus valores reais. O S3_HOSTNAME deve corresponder à parte do hostname da URL do endpoint, sem o protocolo.

  5. Salve o arquivo e aplique as alterações
    Salve o arquivo de ambiente e saia do editor. Se você usa Mastodon a partir da fonte, execute RAILS_ENV=production bin/tootctl assets:precompile para regenerar o pipeline de assets. Esta etapa é opcional, mas recomendada para garantir que quaisquer novos caminhos de assets estejam corretos.
  6. Reinicie os serviços do Mastodon
    Reinicie os processos web e Sidekiq do Mastodon para carregar as novas variáveis de ambiente. Para uma instalação a partir da fonte, use systemctl restart mastodon-web mastodon-sidekiq. Para Docker, execute docker compose restart web sidekiq.
  7. Verifique a configuração
    Faça upload de uma imagem de teste no Mastodon, por exemplo, um avatar de perfil. Após o upload, verifique o bucket Wasabi. O arquivo deve aparecer no bucket sob um caminho como media_attachments/files/000/.... Se o arquivo aparecer, a configuração está funcionando corretamente.

ADVERTISEMENT

Problemas comuns e configurações incorretas

Arquivos ainda salvos no disco local após a configuração

Isso geralmente acontece quando as variáveis de ambiente não são lidas pelo Mastodon. Verifique se o arquivo .env.production pertence ao usuário mastodon e tem as permissões corretas. Execute chown mastodon:mastodon /home/mastodon/live/.env.production e chmod 600 /home/mastodon/live/.env.production. Em seguida, reinicie os serviços novamente.

Erros 403 Forbidden ao fazer upload

Um erro 403 indica que as chaves de acesso não têm permissão para gravar no bucket. Vá ao console Wasabi e verifique a política do bucket. Certifique-se de que a chave de acesso pertence a um usuário ou conta raiz que tenha permissões de gravação. Verifique também se o nome do bucket está correto e se a URL do endpoint corresponde exatamente à região.

Arquivos de mídia existentes não migrados para o Wasabi

Configurar o Wasabi não move automaticamente os arquivos existentes. Para migrar a mídia existente, use a ferramenta de linha de comando do Mastodon. Execute RAILS_ENV=production bin/tootctl media:remove para remover cópias locais após o upload para o S3. No entanto, este comando apenas remove miniaturas em cache e mídia remota. Para uma migração completa de todos os arquivos locais, você precisa copiá-los manualmente ou usar um script para enviá-los ao bucket Wasabi preservando a estrutura de caminhos.

Arquivos enviados não estão acessíveis publicamente

Por padrão, os buckets Wasabi são privados. O Mastodon assina URLs para acesso, portanto, uma política de bucket pública não é necessária. Se você vir imagens quebradas após o upload, verifique se S3_ENDPOINT e S3_HOSTNAME estão configurados corretamente. Confirme também se a região corresponde à região do bucket. Uma incompatibilidade faz com que o Mastodon gere URLs assinados incorretos.

Item Wasabi AWS S3
Compatibilidade com API Totalmente compatível com S3 API S3 nativa
Taxas de Egress Sem taxas de egress até 1x os dados armazenados por mês Taxas de egress aplicadas por GB
Custo de armazenamento (us-east-1) $5,99 por TB por mês $23 por TB por mês (S3 Standard)
Duração mínima de armazenamento 90 dias por objeto Sem mínimo
Configuração no Mastodon Requer S3_ENDPOINT e S3_HOSTNAME Funciona com as configurações padrão do fog-aws

Você configurou sua instância Mastodon para armazenar todos os arquivos de mídia no armazenamento Wasabi S3. Isso reduz o uso do disco local e diminui os custos de armazenamento para instâncias em crescimento. Em seguida, considere configurar uma política de ciclo de vida no Wasabi para excluir automaticamente mídia em cache antiga após um número definido de dias. Use o comando CLI do Mastodon RAILS_ENV=production bin/tootctl media:remove --days=7 para remover mídia remota armazenada em cache localmente com mais de 7 dias, mantendo seu bucket enxuto.

ADVERTISEMENT