Introducción
Minio es un popular servidor de almacenamiento de objetos de código abierto compatible con el servicio de almacenamiento en la nube de Amazon S3. Las aplicaciones que se han configurado para comunicarse con Amazon S3 también se pueden configurar para comunicarse con Minio, lo que permite que Minio sea una alternativa viable a S3 si desea tener 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 /máquinas virtuales, e incluso puede proporcionar un servidor de almacenamiento de objetos único que agrupa varias unidades distribuidas en muchos servidores.
Minio está escrito en Go, viene con un cliente de línea de comandos más una interfaz de navegador y es compatible con un servicio de cola simple para servicios como el Protocolo de cola de mensajes avanzado (AMQP), Elasticsearch, Redis, NATS y PostgreSQL. Por todas estas razones, aprender a configurar un servidor de almacenamiento de objetos Minio puede agregar una gran cantidad de flexibilidad y utilidad a su proyecto.
En este tutorial, deberá:
- Instale el servidor Minio en su servidor Debian 10.
- Configure un certificado SSL /TLS usando Let's Encrypt para proteger las comunicaciones entre el servidor y el cliente.
- Acceda a la interfaz del navegador Minio a través de HTTPS para usar y administrar el servidor.
Prerrequisitos
Para completar este tutorial, necesitará:
- Un servidor Debian 10 configurado con un usuario sudo no root y un firewall.
- Un nombre de dominio completamente registrado. En este tutorial, su dominio se representará como
your_domain
.
Si desea instalar Minio en un servidor remoto, continúe leyendo; de lo contrario, si desea instalar el compilador GCC en la computadora local, omita el primer párrafo "Conexión al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Paso 1: instalar y configurar el servidor Minio
Puede instalar el servidor Minio compilando el código fuente o utilizando un archivo binario. Para instalarlo desde la fuente, debe tener al menos Go 1.12 instalado en su sistema.
En este paso, instalará el servidor a través del binario precompilado y posteriormente configurará el servidor Minio.
Si no ha actualizado recientemente la base de datos del paquete, actualícela ahora:
sudo apt update
Luego, descargue el binario del servidor Minio del sitio web oficial:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
Recibirá un resultado similar al siguiente:
--2020-03-17 22:21:52-- 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: 47321088 (45M) [application/octet-stream]
Saving to: 'minio'
minio 100%[=================================================================================================================>] 45.13M 13.8MB/s in 4.0s
2020-03-17 22:21:57 (11.2 MB/s) - 'minio' saved [47321088/47321088]
Cuando se complete la descarga, un archivo llamado minio
estará en su directorio de trabajo. Utilice el siguiente comando para hacerlo ejecutable:
sudo chmod +x minio
Ahora, mueva el archivo al directorio /usr/local/bin
donde systemd
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 automáticamente Minio al inicio.
Por razones de seguridad, es mejor evitar ejecutar el servidor Minio como root. Esto limitará el daño que se puede hacer a su sistema si se ve comprometido. Dado que el systemd
que usará en el paso 2 busca una cuenta de usuario y un grupo llamado minio-user
, cree un nuevo usuario con este nombre:
sudo useradd -r minio-user -s /sbin/nologin
En este comando, usó el -s
para establecer /sbin/nologin
como el shell para minio-user
. Este es un shell que no permite el inicio de sesión de usuario, lo cual no es necesario para minio-user
.
A continuación, cambie la propiedad del binario Minio a minio-user
:
sudo chown minio-user:minio-user /usr/local/bin/minio
A continuación, creará un directorio donde Minio almacenará los archivos. Esta será la ubicación de almacenamiento de los cubos que posteriormente se utilizan para organizar los objetos almacenados en el servidor de Minio. Este tutorial nombrará el directorio minio
sudo mkdir /usr/local/share/minio
Asigne 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 /etc
, así que cree su archivo de configuración de Minio allí:
sudo mkdir /etc/minio
También otorgue la propiedad de ese directorio a minio-user
:
sudo chown minio-user:minio-user /etc/minio
Utilice nano o su editor de texto favorito para crear el archivo de entorno necesario para cambiar la configuración predeterminada:
sudo nano /etc/default/minio
Una vez que el archivo esté abierto, agregue 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"
Echemos un vistazo a estas variables y sus valores establecidos:
MINIO_ACCESS_KEY
: establezca la clave de acceso que utilizará para acceder a la interfaz de usuario del navegador Minio.MINIO_SECRET_KEY
: establezca la clave privada que utilizará para completar las credenciales de inicio de sesión en la interfaz de Minio. Este tutorial ha establecido el valor enminiostorage
, pero le recomendamos que elija una contraseña diferente y más complicada para proteger su servidor.MINIO_VOLUMES
: identifica el directorio de almacenamiento creado para los depósitos.MINIO_OPTS
: esto cambia dónde y cómo el servidor entrega los datos. El-C
apunta a Minio al directorio de configuración que debe usar, mientras que el--address
le dice a Minio la dirección IP y el puerto al que debe conectarse. Si no se especifica la dirección IP, Minio se vinculará a todas las direcciones configuradas en el servidor, incluidolocalhost
y todas las direcciones IP relacionadas con Docker, por lo que se recomienda especificar la dirección IP directamente aquí. Si lo desea, se puede cambiar9000
Finalmente, guarde y cierre el archivo de entorno cuando haya terminado de realizar cambios.
Ahora ha instalado Minio y ha establecido algunas variables de entorno importantes. A continuación, configurará el servidor para que se ejecute como un servicio del sistema.
Paso 2: Instale el script de inicio de Minio Systemd
En este paso, configurará el servidor Minio para que se administre como un servicio systemd
Primero, descargue el archivo descriptor de servicio oficial de Minio usando el siguiente comando:
curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
Recibirá un resultado similar al siguiente:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 835 100 835 0 0 4133 0 --:--:-- --:--:-- --:--:-- 4133
Cuando se complete la descarga, un archivo llamado minio.service
estará en el directorio de trabajo.
Para comprobar el contenido de minio.service
antes de aplicarlo, ábralo en un editor de texto para ver su contenido:
nano minio.service
Este será el contenido del archivo:
[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 utilizando el minio-user
creado anteriormente. También implementa las variables de entorno establecidas en el último paso y permite que el servidor se ejecute automáticamente al iniciarse.
Después de revisar el contenido del script, cierre el editor de texto.
Systemd requiere que los archivos de la unidad se almacenen en el systemd
, así que mueva el minio.service
a esa carpeta con el comando mv:
sudo mv minio.service /etc/systemd/system
Luego, ejecute el siguiente comando para recargar todas las unidades systemd:
sudo systemctl daemon-reload
Finalmente, habilite Minio para comenzar al inicio:
sudo systemctl enable minio
Esto dará el siguiente resultado:
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.
Ahora que el script systemd está instalado y configurado, es hora de iniciar el servidor.
Paso 3: inicie 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 con la que está asociado, el uso de memoria y más ejecutando este comando:
sudo systemctl status minio
Obtendrá el siguiente resultado:
● minio.service - MinIO
Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-03-19 00:26:30 CET; 2s ago
Docs: https://docs.min.io
Process: 11242 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/SUCCESS)
Main PID: 11243 (minio)
Tasks: 8 (limit: 2301)
Memory: 148.8M
CGroup: /system.slice/minio.service
└─2180 /usr/local/bin/minio server -C /etc/minio --address YOUR_ADDRESS:9000 /usr/local/share/minio/
Luego habilite el acceso a través del firewall UFW, si está activo, al servidor Minio en el puerto configurado. En este tutorial, el puerto es 9000
.
Primero agregue la regla:
sudo ufw allow 9000
Luego, habilite el firewall:
sudo ufw enable
Aparecerá el siguiente mensaje:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Presione y
y ENTER
para confirmar. Entonces obtendrá el siguiente resultado:
Firewall is active and enabled on system startup
Minio ahora está listo para aceptar tráfico, pero antes de conectarse al servidor, protegerá sus comunicaciones instalando un certificado SSL /TLS.
Paso 4: Asegurar el acceso al servidor Minio con un certificado TLS
En este paso, asegurará el acceso a su servidor Minio utilizando 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, utilizará Certbot.
Primero, permita el acceso HTTP y HTTPS a través de su firewall. Para hacer esto, abra el puerto 80
, que es el puerto para HTTP:
sudo ufw allow 80
Luego, abra el puerto 443
para HTTPS:
sudo ufw allow 443
Después de agregar estas reglas, verifique el estado de su firewall con el siguiente comando:
sudo ufw status verbose
Recibirá un resultado similar al siguiente:
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 que garantiza que el servidor acepta solicitudes de Internet.
A continuación, instalará Certbot. Dado que Certbot mantiene un repositorio de PPA separado, primero deberá agregarlo a su lista de repositorios antes de instalar Certbot como se muestra:
Para prepararse para agregar el repositorio de PPA, primero instale el software-properties-common
para administrar PPA:
sudo apt install software-properties-common
Este paquete proporciona algunos scripts útiles para agregar y eliminar PPA en lugar de hacerlo manualmente.
A continuación, agregue el repositorio de Certbot:
sudo add-apt-repository ppa:certbot/certbot
Recibirá el siguiente resultado:
This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu.
Note: Packages are only provided for currently supported Ubuntu releases.
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or ctrl-c to cancel adding it
Presione ENTER
para aceptar.
Luego actualice la lista de paquetes:
sudo apt update
Finalmente, instale certbot
:
sudo apt install certbot
A continuación, utilizará certbot
para generar un nuevo certificado SSL.
Dado que Debian 10 aún no admite la instalación automática, utilizará los 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 integrado.
Recibirá el siguiente resultado:
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):
Agregue su correo electrónico y presione ENTER
.
Luego, Certbot le pedirá que se registre en Let's Encrypt:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 desea compartir su correo electrónico con Electronic Frontier Foundation:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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:
Después de responder Y
o N
, las claves públicas y privadas se generarán y guardarán en el directorio /etc/letsencrypt/live/minio-server.your_domain_name
Luego, copie estos dos archivos ( privkey.pem
y fullchain.pem
) al certs
en la carpeta de configuración del servidor de Minio, que es /etc/minio
en este tutorial. Utilice el comando cp para copiar privkey.pem
y cambie el nombre del archivo private.key
:
sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key
Luego haga lo mismo para fullchain.pem
, nombrando el resultado public.crt
:
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, haz esto para private.key
:
sudo chown minio-user:minio-user /etc/minio/certs/private.key
Entonces public.crt
:
sudo chown minio-user:minio-user /etc/minio/certs/public.crt
Reinicie el servidor Minio para que reconozca el certificado y comience a usar HTTPS:
sudo systemctl restart minio
Los certificados Let's Encrypt solo son válidos durante noventa días. Esto es para animar a los usuarios a automatizar el proceso de renovación del certificado. El paquete Certbot que instaló agrega automáticamente un script de renovación a /etc/cron.d
. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado dentro de los treinta días posteriores a su vencimiento.
Con eso, la conexión de Minio ahora es segura y el certificado TLS SSL se renovará automáticamente para usted. En el siguiente paso, se conectará a Minio a través de su navegador para usar el servidor.
Paso 5: Conéctese de forma segura a la interfaz web de Minio a través de HTTPS
En este paso, se conectará de forma segura a la interfaz web de Minio a través de HTTPS, luego creará bukects y cargará objetos en ellos.
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. Para la clave de acceso, ingrese el MINIO_ACCESS_KEY
establecido en el archivo de entorno /etc/default/minio
en el paso 1. Para la clave secreta, escriba el valor establecido en el MINIO_SECRET_KEY
del mismo archivo. Después de ingresar sus credenciales, haga clic en el botón directamente debajo de los campos de entrada.
A continuación, se le presentará la interfaz de usuario de Minio. Para crear un nuevo depósito donde se pueden almacenar objetos, haga clic en el botón en la parte inferior derecha de la interfaz principal para mostrar dos botones amarillos adicionales.
Haga clic en el botón amarillo del medio e ingrese un nombre para su nuevo depósito en el mensaje, presionando la ENTER
para guardar la respuesta. Su nuevo balde ahora está listo para usarse para almacenamiento.
Nota:
Cuando desee agregar objetos al depósito, haga clic en el mismo botón rojo claro que antes y luego haga clic en el botón amarillo en la parte superior para abrir un mensaje de carga de archivo.
Conclusión
Ahora tiene su propio servidor de almacenamiento de objetos Minio al que puede conectarse de forma segura desde la interfaz web mediante un certificado Let's Encrypt SSL /TLS. Opcionalmente, es posible que desee ver el cliente de escritorio Minio para FreeBSD, Linux, Mac y Windows como una forma alternativa de usar y administrar su servidor de almacenamiento de objetos.
Puede encontrar más información sobre Minio en el sitio web de documentación del proyecto.