El autor seleccionó a Open Internet/Free Speech Fund para recibir una donación como parte del programa Write for DOnations.
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.
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.
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:
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.
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:
[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:
OutputCreated 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.
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:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)?
Pulse y
e INTRO
para confirmarlo. Obtendrá el siguiente resultado:
OutputFirewall 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.
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:
OutputStatus: 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:
OutputThis 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:
OutputSaving 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.
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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!