Tutorial

Como Configurar um Servidor de Armazenamento de Objeto Usando o Minio no Ubuntu 18.04

Object StorageUbuntu 18.04

O autor escolheu o Open Internet/Free Speech Fund para receber uma doação como parte do programa Write for DOnations.

Introdução

De soluções de backup baseadas na nuvem até a alta disponibilidade redes de entrega de conteúdo (CDNs), a capacidade de armazenar blobs não estruturados de dados de objetos e torná-los acessíveis por meio de APIs HTTP, conhecidas como armazenamento de objeto ou object storage, tornou-se parte integrante do cenário da tecnologia moderna.

O Minio é um popular servidor de armazenamento de objetos open-source compatível com o Serviço de armazenamento em nuvem Amazon S3. As aplicações que foram configuradas para conversar com o Amazon S3 também podem ser configuradas para conversar com o Minio, permitindo que o Minio seja uma alternativa viável ao S3 se você quiser ter mais controle sobre o servidor de armazenamento de objetos. O serviço armazena dados não estruturados como fotos, vídeos, arquivos de log, backups e imagens de container/VM, e pode até mesmo fornecer um servidor de armazenamento de objeto único que agrupa várias unidades espalhadas por muitos servidores.

O Minio é escrito em Go, vem com um cliente de linha de comando mais uma interface web, e suporta serviço de enfileiramento simples para alvos com o protocolo Advanced Message Queuing (AMQP), Elasticsearch, Redis, NATS. Por todos esses motivos, aprender a configurar um servidor de armazenamento de objetos Minio pode adicionar uma ampla variedade de flexibilidade e utilidade ao seu projeto.

Neste tutorial, você irá:

  • Instalar o servidor Minio no seu servidor Ubuntu 18.04 e configurá-lo como um serviço systemd.

  • Configurar um certificado SSL/TLS usando o Let’s Encrypt para proteger a comunicação entre o servidor e o cliente.

  • Acessar a interface web do Minio via HTTPS para usar e administrar o servidor.

Pré-requisitos

Para concluir este tutorial, você precisará de:

  • Um servidor Ubuntu 18.04 configurado seguindo nosso tutorial de Configuração Inicial de servidor com Ubuntu 18.04, incluindo um usuário sudo não-root e um firewall.

  • Um nome de domínio totalmente qualificado. Você pode comprar um em Namecheap ou obter um gratuitamente em Freenom. Neste tutorial, seu domínio será representado como seu_domínio.

  • Os seguintes registros DNS configurados para o seu servidor Minio. Você pode seguir nossa documentação sobre registros DNS para obter detalhes sobre como adicioná-los a um Droplet da DigitalOcean.

    • Um registro A com o nome do servidor (exemplo: minio-server.seu_domínio) apontando para o endereço IPv4 do servidor de objetos.
    • (Opcional) Se você deseja que seu servidor seja acessível via IPv6, será necessário um registro AAAA com o nome do seu servidor apontando para o endereço IPv6 do servidor de objetos.

Passo 1 — Instalando e Configurando o Servidor Minio

Você pode instalar o servidor Minio compilando o código fonte ou através de um arquivo binário. Para instalá-lo a partir da fonte, você precisa ter pelo menos o Go 1.12 instalado em seu sistema.

Neste passo, você instalará o servidor através do binário pré-compilado e configurará o servidor Minio posteriormente.

Primeiro, efetue login no seu servidor, substituindo sammy pelo seu nome de usuário e ip_do_seu_servidor pelo endereço IP do seu servidor Ubuntu 18.04:

  • ssh sammy@ip_do_seu_servidor

Se você não atualizou o banco de dados de pacotes recentemente, atualize-o agora:

  • sudo apt update

Em seguida, baixe o arquivo binário do servidor Minio do site oficial:

  • wget https://dl.min.io/server/minio/release/linux-amd64/minio

Você receberá uma saída semelhante à seguinte:

Output
--2019-08-27 15:08:49-- https://dl.min.io/server/minio/release/linux-amd64/minio Resolving dl.min.io (dl.min.io)... 178.128.69.202 Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 44511616 (42M) [application/octet-stream] Saving to: ‘minio’ minio 100%[===================>] 42.45M 21.9MB/s in 1.9s 2019-08-27 15:08:51 (21.9 MB/s) - ‘minio’ saved [44511616/44511616]

Depois que o download terminar, um arquivo chamado minio estará no seu diretório de trabalho. Use o seguinte comando para torná-lo executável:

  • sudo chmod +x minio

Agora, mova o arquivo para o diretório /usr/local/bin, onde o script de inicialização systemd do Minio espera encontrá-lo:

  • sudo mv minio /usr/local/bin

