MinIO: Armazenamento Objeto S3 Auto-Hospedado – Guia Completo!

Precisa de um sistema de armazenamento de objetos para hospedar no seu próprio servidor?

Acredito que sim!

Existem diversas opções de armazenamento de objetos baseadas em nuvem, como o AWS S3 e outros serviços similares. No entanto, se você precisa ter seus dados hospedados em sua própria infraestrutura, o MinIO pode ser a solução ideal para o seu data center.

MinIO é um software de armazenamento de objetos distribuído, de código aberto e compatível com S3, muito popular. É uma solução robusta, projetada para atender às necessidades de empresas, e se destaca pelo seu alto desempenho.

O MinIO pode ser utilizado em diversas aplicações, desde um simples aplicativo web até grandes projetos de distribuição de dados para análise e aprendizado de máquina. Sua versatilidade o torna útil em muitos cenários diferentes, incluindo:

  • Armazenamento padrão de arquivos.
  • Distribuição de dados em múltiplas nuvens.
  • Recuperação de desastres.
  • Análise de dados.

Será que este software é muito pesado?

Não, o MinIO possui um tamanho reduzido de cerca de 50 MB e é totalmente compatível com o Kubernetes. Ele armazena dados e metadados como objetos, o que elimina a necessidade de um banco de dados ou software adicional para gerenciar os metadados, resultando em melhor desempenho.

Abaixo está uma representação da arquitetura, conforme exibida no site oficial.

Vamos explorar alguns dos seus recursos mais notáveis:

  • Alto Desempenho: Como o próprio nome sugere, o MinIO se destaca pelo seu desempenho, com velocidades de leitura/gravação de aproximadamente 170 GB/s.
  • Escalabilidade: Permite o uso em cluster e pode ser dimensionado de acordo com as suas necessidades.
  • Nativo da Nuvem: Projetado para ambientes de nuvem.
  • Proteção de Dados: Utiliza o método de código Erasure para proteção de dados.
  • Criptografia: Suporta diversos métodos de criptografia, incluindo AES-CBC, AES-256-GCM, ChaCha20.
  • Compatibilidade com KMS: Compatível com sistemas de gerenciamento de chaves (KMS) comuns.
  • Gerenciamento de Identidade: Permite o gerenciamento de aplicações e identidades de usuário.
  • Notificação de Eventos: Oferece suporte a notificações de eventos.
  • Federação: Possibilita a federação utilizando etcd e CoreDNS.

O MinIO é uma excelente opção para armazenamento definido por software. Vamos agora explorar como configurá-lo.

Instalação do Servidor MinIO

Você pode instalar o MinIO em sistemas Linux, Windows, macOS e também através do Kubernetes. Se preferir, é possível compilar o software a partir do código fonte, caso você tenha o Golang instalado.

Para este exemplo, a instalação será realizada em um servidor CentOS hospedado na Kamatera.

  • Acesse o seu servidor.
  • Crie uma pasta no sistema de arquivos desejado. Por exemplo: minio-servidor.
  • Navegue até a pasta recém-criada e execute o seguinte comando wget:
wget https://dl.min.io/server/minio/release/linux-amd64/minio

O comando acima irá baixar o arquivo binário do MinIO. O resultado deve ser algo como:

-rw-r--r--  1 root root 48271360 Oct 18 21:57 minio

Torne o arquivo executável com o comando chmod:

chmod 755 minio

Agora, vamos iniciar o MinIO como servidor:

./minio server /data &

O diretório /data especificado acima será utilizado pelo MinIO para armazenar os objetos.

A inicialização é rápida e você deverá ver informações similares às seguintes:

Endpoint:  http://xx.71.141.xx:9000 http://127.0.0.1:9000      
AccessKey: minioadmin 
SecretKey: minioadmin 

Browser Access:
   http://xx.71.141.xx:9000 http://127.0.0.1:9000      

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc alias set myminio http://xx.71.141.xx:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

Acesse o MinIO através do navegador utilizando as credenciais padrão: minioadmin:minioadmin

A interface é organizada e intuitiva, mas antes de qualquer coisa, é crucial alterar as credenciais padrão para evitar riscos de segurança. Não existe uma opção para alterar as credenciais de administrador através do navegador, mas é possível fazer isso através de variáveis de ambiente.

Para alterar as credenciais padrão, defina as variáveis de acesso e chave secreta conforme abaixo, e em seguida inicie o MinIO novamente:

export MINIO_ACCESS_KEY=etechpt.com
export MINIO_SECRET_KEY=geekpassword
./minio server /data &

Após essa mudança, o aviso sobre a detecção de credenciais padrão não deverá mais aparecer.

Agora, vamos tentar fazer upload de alguns arquivos.

  • Clique no ícone “+” no canto inferior direito e crie um novo bucket.
  • Faça o upload de um arquivo de teste. Ele será exibido imediatamente no navegador.

E no servidor, você verá algo como:

[[email protected] geekflare]# ls -ltr
total 4
-rw-r--r-- 1 root root 11 Oct 19 11:09 MinIO-Test.txt
[[email protected] geekflare]#

Ao clicar no botão de compartilhamento de arquivo no navegador, você obterá um link compartilhável e poderá definir um tempo de expiração.

Cliente MinIO

O cliente MinIO (mc) oferece mais funcionalidades do que o aws-cli, permitindo gerenciar seu armazenamento de forma completa. Ele está disponível para Windows, macOS e Linux.

Para instalar no Linux, execute os seguintes comandos:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod 755 mc

Execute o comando mc para exibir a lista de comandos disponíveis:

[[email protected] ~]# ./mc
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove objects
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  policy     manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release
  
GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/root/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version
  
TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2020-10-03T02-54-56Z
[[email protected] ~]#

Vamos tentar listar o arquivo que fizemos o upload através do comando mc.

Primeiro, precisamos definir um alias para o armazenamento que queremos gerenciar:

[[email protected] ~]# ./mc alias set minio http://xx.71.141.xx:9000/ etechpt.com geekpassword
Added `minio` successfully.
[[email protected] ~]#
  • minio é o nome do alias. Você pode escolher o nome que preferir.
  • Substitua o endereço HTTP pelo seu endereço real.
  • Utilize o acesso e a chave secreta que você configurou.

Agora, para listar os arquivos, utilize o comando ls conforme abaixo:

[[email protected] ~]# ./mc ls --recursive minio 
[2020-10-19 11:09:06 UTC]    11B etechpt.com/MinIO-Test.txt
[[email protected] ~]#

Perfeito, tudo funcionando!

Você pode realizar diversas operações através do cliente. Além de gerenciar o MinIO, também é possível gerenciar o GCS, AWS S3 e Azure.

Consulte o guia de início rápido do cliente para mais detalhes.

SDK MinIO

Dependendo da sua stack de desenvolvimento, você pode interagir com o armazenamento de objetos via código utilizando o SDK. O MinIO oferece SDKs para Go, Python, Node.js, .NET, Haskell e Java.

Gateway MinIO

O Gateway MinIO permite adicionar S3, Azure, NAS ou HDFS, usufruindo do navegador MinIO e do cache de disco.

Conclusão

Se você busca por uma solução de armazenamento de objetos privada, híbrida ou multi-cloud, o MinIO se apresenta como uma opção promissora. Experimente e você poderá se surpreender. Para fins de teste, você pode obter uma VM MinIO da Kamatera ou instalá-lo em qualquer servidor cloud de sua preferência.