Configuração de Armazenamento de Objetos MinIO Auto-hospedado para Mastodon
🔍 WiseChecker

Configuração de Armazenamento de Objetos MinIO Auto-hospedado para Mastodon

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.

ADVERTISEMENT

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

  1. 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/
  2. 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.
  3. Configure o arquivo de ambiente do MinIO
    Crie ou edite /etc/default/minio com estes valores:
    MINIO_VOLUMES="/data/minio"
    MINIO_OPTS="--console-address :9001"
    MINIO_ROOT_USER=minioadmin
    MINIO_ROOT_PASSWORD=YourStrongPassword123

    Substitua YourStrongPassword123 por uma senha forte. O usuário root e a senha são usados para fazer login no Console MinIO.
  4. Crie um arquivo de serviço systemd para o MinIO
    Crie /etc/systemd/system/minio.service com 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
  5. Inicie e habilite o serviço MinIO
    Execute sudo systemctl daemon-reload, depois sudo systemctl start minio. Habilite o serviço para iniciar na inicialização: sudo systemctl enable minio. Verifique o status: sudo systemctl status minio.
  6. Acesse o Console MinIO e crie um bucket
    Abra um navegador web e vá para http://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 como mastodon e mantenha as configurações padrão. Clique em Create.
  7. 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.
  8. Edite o arquivo .env.production do Mastodon
    No seu servidor Mastodon, abra /home/mastodon/live/.env.production com 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_PROTOCOL para https e ajuste o hostname conforme necessário.

  9. 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
  10. 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 bucket mastodon. Você deve ver o arquivo enviado aparecer dentro de uma estrutura de pastas.

ADVERTISEMENT

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.

ADVERTISEMENT