Isso nos permitirá escrever um arquivo de unidade de serviço posteriormente neste tutorial para executar automaticamente o Minio na inicialização.

Por motivos de segurança, é melhor evitar a execução do servidor Minio como root. Isso limitará os danos que podem ser causados ao seu sistema se ele for comprometido. Como o script systemd que você usará no Passo 2 procura uma conta de usuário e um grupo chamado minio-user, crie um novo usuário com este nome:

  • sudo useradd -r minio-user -s /sbin/nologin

Neste comando, você usou a flag -s para definir /sbin/nologin como o shell para minio-user. Este é um shell que não permite o login do usuário, o que não é necessário para o minio-user.

Em seguida, altere a propriedade do binário do Minio para minio-user:

  • sudo chown minio-user:minio-user /usr/local/bin/minio

Em seguida, você criará um diretório onde o Minio armazenará arquivos. Este será o local de armazenamento para os buckets que você usará posteriormente para organizar os objetos que você armazena no servidor Minio. Este tutorial nomeará o diretório como minio:

  • sudo mkdir /usr/local/share/minio

Dê a propriedade desse diretório para o minio-user:

  • sudo chown minio-user:minio-user /usr/local/share/minio

A maioria dos arquivos de configuração do servidor é armazenada no diretório /etc, então crie seu arquivo de configuração do Minio lá:

  • sudo mkdir /etc/minio

Dê a propriedade desse diretório para o minio-user também:

  • sudo chown minio-user:minio-user /etc/minio

Use o Nano ou seu editor de texto favorito para criar o arquivo de ambiente necessário para modificar a configuração padrão:

  • sudo nano /etc/default/minio

Depois que o arquivo estiver aberto, adicione as seguintes linhas para definir algumas variáveis de ambiente importantes no seu arquivo de ambiente:

/etc/default/minio
MINIO_ACCESS_KEY="minio"
MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address ip_do_seu_servidor:9000"
MINIO_SECRET_KEY="miniostorage"

Vamos dar uma olhada nessas variáveis e nos valores que você define:

  • MINIO_ACCESS_KEY: Isso define a access key que você usará para acessar a interface web de usuário do Minio.
  • MINIO_SECRET_KEY: Isso define a chave privada que você usará para completar suas credenciais de login na interface do Minio. Este tutorial configurou o valor para miniostorage, mas recomendamos que você escolha uma senha diferente e mais complexa para proteger seu servidor.
  • MINIO_VOLUMES: Isso identifica o diretório de armazenamento que você criou para seus buckets.
  • MINIO_OPTS: Isso muda onde e como o servidor serve os dados. A flag -C aponta o Minio para o diretório de configuração que ele deve usar, enquanto a flag --address informa ao Minio o endereço IP e a porta na qual se conectar. Se o endereço IP não for especificado, o Minio será vinculado a todos os endereços configurados no servidor, incluindo localhost e quaisquer endereços IP relacionados ao Docker, portanto, é recomendável especificar diretamente o endereço IP aqui. A porta padrão 9000 pode ser alterada se você desejar.

Por fim, salve e feche o arquivo de ambiente quando terminar de fazer as alterações.

Agora você instalou o Minio e definiu algumas variáveis de ambiente importantes. Em seguida, você configurará o servidor para ser executado como um serviço do sistema.

Passo 2 — Instalando o Script de Inicialização Systemd do Minio

Neste passo, você configurará o servidor Minio para ser gerenciado como um serviço systemd.

Primeiro, faça o download do arquivo descritor de serviço oficial do Minio usando o seguinte comando.

  • curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

Você receberá uma saída semelhante à seguinte:

Output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 835 100 835 0 0 6139 0 --:--:-- --:--:-- --:--:-- 6139

Após o término do download, um arquivo chamado minio.service estará no seu diretório de trabalho.

Para auditar o conteúdo do arquivo minio.service antes de aplicá-lo, abra-o em um editor de texto para visualizar seu conteúdo:

  • nano minio.service

Isso mostrará o seguinte:

/etc/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user

EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"

ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

Este arquivo de unidade de serviço inicia o servidor Minio usando o usuário minio-user que você criou anteriormente. Ele também implementa as variáveis de ambiente definidas no último passo e faz o servidor executar automaticamente na inicialização. Para mais informações sobre arquivos de unidades do systemd, consulte nosso guia Understanding Systemd Units and Unit Files.

Depois de examinar o conteúdo do script, feche o seu editor de texto.

O Systemd requer que os arquivos de unidade sejam armazenados no diretório de configuração systemd, então mova o minio.service para lá:

  • sudo mv minio.service /etc/systemd/system

Em seguida, execute o seguinte comando para recarregar todas as unidades systemd:

  • sudo systemctl daemon-reload

