Instâncias do Mastodon que usam armazenamento de objetos compatível com S3 para arquivos de mídia podem encontrar o erro “Falha no Upload de Armazenamento de Objetos” quando usuários tentam anexar imagens, vídeos ou outros arquivos a postagens. Esse erro geralmente aparece como uma faixa vermelha na interface web ou como uma falha registrada nos jobs sidekiq do Mastodon. A causa raiz é quase sempre uma configuração incorreta nas variáveis de ambiente do Mastodon que controlam o acesso ao S3 ou uma restrição no nível de rede bloqueando a solicitação de upload. Este artigo explica os valores de configuração específicos que devem estar corretos, fornece instruções passo a passo para verificar e corrigir cada configuração e cobre padrões de falha relacionados, como timeouts e erros de permissão.
Principais Conclusões: Corrigindo Falhas de Upload S3 no Mastodon
- S3_ENABLED=true: Deve ser definido no ambiente do Mastodon para ativar o armazenamento de objetos em vez do disco local.
- AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY: Fornecem as credenciais do serviço compatível com S3 com permissões de escrita no bucket.
- Nome do S3_BUCKET e S3_REGION: Devem corresponder exatamente ao nome do bucket e à região configurados no seu provedor S3.
Por que o Mastodon Falha ao Fazer Upload de Mídia para o Armazenamento de Objetos S3
O Mastodon armazena mídias enviadas por usuários, como fotos de perfil, imagens de cabeçalho e anexos de postagens. Por padrão, o Mastodon salva esses arquivos no sistema de arquivos local. Quando você ativa o armazenamento de objetos compatível com S3, o Mastodon usa o AWS SDK para Ruby para fazer upload de arquivos para um bucket remoto. O processo de upload envolve várias etapas: o processo web do Mastodon recebe o arquivo, o sidekiq processa o job de upload e o SDK envia uma solicitação PUT para o endpoint S3. Se alguma das variáveis de ambiente que controlam esse processo estiver ausente, incorreta ou desalinhada com os requisitos do provedor S3, o upload falha.
As causas raiz mais comuns são:
- S3_ENABLED ausente ou incorreto: O Mastodon ignora todas as configurações S3 se esta variável não estiver definida como
true. - S3_PROTOCOL ou S3_HOSTNAME errados: Para provedores S3 que não são da AWS, como DigitalOcean Spaces ou MinIO, você deve definir esses valores para a URL de endpoint correta.
- Permissões do bucket: O usuário IAM ou a chave de acesso deve ter permissões
s3:PutObjectes3:PutObjectAclno bucket. - Rede ou firewall bloqueando: O servidor Mastodon deve conseguir acessar o endpoint S3 via HTTPS na porta 443.
Passos para Diagnosticar e Corrigir o Erro de Upload S3 no Mastodon
Siga estes passos em ordem. Teste após cada alteração fazendo upload de um arquivo de imagem pequeno em qualquer postagem do Mastodon.
- Verifique o arquivo de ambiente do Mastodon
Acesse via SSH o servidor Mastodon como usuário mastodon. Abra o arquivo.env.productionlocalizado no diretório home do Mastodon, geralmente/home/mastodon/live/.env.production. Execute:sudo -u mastodon nano /home/mastodon/live/.env.production. Verifique se as seguintes linhas existem e não estão comentadas: - Confirme que S3_ENABLED está definido como true
Procure pela linhaS3_ENABLED=true. Se estiver ausente ou definida comofalse, o Mastodon não usará S3 e tentará salvar arquivos localmente, o que também pode falhar se o caminho de armazenamento local estiver mal configurado. - Verifique as credenciais AWS
Certifique-se de que estas linhas estão presentes:AWS_ACCESS_KEY_ID=sua-chave-de-acessoAWS_SECRET_ACCESS_KEY=sua-chave-secreta
A chave de acesso deve ter permissões de escrita no bucket S3. Se não tiver certeza, gere um novo par de chaves no painel de controle do seu provedor S3. - Defina o nome e a região corretos do bucket
Verifique seS3_BUCKET=nome-do-seu-bucketcorresponde exatamente ao bucket que você criou. Para a região, useS3_REGION=us-east-1ou a região que seu provedor usa. O DigitalOcean Spaces usa a regiãonyc3ouams3. - Configure o endpoint S3 para provedores que não são AWS
Se você usa um provedor diferente da AWS, defina:S3_PROTOCOL=httpsS3_HOSTNAME=nyc3.digitaloceanspaces.com
Substitua o hostname pelo endpoint do seu provedor. Para MinIO, use o IP ou domínio do seu servidor MinIO. - Defina S3_ALIAS_HOST se necessário
Se o seu bucket S3 for acessado por meio de um domínio personalizado ou CDN, definaS3_ALIAS_HOST=https://media.seudominio.com. Isso informa ao Mastodon para servir URLs de mídia a partir desse domínio em vez do endpoint S3 direto. - Reinicie os serviços do Mastodon
Após salvar o arquivo de ambiente, reinicie todos os processos do Mastodon para que as alterações entrem em vigor. Execute:sudo systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming - Teste o upload
Faça login na sua instância do Mastodon como administrador ou usuário comum. Crie um novo toot e anexe um arquivo de imagem com menos de 5 MB. Se o upload for bem-sucedido, o erro está resolvido.
Se o Mastodon Ainda Mostrar Falha no Upload Após as Alterações de Configuração
Configuração CORS do bucket S3 bloqueia uploads
Mesmo com as configurações corretas do Mastodon, o próprio bucket S3 pode rejeitar uploads devido a cabeçalhos CORS ausentes ou incorretos. Faça login no painel de controle do seu provedor S3 e adicione a seguinte regra CORS ao bucket:
[
{
"AllowedHeaders": [""],
"AllowedMethods": ["PUT", "POST", "GET", "HEAD"],
"AllowedOrigins": ["https://sua-instancia-mastodon.com"],
"ExposeHeaders": ["ETag"]
}
]
Substitua a origem pelo domínio da sua instância Mastodon. Se estiver testando localmente, use http://localhost:3000.
Política do bucket nega PutObject para a chave de acesso
O usuário IAM ou a chave de acesso deve ter uma política que permita s3:PutObject. Uma política típica é assim:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::nome-do-seu-bucket/"
}
]
}
Anexe esta política ao usuário associado à chave de acesso. Para DigitalOcean Spaces, use a chave de acesso Spaces com as permissões apropriadas no painel de controle Spaces.
Firewall ou DNS bloqueia o endpoint S3
A partir do servidor Mastodon, teste a conectividade com o endpoint S3 usando curl. Execute:curl -I https://nyc3.digitaloceanspaces.com
Se o comando travar ou retornar um timeout, verifique as regras de firewall do seu servidor. Certifique-se de que o tráfego HTTPS de saída para o intervalo de IP do endpoint S3 seja permitido. Verifique também se a resolução DNS funciona para o hostname.
Tamanho do arquivo excede o limite do bucket S3 ou do Mastodon
O Mastodon tem um limite de tamanho de arquivo padrão de 8 MB para anexos. Alguns provedores S3 impõem um limite menor. Verifique a documentação do seu provedor. Você pode ajustar o limite do Mastodon definindo MAX_IMAGE_SIZE e MAX_VIDEO_SIZE no arquivo de ambiente, mas o provedor S3 deve aceitar o tamanho maior.
Configuração S3 do Mastodon vs Armazenamento Local: Principais Diferenças
| Item | Armazenamento de Objetos S3 | Sistema de Arquivos Local |
|---|---|---|
| Local de armazenamento | Bucket remoto em provedor compatível com S3 | Disco local no servidor Mastodon |
| Variável de ambiente necessária | S3_ENABLED=true mais credenciais AWS e endpoint | Nenhuma variável S3 necessária |
| Escalabilidade | Alta; armazenamento independente do disco do servidor | Limitada pela capacidade do disco do servidor |
| Estratégia de backup | Replicação gerenciada pelo provedor ou bucket de backup separado | Backup manual do diretório public/system |
| Causa da falha de upload | Configuração incorreta do ambiente, permissões do bucket ou rede | Disco cheio, permissões incorretas em diretórios locais |
| Correção típica | Verificar S3_ENABLED, credenciais, endpoint e CORS | Liberar espaço em disco ou corrigir propriedade de /home/mastodon/live/public/system |
Agora você pode resolver o erro “Falha no Upload de Armazenamento de Objetos” verificando cada variável de ambiente S3 no arquivo .env.production do Mastodon, reiniciando os serviços e confirmando que as políticas CORS e IAM do bucket permitem operações de escrita. Se o problema persistir, teste a conectividade de rede com o endpoint S3 e verifique os logs do sidekiq do Mastodon para mensagens de erro detalhadas usando journalctl -u mastodon-sidekiq -n 50. Para manutenção contínua, monitore o uso de armazenamento do bucket e configure políticas de ciclo de vida para excluir arquivos de mídia antigos automaticamente.