*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

minio illustration for: Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • 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 the cloud provider.
  • 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.

				
					
[environment local]

ssh &lt;^&gt;sammy&lt;^&gt;@&lt;^&gt;your_server_ip&lt;^&gt;

				
			

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:

				
					
[secondary_label 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%[===================&gt;] 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/&lt;^&gt;minio&lt;^&gt;

				
			

Conceda la propiedad de ese directorio a minio-user:

				
					
sudo chown minio-user:minio-user /usr/local/share/&lt;^&gt;minio&lt;^&gt;

				
			

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/&lt;^&gt;minio&lt;^&gt;

				
			

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/&lt;^&gt;minio&lt;^&gt;

				
			

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:

				
					
[label /etc/default/minio]

MINIO_ACCESS_KEY="&lt;^&gt;minio&lt;^&gt;"

MINIO_VOLUMES="&lt;^&gt;/usr/local/share/minio/&lt;^&gt;"

MINIO_OPTS="-C &lt;^&gt;/etc/minio&lt;^&gt; --address &lt;^&gt;your_server_ip&lt;^&gt;:&lt;^&gt;9000&lt;^&gt;"

MINIO_SECRET_KEY="&lt;^&gt;miniostorage&lt;^&gt;"

				
			

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:

				
					
[secondary_label 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:

				
					
[label /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:

				
					
[secondary_label 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:

				
					
[secondary_label Output]

● minio.service - MinIO

 Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)

 Active: &lt;^&gt;active (running)&lt;^&gt; 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 &lt;^&gt;your_server_IP&lt;^&gt;:&lt;^&gt;9000&lt;^&gt; /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://&lt;^&gt;your_server_IP&lt;^&gt;:&lt;^&gt;9000&lt;^&gt;

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://&lt;^&gt;your_server_IP&lt;^&gt;:&lt;^&gt;9000&lt;^&gt;

...

				
			

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 &lt;^&gt;9000&lt;^&gt;

				
			

Luego, habilite el firewall:

				
					
sudo ufw enable

				
			

Verá el siguiente mensaje:

				
					
[secondary_label Output]

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

				
			

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

				
					
[secondary_label 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:

				
					
[secondary_label 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:

				
					
[secondary_label 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.&lt;^&gt;your_domain&lt;^&gt;

				
			

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

				
					
[secondary_label 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:

				
					
[secondary_label 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:

				
					
[secondary_label 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.&lt;^&gt;your_domain_name&lt;^&gt;/privkey.pem &lt;^&gt;/etc/minio&lt;^&gt;/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.&lt;^&gt;your_domain_name&lt;^&gt;/fullchain.pem &lt;^&gt;/etc/minio&lt;^&gt;/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 &lt;^&gt;/etc/minio&lt;^&gt;/certs/private.key

				
			

Luego, con public.crt:

				
					
sudo chown minio-user:minio-user &lt;^&gt;/etc/minio&lt;^&gt;/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:

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.

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 the cloud provider 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.