Por fim, habilite o Minio para iniciar na inicialização:

  • sudo systemctl enable minio

Isso dará a seguinte saída:

Output
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

Agora que o script systemd está instalado e configurado, é hora de iniciar o servidor.

Passo 3 — Iniciando o Servidor Minio

Neste passo, você iniciará o servidor e modificará o firewall para permitir o acesso através da interface web.

Primeiro, inicie o servidor Minio:

  • sudo systemctl start minio

Em seguida, verifique o status do Minio, o endereço IP ao qual está vinculado, seu uso de memória e muito mais executando este comando:

  • sudo systemctl status minio

Você obterá a seguinte saída:

Output
● minio.service - MinIO Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-12-09 21:54:02 UTC; 46s ago Docs: https://docs.min.io Process: 3405 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCES Main PID: 3407 (minio) Tasks: 7 (limit: 1152) CGroup: /system.slice/minio.service └─3407 /usr/local/bin/minio server -C /etc/minio --address your_server_IP:9000 /usr/local/share/minio/ Dec 09 21:54:02 cart-Minion-Object-1804-1 systemd[1]: Started MinIO. Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Endpoint: http://your_server_IP:9000 Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: Browser Access: Dec 09 21:54:03 cart-Minion-Object-1804-1 minio[3407]: http://your_server_IP:9000 ...

Em seguida, habilite o acesso através do firewall ao servidor Minio na porta configurada. Neste tutorial, essa é a porta 9000.

Primeiro adicione a regra:

  • sudo ufw allow 9000

Em seguida, ative o firewall:

  • sudo ufw enable

Você receberá o seguinte prompt:

Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Pressione y e ENTER para confirmar. Você obterá a seguinte saída:

Output
Firewall is active and enabled on system startup

O Minio agora está pronto para aceitar tráfego, mas antes de se conectar ao servidor, você protegerá a comunicação instalando um certificado SSL/TLS.

Passo 4 — Protegendo o Acesso ao seu Servidor Minio com um Certificado TLS

Neste passo, você protegerá o acesso ao seu servidor Minio usando uma chave privada e um certificado público que foram obtidos de uma autoridade de certificação (CA), neste caso Let’s Encrypt. Para obter um certificado SSL gratuito, você usará o Certbot.

Primeiro, permita o acesso HTTP e HTTPS através do seu firewall. Para fazer isso, abra a porta 80, que é a porta para HTTP:

  • sudo ufw allow 80

Em seguida, abra a porta 443 para HTTPS:

  • sudo ufw allow 443

Depois de adicionar essas regras, verifique o status do seu firewall com o seguinte comando:

  • sudo ufw status verbose

Você receberá uma saída semelhante à seguinte:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp (OpenSSH) ALLOW IN Anywhere 9000 ALLOW IN Anywhere 443 ALLOW IN Anywhere 80 ALLOW IN Anywhere 22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6) 9000 (v6) ALLOW IN Anywhere (v6) 443 (v6) ALLOW IN Anywhere (v6) 80 (v6) ALLOW IN Anywhere (v6)

Isso confirma que as portas 80 e 443 estão abertas, garantindo que o servidor aceite solicitações da Internet.

Em seguida, você instalará o Certbot. Como o Certbot mantém um repositório PPA separado, você primeiro precisará adicioná-lo à sua lista de repositórios antes de instalar o Certbot, como mostrado:

Para se preparar para adicionar o repositório PPA, primeiro instale software-properties-common, um pacote para o gerenciamento de PPAs:

  • sudo apt install software-properties-common

Este pacote fornece alguns scripts úteis para adicionar e remover PPAs em vez de fazê-lo manualmente.

Agora adicione o repositório Universe:

  • sudo add-apt-repository universe

Este repositório contém software livre e de código aberto mantido pela comunidade Ubuntu, mas não é oficialmente mantido pela Canonical, os desenvolvedores do Ubuntu. É aqui que encontraremos o repositório do Certbot.

Em seguida, adicione o repositório do Certbot:

  • sudo add-apt-repository ppa:certbot/certbot

Você receberá a seguinte saída:

Output
This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s). More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot Press [ENTER] to continue or ctrl-c to cancel adding it

Pressione ENTER para aceitar.

Atualize a lista de pacotes:

  • sudo apt update

Finalmente, instale o certbot:

  • sudo apt install certbot

Em seguida, você usará o certbot para gerar um novo certificado SSL.

Como o Ubuntu 18.04 ainda não suporta a instalação automática, você usará o comando certonly e --standalone para obter o certificado:

  • sudo certbot certonly --standalone -d minio-server.seu_domínio

--standalone significa que este certificado é para um servidor web interno independente. Para mais informações sobre isso, consulte nosso tutorial How To Use Certbot Standalone Mode to Retrieve Let’s Encrypt SSL Certificates on Ubuntu 18.04.

