Tutorial

Cómo configurar un servidor de almacenamiento de objetos con Minio en Ubuntu 18.04

Open SourceObject StorageUbuntu 18.04

El autor seleccionó a Open Internet/Free Speech Fund para recibir una donación como parte del programa Write for DOnations.

Introducción

Desde las soluciones de copia de seguridad basadas en la nube hasta las redes de entrega de contenido (CDN) de alta disponibilidad, la capacidad de almacenar datos de objetos no estructurados y hacer que sean accesibles a través de API HTTP, lo que se conoce como almacenamiento de objetos, se ha convertido en una parte integral del ámbito de la tecnología moderna.

Minio es un servidor de almacenamiento de objetos de código abierto compatible con el servicio de almacenamiento en la nube de Amazon-S3. Las aplicaciones configuradas para comunicarse con Amazon S3 también se pueden configurar para hacerlo con Minio, lo cual permite que Minio sea una alternativa viable a S3 cuando se desea obtener más control sobre el servidor de almacenamiento de objetos. El servicio almacena datos no estructurados, como fotos, videos, archivos de registro, copias de seguridad e imágenes de contenedores o VM, e, incluso, puede proporcionar un único servidor de almacenamiento de objetos que agrupa varias unidades de muchos servidores.

Minio se escribe en Go, cuenta con un cliente de línea de comandos más una interfaz de navegador y admite un servicio de colas simple para objetivos del protocolo avanzado de colas de mensajes (AMQP), Elasticsearch, Redis, NATS y PostgreSQL.  Por todas estas razones, aprender a configurar un servidor de almacenamiento de objetos de Minio puede añadir mucha flexibilidad y utilidad a su proyecto.

En este tutorial, hará lo siguiente:

  • Instalará el servidor Minio en su servidor de Ubuntu 18.04 y lo configurará como servicio systemd.

  • Configurará un certificado SSL/TLS con Let´s Encrypt para garantizar la comunicación entre el servidor y el cliente.

  • Accederá a la interfaz de navegador de Minio a través de HTTPS para usar y administrar el servidor.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Un servidor de Ubuntu 18.04 configurado conforme a nuestro tutorial de configuración inicial para servidores de Ubuntu 18.04, un usuario sudo no root y un firewall.

  • Un nombre de dominio registrado por completo. Puede adquirir uno en Namecheap u obtener uno de forma gratuita en Freenom. En este tutorial, su dominio se representará como your_domain.

  • Los siguientes registros de DNS configurados para su servidor Minio. Puede consultar nuestra documentación de registros de DNS para obtener información detallada sobre cómo añadirlos a un Droplet de DigitalOcean.

    • Un registro A con el nombre de su servidor (por ejemplo, minio-server.your_domain) orientado a la dirección de IPv4 de su servidor de objetos.
    • (Opcional) Si desea que sea posible acceder a su servidor mediante IPv6, necesitará un registro AAAA con el nombre de su servidor orientado a la dirección IPv6 de su servidor.

Paso 1: Instalar y configurar el servidor Minio

Puede instalar el servidor Minio compilando el código fuente o a través de un archivo binario. Para instalarlo desde la fuente, debe tener, como mínimo, Go 1.12 instalado en su sistema.

En este paso, instalará el servidor a través del binario previamente compilado y, luego, configurará el servidor Minio.

Primero, inicie sesión en su servidor y sustituya sammy por su nombre de usuario y your_server_ip por la dirección IP de su servidor de Ubuntu 18.04.

  • ssh sammy@your_server_ip

Si no actualizó la base de datos de paquetes recientemente, hágalo ahora:

  • sudo apt update

A continuación, descargue el archivo binario del servidor Minio del sitio web oficial:

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

Obtendrá un resultado similar al siguiente:

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]

Una vez que la descarga haya finalizado, se ubicará un archivo llamado minio en su directorio de trabajo. Utilice el siguiente comando para que se pueda ejecutar:

  • sudo chmod +x minio

Ahora, mueva el archivo al directorio /usr/local/bin, donde la secuencia de comandos de inicio systemd de Minio espera encontrarlo:

  • sudo mv minio /usr/local/bin

