Olá a todos!
Hoje vamos falar de um tema que me deixa profundamente aborrecido com algumas software houses: Já algum tempo atrás o MinIO decidiu remover funcionalidades críticas da sua versão Community Edition, deixando muitos de nós a procurar alternativas viáveis. O proverbial bait and switch.
Como eu, muita gente ficou particularmente lixada com o comportamento de quem geria o projeto, e é aqui que entra o Garage, um projeto francês que promete ser exatamente o que precisamos para os nossos laboratórios de S3.
O Problema com o MinIO: A História da Interface Desaparecida
Para quem não acompanhou o drama que aconteceu em maio de 2025, deixem-me resumir: o MinIO, que era uma das soluções mais populares para storage S3 self-hosted, decidiu remover a interface web de administração da sua versão gratuita. Sim, leram bem – a interface que usávamos para gerir buckets, configurar access keys e monitorizar o storage simplesmente desapareceu.
A mudança foi implementada na versão de maio de 2025, e a justificação foi simples: querem que paguemos pela versão AIStor. O problema? Muitos de nós estávamos a usar o MinIO precisamente porque era open-source e gratuito para ambientes de desenvolvimento, laboratórios e pequenas implementações.
A comunidade não ficou nada contente. Threads no GitHub, discussões acaloradas no Hacker News, e uma sensação geral de “bait-and-switch” – aquela táctica de nos dar algo gratuito e depois tirar funcionalidades essenciais para nos forçar a pagar.
Para projetos comerciais ou grandes empresas, talvez faça sentido pagar pelo MinIO Enterprise. Mas para quem quer aprender S3, montar um laboratório, ou simplesmente ter storage object self-hosted sem gastar centenas de euros por mês? Precisavamos de alternativas.
Entre o Garage: A Solução Francesa que Merece a Nossa Atenção
O Garage é um projeto desenvolvido pela Deuxfleurs, uma associação francesa focada em serviços self-hosted a pequena e média escala. E quando digo que este projeto é sério, não estou a exagerar – tem financiamento da União Europeia através do programa NGI (Next Generation Internet) e está em produção desde 2020.
O que torna o Garage especial?
Primeiro, é verdadeiramente open-source – licença AGPLv3, sem truques nem funcionalidades escondidas atrás de paywalls. Segundo, foi desenhado desde o início para ambientes distribuídos geograficamente. Isso significa que pode distribuir os vossos dados por diferentes localizações físicas e ainda assim manter tudo consistente e disponível.
Mas o mais importante para nós? É leve, simples de instalar, e não tem a complexidade desnecessária que encontramos noutras soluções. Um único binário, sem dependências externas, que funciona em qualquer distribuição Linux.
Porque o Garage é Perfeito para um Laboratório de S3
Antes de mergulharmos na instalação, deixem-me explicar porque é que o Garage faz tanto sentido para quem quer aprender, testar ou implementar uma solução de S3:
Compatibilidade S3: Implementa nativamente a API da Amazon S3, o que significa que qualquer ferramenta que funcione com AWS S3 vai funcionar com o Garage. Boto3, rclone, s3cmd, MinIO Client – tudo funciona.
Requisitos Mínimos: Não precisam de um datacenter para correr o Garage. Funciona perfeitamente num Raspberry Pi ou numa VM com 1GB de RAM. Para um laboratório de testes, isto é ouro.
Resiliência Inteligente: Foi desenhado para tolerar falhas de máquinas e problemas de rede. Podem ter três nós em localizações diferentes e o Garage mantém tudo sincronizado.
Zero Dependências: Um binário estático. Isso é tudo. Não há que instalar Java, Python, Node.js ou seja o que for. Download, chmod +x, e está pronto, siga para bingo.
Mãos à Obra: Instalação Prática do Garage
Vamos montar um ambiente de laboratório básico. Para este exemplo, vou usar uma máquina Debian, mas o processo é praticamente idêntico em qualquer distribuição.
Passo 1: Download e Instalação do Binário
Primeiro, vamos buscar a última versão do Garage:
# Criar um directório temporário
cd /tmp
# Download da última versão (verificar sempre a versão mais recente)
wget https://garagehq.deuxfleurs.fr/_releases/v1.0.1/x86_64-unknown-linux-musl/garage
# Verificar o hash SHA256 (sempre importante!)
wget https://garagehq.deuxfleurs.fr/_releases/v1.0.1/x86_64-unknown-linux-musl/garage.sha256sum
sha256sum -c garage.sha256sum
# Mover para um local no PATH e dar permissões de execução
sudo mv garage /usr/local/bin/
sudo chmod +x /usr/local/bin/garage
# Verificar se está tudo OK
garage --version
Se virem a versão do Garage a aparecer, estão no bom caminho!
Passo 2: Criar os Directórios de Dados
O Garage precisa de dois directórios: um para metadata e outro para os dados propriamente ditos. Pf não corram isto com utilizadores privilegiados 🙂
# Criar directórios
sudo mkdir -p /var/lib/garage/meta
sudo mkdir -p /var/lib/garage/data
# Ajustar permissões (vamos criar um user específico)
sudo useradd -r -s /bin/false garage
sudo chown -R garage:garage /var/lib/garage
Passo 3: Configuração Inicial
Agora vem a parte interessante – o ficheiro de configuração. Vamos criar um /etc/garage.toml com uma configuração simples mas funcional:
sudo vi /etc/garage.toml
Pastem o seguinte conteúdo:
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
# Modo de replicação - para um nó único usamos "none"
# Em produção usariam "3" para replicação em 3 nós
replication_mode = "none"
# Configuração RPC
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
# IMPORTANTE: Gerar uma chave secreta única
# Execute: openssl rand -hex 32
rpc_secret = "SUA_CHAVE_AQUI_GERADA_COM_OPENSSL"
# Lista de peers para bootstrap (vazio para single node)
bootstrap_peers = []
# Configuração da API S3
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"
# Configuração para servir websites estáticos via S3
[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"
# Configuração da API de administração
[admin]
api_bind_addr = "127.0.0.1:3903"
Atenção crítica: Não usem a chave de exemplo! Gerem uma nova com:
openssl rand -hex 32
Passo 4: Criar um Serviço Systemd
Para que o Garage inicie automaticamente, vamos criar um serviço systemd:
sudo vi /etc/systemd/system/garage.service
[Unit]
Description=Garage S3-Compatible Object Storage
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=garage
Group=garage
Environment="RUST_LOG=garage=info"
ExecStart=/usr/local/bin/garage server
Restart=always
RestartSec=10
# Segurança adicional
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/garage
[Install]
WantedBy=multi-user.target
Agora activamos e iniciamos:
sudo systemctl daemon-reload
sudo systemctl enable garage
sudo systemctl start garage
# Verificar o status
sudo systemctl status garage
Passo 5: Configurar o Layout do Cluster
Mesmo com apenas um nó, precisamos configurar o layout. Primeiro, vamos ver o ID do nosso nó:
garage status
Vão ver algo como:
==== HEALTHY NODES ====
ID Hostname Address Tag Zone Capacity
563e1ac825ee3323… localhost 127.0.0.1:3901 NO ROLE ASSIGNED
Copiem os primeiros caracteres do ID (por exemplo, 563e) e configurem:
# Atribuir o nó à zona dc1 com capacidade de 1GB (ajustem conforme necessário)
garage layout assign -z dc1 -c 10G 563e
# Aplicar o layout
garage layout apply
Nota importante: A capacidade (-c) deve ser em bytes, KB, MB, GB ou TB. Para um laboratório, 10GB é mais que suficiente. Se forem hoarders….
Passo 6: Criar o Primeiro Bucket e Key
Agora vem a parte divertida – vamos criar um bucket para testar:
# Criar um bucket
garage bucket create lab-bucket
# Verificar
garage bucket list
garage bucket info lab-bucket
Agora precisamos de uma chave de acesso:
# Criar uma key
garage key new --name lab-key
Vão receber algo como:
Key name: lab-key
Key ID: GK3515373e4c851ebaad366558
Secret key: 7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34
GUARDEM ESTAS CREDENCIAIS! Vão precisar delas para aceder ao bucket.
Agora damos permissões à key para aceder ao bucket:
garage bucket allow --read --write lab-bucket --key lab-key
Testando o Nosso Laboratório S3
Agora que temos tudo configurado, vamos testar. Vou mostrar três formas diferentes de interagir com o Garage.
Opção 1: MinIO Client (mc) (.!.)
Sim, ironicamente, o MinIO Client funciona perfeitamente com o Garage!
# Instalar o mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
# Configurar o alias (substituam pelas vossas credenciais)
mc alias set garage-lab http://localhost:3900 GK3515373e4c851ebaad366558 7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34 --api S3v4
# Definir a região
export MC_REGION=garage
# Testar!
echo "Hello Garage!" > test.txt mc cp test.txt garage-lab/lab-bucket/
mc ls garage-lab/lab-bucket/
mc cat garage-lab/lab-bucket/test.txt
Opção 2: AWS CLI
A AWS CLI também funciona perfeitamente:
# Instalar (se ainda não tiverem)
sudo apt install awscli
# Configurar
aws configure set aws_access_key_id GK3515373e4c851ebaad366558
aws configure set aws_secret_access_key 7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34
aws configure set default.region garage
# Usar com endpoint específico
aws --endpoint-url http://localhost:3900 s3 ls s3://lab-bucket
aws --endpoint-url http://localhost:3900 s3 cp test.txt s3://lab-bucket/
Casos de Uso para o Nosso Laboratório
Agora que temos o Garage a funcionar, o que podemos fazer com ele?
- Aprender S3 sem Custos AWS: Podem praticar todas as operações S3 sem medo de receber uma fatura no final do mês. Experimentem versioning, lifecycle policies, multipart uploads – tudo localmente.
- Backup de Desenvolvimento: Configurem os vossos scripts de backup para usarem o Garage em vez de serviços cloud. É perfeito para ambientes de teste.
- CI/CD Pipelines: Integrem o Garage nos vossos pipelines para armazenar artifacts, test reports, e builds.
- Hosting de Ficheiros Estáticos: Com a funcionalidade S3 Web, podem servir websites estáticos directamente do Garage.
- Testes de Aplicações: Se estão a desenvolver uma aplicação que usa S3, o Garage é perfeito para testes locais.
- Disaster Recovery Testing: Simulem falhas de nós, problemas de rede, e vejam como a vossa aplicação se comporta.
Expandindo para Múltiplos Nós – Muito interessante para quem como eu usa muito GlusterFS
Uma das grandes vantagens do Garage é a facilidade de expansão. Quando quiserem experimentar um cluster distribuído, a receita é muito simples:
- Instalem o Garage em múltiplas máquinas
- Configurem cada uma com o mesmo
rpc_secret - Adicionem os IPs dos outros nós em
bootstrap_peers - Configurem o layout com múltiplas zonas
- O Garage cuida da replicação automaticamente
Para um laboratório caseiro, podem usar três Raspberry Pi ou três VMs, cada uma numa “zona” diferente simulando diferentes datacenters.
Comparação Honesta: Garage vs MinIO
Vamos ser honestos – nem tudo são rosas:
O que o Garage faz melhor em relação ao MinIO
- Verdadeiramente open-source sem truques
- Arquitectura distribuída geo-replicada nativa
- Mais leve e com menos dependências
- Filosofia Unix: faz apenas uma coisa e faz bem
- Comunidade mais transparente e aberta
O que o MinIO ainda faz melhor (versão paga):
- Interface web mais polida
- Melhor documentação empresarial
- Mais features enterprise (encryption, IAM avançado)
- Maior ecossistema de ferramentas
- Suporte comercial estabelecido
Para laboratórios, aprendizagem, e implementações pequenas a médias? O Garage ganha facilmente. Para grandes empresas com orçamento para licenças? O MinIO pago ainda pode fazer sentido.
Monitorização e Troubleshooting
Como em tudo, problemas podem ocorrer e aqui vão algumas dicas para manter o vosso laboratório a funcionar:
Ver logs em tempo real:
sudo journalctl -u garage -f
Verificar o status do cluster:
garage status
garage stats
Backup da configuração:
# Façam backup regular do metadata!
sudo tar -czf garage-metadata-backup-$(date +%Y%m%d).tar.gz /var/lib/garage/meta
Recursos e Comunidade
Como qualquer projeto decente de opensource, o Garage tem uma comunidade ativa e acessível:
- Documentação oficial: https://garagehq.deuxfleurs.fr/
- Matrix chat: #garage:deuxfleurs.fr
- Repositório Git: https://git.deuxfleurs.fr/Deuxfleurs/garage
- Mirror GitHub: https://github.com/deuxfleurs-org/garage
A documentação é clara e bem organizada, e a comunidade no Matrix é bastante prestável.
Vale a Pena?
Absolutamente sim! O Garage não é apenas uma alternativa ao MinIO – em muitos aspectos, é uma solução mais alinhada com a filosofia open-source que muitos de nós defendemos.
Sim, perdemos a interface web bonita do MinIO. Mas ganhámos transparência, liberdade, e uma ferramenta que foi desenhada desde o início para ser distribuída e resiliente. E honestamente? Depois de configurarem tudo uma vez, vão interagir maioritariamente via CLI ou APIs de qualquer forma.
Para quem está a aprender S3, a montar laboratórios, ou simplesmente quer storage object self-hosted sem dramas, o Garage é uma escolha sólida. É rápido de configurar, leve nos recursos, e completamente transparente no seu funcionamento. A mudança forçada do MinIO acabou por ser uma bênção disfarçada – descobrimos o Garage, um projeto que merece muito mais atenção do que tem recebido.
Experimentem, brinquem com ele, partilhem as vossas experiências. E se encontrarem bugs ou tiverem sugestões, a comunidade está aberta a contribuições.
Até ao próximo post, divirtam-se com o vosso novo laboratório S3, e já sabem que se tiverem alguma duvida, ou alguma coisa não estiver bem feita, digam.
Sabem onde me encontrar.
Abraço
Nuno
Recursos Adicionais:
- Tutorial de deployment multi-nó: https://garagehq.deuxfleurs.fr/documentation/cookbook/real-world/
- Guia de integração com aplicações: https://garagehq.deuxfleurs.fr/cookbook/clients.html
- Build from source: https://garagehq.deuxfleurs.fr/cookbook/from_source.html
Nota de segurança: Este tutorial é para ambientes de laboratório. Para produção, implementem TLS, configurem firewalls adequadas, usem secrets management para as chaves, e sigam as best practices de segurança para a vossa organização.
