Garage S3: A Alternativa Open-Source ao MinIO/S3 – Com Instalação Prática e Laboratório de Testes

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:

  1. Instalem o Garage em múltiplas máquinas
  2. Configurem cada uma com o mesmo rpc_secret
  3. Adicionem os IPs dos outros nós em bootstrap_peers
  4. Configurem o layout com múltiplas zonas
  5. 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.