Esto nos permitirá escribir un archivo de unidad de servicio más adelante en este tutorial para ejecutar Minio de forma automática durante el inicio.

Por motivos de seguridad, es mejor evitar ejecutar el servidor Minio como root. Esto limitará el daño al que su sistema se expondrá si se ve comprometido. Debido a que la secuencia de comandos systemd que usará en el paso 2 busca una cuenta de usuario y un grupo denominado minio-user, se creará un nuevo usuario con este nombre:

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

En este comando, utilizó el indicador -s para establecer /sbin/nologin como shell para minio-user. Este es un shell que no permite el inicio de sesión de usuario, que no es necesario para minio-user.

A continuación, cambie la propiedad del binario de Minio a minio-user:

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

Luego, creará un directorio donde Minio almacenará archivos. Esta será la ubicación de almacenamiento de los depósitos que usará más adelante para organizar los objetos que almacenará en su servidor Minio. En este tutorial, el directorio recibirá el nombre minio:

  • sudo mkdir /usr/local/share/minio

Conceda la propiedad de ese directorio a minio-user:

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

La mayoría de los archivos de configuración del servidor se almacenan en el directorio /etc. Por ello, debe crear el archivo de configuración de Minio allí:

  • sudo mkdir /etc/minio

Conceda, también, la propiedad de ese directorio a minio-user:

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

Utilice Nano o el editor de texto que desee para crear el archivo de entorno necesario para modificar la configuración predeterminada:

  • sudo nano /etc/default/minio

Una vez que el archivo esté abierto, añada las siguientes líneas para establecer algunas variables de entorno importantes en su archivo de entorno:

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

Veamos estas variables y los valores que estableció:

  • MINIO_ACCESS_KEY: establece la clave de acceso que usará para acceder a la interfaz de usuario del navegador de Minio.
  • MINIO_SECRET_KEY: establece la clave privada que usará para completar sus credenciales de inicio de sesión en la interfaz de Minio. En este tutorial, se fijó el valor en miniostorage, pero aconsejamos elegir una contraseña diferente, más compleja, para proteger su servidor.
  • MINIO_VOLUMES: identifica el directorio de almacenamiento que creó para sus depósitos.
  • MINIO_OPTS: cambia el lugar y la manera en que el servidor proporciona los datos. El indicador -C apunta Minio al directorio de configuración que debe usar, y el indicador --address indica a Minio la dirección de IP y el puerto con los que se debe establecer la vinculación. Si no se especifica la dirección IP, Minio se vinculará a cualquier dirección configurada en el servidor, incluso localhost y cualquier dirección IP relacionada con Docker. Por lo tanto, se recomienda especificar la dirección IP directamente aquí. Puede cambiar el puerto predeterminado 9000 si lo desea.

Por último, guarde y cierre el archivo de entorno cuando haya terminado de realizar cambios.

Con esto, instaló Minio y estableció algunas variables de entorno importantes. A continuación, configurará el servidor para que se ejecute como servicio de sistema.

Paso 2: Instalar la secuencia de comandos de inicio Systemd de Minio

En este paso, configurará el servidor Minio para que se administre como servicio systemd.

Primero, descargue el archivo descriptor del servicio de Minio oficial con el siguiente comando:

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

Obtendrá un resultado similar al siguiente:

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

Una vez que la descarga haya finalizado, se ubicará un archivo llamado minio.service en su directorio de trabajo.

Para verificar el contenido de minio.service antes de aplicarlo, ábralo en un editor de texto para ver su contenido:

  • nano minio.service

Con esto, se mostrará lo siguiente:

/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 archivo de unidad de servicio inicia el servidor Minio con el usuario minio-user que creó anteriormente. También implementa las variables de entorno que estableció en el último paso y hace que el servidor se ejecute automáticamente durante el inicio. Para obtener más información sobre los archivos de unidad systemd, consulte nuestra guía Información sobre unidades Systemd y archivos de unidad.

Una vez que haya analizado el contenido de la secuencia de comandos, cierre su editor de texto.

Systemd requiere que los archivos de unidad se almacenen en el directorio de configuración systemd, por lo tanto, mueva minio.service allí:

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