Você receberá a seguinte saída:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):

Adicione seu email e pressione ENTER.

O Certbot solicitará que você se registre no Let’s Encrypt:

Output
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel:

Digite A e pressione ENTER para concordar.

Em seguida, você será perguntado se deseja compartilhar seu e-mail com a Electronic Frontier Foundation:

Output
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o:

Depois de responder Y ou N, suas chaves públicas e privadas serão geradas e salvas no diretório /etc/letsencrypt/live/minio-server.seu_domínio.

Em seguida, copie esses dois arquivos (privkey.pem e fullchain.pem) para o diretório certs na pasta de configuração do servidor Minio, que é /etc/minio para este tutorial. Use o seguinte para copiar privkey.pem e renomear o arquivo private.key:

  • sudo cp /etc/letsencrypt/live/minio-server.seu_domínio/privkey.pem /etc/minio/certs/private.key

Em seguida, faça o mesmo para fullchain.pem, nomeando o resultado como public.crt:

  • sudo cp /etc/letsencrypt/live/minio-server.seu_domínio/fullchain.pem /etc/minio/certs/public.crt

Agora, altere a propriedade dos arquivos para minio-user. Primeiro, faça isso para private.key:

  • sudo chown minio-user:minio-user /etc/minio/certs/private.key

Em seguida, public.crt:

  • sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Reinicie o servidor Minio, para que ele fique ciente do certificado e comece a usar HTTPS:

  • sudo systemctl restart minio

Os certificados Let’s Encrypt são válidos apenas por noventa dias. Isso é para incentivar os usuários a automatizar seu processo de renovação de certificado. O pacote Certbot que você instalou adiciona automaticamente um script novo ao /etc/cron.d. Esse script é executado duas vezes por dia e renova automaticamente qualquer certificado que esteja dentro de trinta dias da expiração.

Com isso, a conexão do Minio agora está segura e o certificado SSL/TLS será renovado automaticamente para você. No próximo passo, você se conectará ao Minio através do navegador para usar o servidor.

Passo 5 — Conexão Segura à Interface Web do Minio Usando HTTPS

Neste passo, você se conectará com segurança à interface web do Minio via HTTPS e, em seguida, criará buckets e fará o upload de objetos para eles.

Acesse a interface web apontando o navegador para https://minio-server.seu_domínio:9000.

Você verá a tela de login do servidor Minio:

Minio login screen

Agora, faça login na interface principal inserindo suas credenciais. Para Access Key, digite a MINIO_ACCESS_KEY que você definiu no arquivo de ambiente /etc/default/minio no Passo 1. Para Secret Key, digite a MINIO_SECRET_KEY que você definiu nesse mesmo arquivo. Depois de inserir as credenciais, clique no botão redondo com a seta, diretamente abaixo dos campos de entrada.

Você será apresentado à interface de usuário do Minio. Para criar um novo bucket no qual você pode armazenar objetos, clique no botão vermelho claro + no canto inferior direito da interface principal para exibir dois botões amarelos adicionais.

Minio's main interface

Clique no botão amarelo do meio e digite um nome para o seu novo bucket no prompt, pressionando a tecla ENTER para salvar sua resposta. Seu novo bucket está pronto para ser usado para armazenamento.

Nota: Ao nomear seu bucket no Minio, verifique se o seu nome contém apenas letras minúsculas, números ou hífens. O Minio limita as convenções de nomenclatura de buckets para ser compatível com os padrões do AWS S3.

Quando você quiser adicionar objetos ao seu bucket, clique no mesmo botão vermelho claro de antes e clique no botão amarelo superior para abrir um prompt de upload de arquivo.

Neste ponto, você trabalhou em toda a interface web básica para criar buckets e fazer upload de objetos.

Conclusão

Agora você tem seu próprio servidor Minio de armazenamento de objetos ao qual pode se conectar com segurança a partir da interface web usando um certificado Let’s Encrypt SSL/TLS. Opcionalmente, você pode querer olhar para o Minio desktop clients para FreeBSD, Linux, Mac, e Windows como uma maneira alternativa de usar e administrar seu servidor de armazenamento de objetos.

Além disso, se você quiser aumentar a capacidade de armazenamento da sua instalação do Minio para além do tamanho do disco do servidor, use o Serviço de armazenamento em bloco da DigitalOcean para anexar um volume ao seu servidor, estendendo a capacidade de armazenamento em até 80 TB.

Mais informações sobre o Minio estão disponíveis no site de documentação do projeto. Se você quiser saber mais sobre armazenamento de objetos, navegue em Tutoriais sobre armazenamento de objetos.

0 Comments

Creative Commons License