Executar uma instância do Mastodon requer armazenar grandes quantidades de mídia enviada pelos usuários. Por padrão, o Mastodon salva esses arquivos no sistema de arquivos local do servidor. Essa abordagem pode encher rapidamente o espaço em disco e dificultar a escalabilidade. O armazenamento de objetos auto-hospedado com MinIO oferece uma alternativa confiável e compatível com S3 que mantém suas mídias separadas do servidor de aplicação.
MinIO é um servidor de armazenamento de objetos de código aberto que funciona com a API Amazon S3. Ele roda em seu próprio hardware ou máquina virtual, dando a você controle total sobre seus dados sem depender de provedores de nuvem externos. Configurar o MinIO para uma instância do Mastodon envolve instalar o servidor MinIO, criar um bucket e chaves de acesso, e configurar o arquivo de ambiente do Mastodon para usar armazenamento S3.
Este guia percorre todo o processo passo a passo. Você aprenderá como instalar e configurar o MinIO no Ubuntu 22.04, criar o bucket e as credenciais necessárias, e editar o arquivo .env.production do Mastodon para habilitar o armazenamento de mídia S3. Ao final, sua instância armazenará todos os uploads de usuários no MinIO em vez do disco local.
Principais Pontos: Configuração do MinIO para Mastodon
- Instalação do servidor MinIO: Baixe o binário, configure o serviço systemd e defina o diretório de dados para armazenamento persistente.
- Console MinIO e criação de bucket: Acesse a interface web, crie um bucket chamado “mastodon” e gere chave de acesso e chave secreta para o Mastodon.
- Edições no .env.production do Mastodon: Defina S3_ENABLED=true, S3_BUCKET=mastodon, S3_ENDPOINT, AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
Entendendo o MinIO e seu Papel no Mastodon
O Mastodon armazena mídias enviadas pelos usuários, como imagens, vídeos e arquivos de áudio. Cada post com mídia anexa um arquivo que deve ser servido a outros usuários e instâncias federadas. O método de armazenamento local padrão mantém esses arquivos no diretório public/system da aplicação Mastodon. Conforme sua instância cresce, esse diretório consome mais espaço em disco e pode se tornar um gargalo para backups e migrações de servidor.
O armazenamento de objetos separa os arquivos de mídia do servidor de aplicação. O Mastodon suporta a API Amazon S3 para armazenar e servir mídias. O MinIO implementa a mesma API, então o Mastodon o trata como qualquer outro provedor S3. O benefício é que você pode hospedar o armazenamento de objetos na mesma LAN ou em uma máquina diferente, escalar o armazenamento de forma independente e usar ferramentas S3 padrão para backup e replicação.
O que o MinIO Requer
O MinIO roda como um único binário com dependências mínimas. Para uma instância pequena do Mastodon, uma máquina virtual dedicada ou um contêiner com 2 núcleos de CPU e 4 GB de RAM é suficiente. O MinIO precisa de um diretório de dados persistente, geralmente um volume montado ou um disco separado. O servidor MinIO escuta na porta 9000 para a API S3 e na porta 9001 para o console web. Você deve abrir essas portas no firewall se elas não estiverem na mesma máquina que o Mastodon.
Pré-requisitos Antes de Começar
Este guia assume que você tem o seguinte pronto:
- Uma instância do Mastodon já em execução no Ubuntu 22.04
- Acesso root ou sudo ao servidor Mastodon
- Um servidor ou máquina virtual separada para o MinIO (ou você pode instalar o MinIO na mesma máquina se tiver espaço em disco suficiente)
- Um endereço IP estático ou nome DNS para o servidor MinIO
- Portas 9000 e 9001 abertas no firewall do servidor MinIO
Passos para Instalar e Configurar o MinIO para Mastodon
- Baixe e instale o binário do servidor MinIO no Ubuntu 22.04
Acesse via SSH seu servidor MinIO. Execute os seguintes comandos para baixar o binário do MinIO, torná-lo executável e movê-lo para /usr/local/bin:wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/ - Crie um usuário de sistema e diretório de dados para o MinIO
Crie um usuário de sistema dedicado para o MinIO:sudo useradd -r minio-user -s /sbin/nologin. Crie o diretório de dados:sudo mkdir -p /data/minio. Defina a propriedade:sudo chown minio-user:minio-user /data/minio. - Configure o arquivo de ambiente do MinIO
Crie ou edite/etc/default/miniocom estes valores:MINIO_VOLUMES="/data/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=YourStrongPassword123
SubstituaYourStrongPassword123por uma senha forte. O usuário root e a senha são usados para fazer login no Console MinIO. - Crie um arquivo de serviço systemd para o MinIO
Crie/etc/systemd/system/minio.servicecom este conteúdo:[Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target [Service] User=minio-user Group=minio-user EnvironmentFile=-/etc/default/minio ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS Restart=always LimitNOFILE=65536 [Install] WantedBy=multi-user.target
- Inicie e habilite o serviço MinIO
Executesudo systemctl daemon-reload, depoissudo systemctl start minio. Habilite o serviço para iniciar na inicialização:sudo systemctl enable minio. Verifique o status:sudo systemctl status minio. - Acesse o Console MinIO e crie um bucket
Abra um navegador web e vá parahttp://seu-ip-do-servidor-minio:9001. Faça login com o usuário root e senha do passo 3. Clique em Buckets no menu à esquerda, depois em Create Bucket. Nomeie o bucket comomastodone mantenha as configurações padrão. Clique em Create. - Gere chaves de acesso para o Mastodon
No Console MinIO, clique em Access Keys no menu à esquerda, depois em Create Access Key. Copie os valores de Access Key e Secret Key. Armazene-os com segurança; você não verá a chave secreta novamente. - Edite o arquivo .env.production do Mastodon
No seu servidor Mastodon, abra/home/mastodon/live/.env.productioncom sudo. Adicione ou atualize estas linhas:S3_ENABLED=true S3_BUCKET=mastodon AWS_ACCESS_KEY_ID=sua-access-key-do-passo-7 AWS_SECRET_ACCESS_KEY=sua-secret-key-do-passo-7 S3_ENDPOINT=http://seu-ip-do-servidor-minio:9000 S3_PROTOCOL=http S3_HOSTNAME=seu-ip-do-servidor-minio:9000 S3_ALIAS_HOST=seu-ip-do-servidor-minio:9000
Se seu servidor MinIO usar HTTPS, altere
S3_PROTOCOLparahttpse ajuste o hostname conforme necessário. - Reinicie os serviços do Mastodon
Execute estes comandos para aplicar as alterações:sudo systemctl restart mastodon-web
sudo systemctl restart mastodon-sidekiq
sudo systemctl restart mastodon-streaming - Teste se os uploads de mídia vão para o MinIO
Faça login em sua instância Mastodon como qualquer usuário. Envie uma imagem em uma nova postagem. Após postar, abra o Console MinIO, clique em Buckets, depois clique no bucketmastodon. Você deve ver o arquivo enviado aparecer dentro de uma estrutura de pastas.
Problemas Comuns Após Configurar o MinIO com Mastodon
Uploads de Mídia Falham com Erro 403 Forbidden
Esse erro geralmente significa que a chave de acesso ou chave secreta está errada, ou as permissões do bucket estão incorretas. Verifique se as chaves em .env.production correspondem às geradas no Console MinIO. Também confirme que o nome do bucket é exatamente mastodon e que a política do bucket permite acesso de leitura público. No Console MinIO, vá ao bucket mastodon, clique em Anonymous e defina Read Only para o bucket e seu conteúdo.
Mastodon Não Consegue Atingir o Servidor MinIO
Se o Mastodon não conseguir conectar ao MinIO, verifique a conectividade de rede entre os dois servidores. Do servidor Mastodon, execute curl http://seu-ip-do-servidor-minio:9000. Você deve obter uma resposta XML. Se a conexão expirar, garanta que o firewall do servidor MinIO permita tráfego de entrada na porta 9000. Também confirme que o serviço MinIO está em execução: sudo systemctl status minio.
Arquivos de Mídia Existentes Não São Migrados para o MinIO
Esta configuração não move automaticamente os arquivos locais existentes para o MinIO. Para migrar mídias existentes, você deve copiar o conteúdo de /home/mastodon/live/public/system para o bucket MinIO usando uma ferramenta compatível com S3 como aws-cli ou mc (o cliente MinIO). Após copiar, atualize os registros do banco de dados para apontar para as novas URLs. Este é um passo avançado e deve ser testado em uma instância de teste primeiro.
Armazenamento Local vs Armazenamento de Objetos MinIO para Mastodon
| Item | Armazenamento Local | Armazenamento de Objetos MinIO |
|---|---|---|
| Localização do armazenamento | Disco do servidor de aplicação | Servidor ou volume separado |
| Escalabilidade | Limitada pelos slots de disco do servidor | Adicione discos ou nós independentemente |
| Complexidade de backup | Deve incluir todo o diretório public/system | Use ferramentas S3 para backups incrementais |
| Desempenho | I/O de disco local direto | Dependente de rede, mas pode ser mais rápido com hardware dedicado |
| Custo | Nenhum custo extra de software; requer espaço em disco | Código aberto gratuito; precisa de servidor ou VM separado |
Após concluir esta configuração, sua instância do Mastodon armazenará todos os novos uploads de mídia no MinIO. Isso separa a mídia do servidor de aplicação, facilitando backups e escalabilidade. Em seguida, configure o MinIO com TLS usando um proxy reverso como Nginx para servir mídia via HTTPS. Uma dica avançada: configure o MinIO em modo distribuído em vários nós para alta disponibilidade e replicação automática.