Luego, ejecute el siguiente comando para volver a cargar todas las unidades systemd:

  • sudo systemctl daemon-reload

Por último, habilite Minio para que se inicie en el arranque:

  • sudo systemctl enable minio

Esto generará el siguiente resultado:

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

Ahora que la secuencia de comandos systemd está instalada y configurada, es el momento de iniciar el servidor.

Paso 3: Iniciar el servidor Minio

En este paso, iniciará el servidor y modificará el firewall para permitir el acceso a través de la interfaz del navegador.

Primero, inicie el servidor Minio:

  • sudo systemctl start minio

A continuación, verifique el estado de Minio, la dirección IP a la que está vinculado, su consumo de memoria y otros aspectos mediante este comando:

  • sudo systemctl status minio

Verá el siguiente resultado:

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 ...

A continuación, habilite el acceso a través del firewall al servidor Minio en el puerto configurado. En este tutorial, se utiliza el puerto 9000.

Primero, añada esta regla:

  • sudo ufw allow 9000

Luego, habilite el firewall:

  • sudo ufw enable

Verá el siguiente mensaje:

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

Pulse y e INTRO para confirmarlo. Obtendrá el siguiente resultado:

Output
Firewall is active and enabled on system startup

Minio está listo para aceptar tráfico, pero antes de establecer conexión con el servidor protegerá la comunicación al instalar un certificado SSL/TLS.

Paso 4: Proteger el acceso a su servidor Minio con un certificado TLS

En este paso, protegerá el acceso a su servidor Minio con una clave privada y un certificado público obtenido de una autoridad de certificación (CA); en este caso, Let´s Encrypt. Para obtener un certificado SSL gratuito, usará Certbot.

Primero, permita el acceso HTTP y HTTPS a través de su firewall. Para hacerlo, abra el puerto 80, que es el puerto para HTTP:

  • sudo ufw allow 80

A continuación, abra el puerto 443 para HTTPS:

  • sudo ufw allow 443

Una vez que haya añadido estas reglas, compruebe el estado de su firewall con el siguiente comando:

  • sudo ufw status verbose

Obtendrá un resultado similar al siguiente:

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)

Esto confirma que los puertos 80 y 443 están abiertos, lo cual garantiza que su servidor acepta solicitudes de Internet.

A continuación, instalará Certbot. Debido a que Certbot mantiene un repositorio PPA independiente, deberá añadirlo a su lista de repositorios antes de instalar Certbot, como se indica a continuación:

Para prepararse para agregar el repositorio PPA, primero instale software-properties-common, un paquete de administración de PPA:

  • sudo apt install software-properties-common

Este paquete proporciona algunas secuencias de comandos útiles para añadir y eliminar PPA, y evitar hacer el proceso manualmente.

Ahora, añada el repositorio Universe:

  • sudo add-apt-repository universe

Este repositorio contiene software gratuito de código abierto cuyo mantenimiento está a cargo de la comunidad de Ubuntu, aunque esto no se realiza oficialmente a través de Canonical, la empresa desarrolladora de Ubuntu. Aquí es donde encontraremos el repositorio para Certbot.

A continuación, añada el repositorio de Certbot:

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

Recibirá el siguiente resultado:

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

Pulse INTRO para aceptar.

Luego, actualice la lista de paquetes:

  • sudo apt update

Por último, instale certbot:

  • sudo apt install certbot

A continuación, usará certbot para generar un nuevo certificado SSL.

Debido a que Ubuntu 18.04 todavía no admite la instalación automática, usará los comandos certonly y --standalone para obtener el certificado:

  • sudo certbot certonly --standalone -d minio-server.your_domain

--standalone significa que este certificado es para un servidor web independiente incorporado. Para obtener más información al respecto, consulte nuestro tutorial Cómo utilizar el modo independiente de Certbot para obtener certificados SSL de Let´s Encrypt en Ubuntu 18.04.

Recibirá el siguiente resultado:

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):

Añada su correo electrónico y presione INTRO.

Certbot le solicitará registrarse en 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:

Escriba A y presione ENTER para aceptar.

A continuación, se le preguntará si está dispuesto a compartir su correo electrónico con 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:

Una vez que responda Y o N, se generarán y almacenarán sus claves públicas y privadas en el directorio /etc/letsencrypt/live/minio-server.your_domain_name.

A continuación, copie estos dos archivos (privkey.pem y fullchain.pem) al directorio certs, en la carpeta de configuración del servidor Minio, que es /etc/minio en este tutorial. Utilice lo siguiente para copiar privkey.pem y cambiar el nombre del archivo private.key.

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

Luego, realice lo mismo para fullchain.pem y asigne el nombre public.crt al resultado:

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

Ahora, cambie la propiedad de los archivos a minio-user. Primero, hágalo con private.key:

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

Luego, con public.crt:

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

Reinstalará el servidor Minio para que reconozca el certificado y se inicie con HTTPS:

  • sudo systemctl restart minio

Los certificados de Let’s Encrypt son válidos únicamente por noventa días. El propósito de esto es incentivar a los usuarios a automatizar sus procesos de renovación de certificados. El paquete de Certbot que instaló añade automáticamente una secuencia de comandos de renovación a /etc/cron.d. Esta secuencia de comandos se ejecuta dos veces al día y renovará de forma automática cualquier certificado que caduque en treinta o menos días.

Con esto, la conexión de Minio ahora estará protegida y el certificado SSL/TLS se renovará automáticamente. En el siguiente paso, establecerá conexión con Minio a través del navegador para usar el servidor.

Paso 5: Conectarse de forma segura a la interfaz web de Minio con HTTPS

En este paso, se conectará de forma segura a la interfaz web de Minio a través de HTTPS, y luego creará depósitos en los que cargará objetos.

Acceda a la interfaz web apuntando su navegador a https://minio-server.your_domain:9000.

Verá la pantalla de inicio de sesión del servidor Minio:

Pantalla de inicio de sesión de Minio

Ahora, inicie sesión en la interfaz principal ingresando sus credenciales. En Acces Key, ingrese la MINIO_ACCESS_KEY que configuró en el archivo de entorno /etc/default/minio, en el paso 1. En Secret Key, ingrese la MINIO_SECRET_KEY que configuró en el mismo archivo. Una vez que haya ingresado las credenciales, haga clic en el botón redondo que tiene la flecha y se halla directamente debajo de los campos de entrada.

Luego, se le presentará la interfaz de usuario de Minio. Para crear un nuevo depósito en el que pueda almacenar objetos, haga clic en el botón rojo claro + en la parte inferior derecha de la interfaz principal para acceder a dos botones amarillos adicionales.

Interfaz principal de Minio

Haga clic en el botón amarillo del medio, ingrese un nombre para su nuevo depósito en el mensaje y pulse la tecla INTRO para guardar su respuesta. Su nuevo depósito está listo para usarse para almacenamiento.

Nota: Al asignar un nombre a su depósito de Minio, asegúrese de que solo contenga letras minúsculas, números o guiones. Minio limita las convenciones de nomenclatura de los depósitos para que sean compatibles con las normas de AWS S3.

Cuando desee añadir objetos en su depósito, haga clic en el mismo botón rojo claro de antes y luego en el botón amarillo superior para abrir un mensaje de carga de archivos.

En este punto, trabajó en toda la interfaz web básica de creación de depósitos y carga objetos.

Conclusión

Ahora, dispondrá de su propio servidor de almacenamiento de objetos Minio al que podrá conectarse de forma segura desde la interfaz web con un certificado SSL/TLS de Let´s Encrypt. De forma opcional, posiblemente le convenga considerar los clientes de escritorio de Minio para FreeBSD, Linux, Mac y Windows como alternativas para usar y administrar su servidor de almacenamiento de objetos.

Además, si desea aumentar la capacidad de almacenamiento de su instalación de Minio más allá de la capacidad de almacenamiento en disco de disco de su servidor, puede usar el servicio de almacenamiento de bloque de DigitalOcean para añadir un volumen a su servidor y ampliar la capacidad de almacenamiento hasta 80 TB.

Puede encontrar más información sobre Minio en el sitio web de documentación de proyectos. Si desea obtener más información sobre el almacenamiento de objetos, consulte nuestros tutoriales de almacenamiento de objetos.

Creative Commons License