Cómo instalar y configurar un servidor de almacenamiento de objetos compatible con S3 usando Minio en Ubuntu 20.04

Iniciar sesión en la consola web de Minio

El almacenamiento de objetos es el almacenamiento y la recuperaci√≥n de blobs de datos y metadatos no estructurados mediante una API HTTP. En lugar de almacenar archivos de manera convencional dividi√©ndolos en bloques para almacenarlos en el disco mediante un sistema de archivos, tratamos con objetos completos almacenados en la red. Estos objetos pueden ser una imagen, un video, registros, archivos HTML, copias de seguridad, im√°genes de contenedores o cualquier blob de bytes independiente. No est√°n estructurados porque no siguen ning√ļn esquema o formato espec√≠fico.

Minio es un popular servidor de almacenamiento de objetos de c√≥digo abierto, autohospedado y compatible con Amazon S3. Minio est√° escrito en Go, viene con clientes independientes del sistema operativo y una interfaz de navegador. En este tutorial, instalar√° el servidor Minio en un servidor Ubuntu 20.04, lo proteger√° con un certificado SSL de Let’s Encrypt y acceder√° a √©l con un cliente de l√≠nea de comandos.

requisitos previos

  • Un servidor Ubuntu 20.04 con un usuario no root con privilegios sudo.
  • Un nombre de dominio completamente registrado, minio.example.com.
  • Una m√°quina Ubuntu 20.04 para actuar como cliente.
  • El sistema est√° actualizado.
    $ sudo apt update
    
  • Pocos paquetes que tu sistema necesita.
    $ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y
    

    Es posible que algunos de estos paquetes ya estén instalados en su sistema.

Paso 1: instalar el servidor Minio

Minio, al estar escrito en Go, se envía como un archivo binario simple. Descarga el archivo binario del sitio web oficial de Minio.

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

Haz que el archivo sea ejecutable.

$ chmod +x minio

Mueva el binario al directorio /usr/local/bin.

$ sudo mv minio /usr/local/bin

Verifique la instalación.

$ minio --version
minio version RELEASE.2022-01-28T02-28-16Z

Paso 2: preparar el disco de almacenamiento de objetos

Necesitamos preparar un dispositivo de bloque dedicado para almacenar objetos. La ruta de almacenamiento puede estar en su disco o en un segundo disco conectado a su servidor. Para nuestro tutorial, estamos usando un disco secundario.

$ lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0  50G  0 disk
??sda1   8:1    0  50G  0 part /
sdb      8:16   0  50G  0 disk

Instale la aplicación Parted para crear y modificar particiones de disco.

$ sudo apt install parted

Ejecute los siguientes comandos para montar el disco secundario en el directorio /data.

$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt
$ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
$ sudo parted -s -- /dev/sdb align-check optimal 1
$ sudo mkfs.ext4 /dev/sdb1
$ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ sudo mkdir /data
$ sudo mount -a

Paso 3 – Configurar Minio

El servidor Minio nunca debe ejecutarse como root para evitar da√Īos. Por lo tanto, crearemos un usuario y un grupo llamado minio-user.

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

El indicador -s establece el shell de la cuenta de usuario en /sbin/nologin, lo que no permite el inicio de sesión del usuario.

Cambie la propiedad del archivo binario de Minio.

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

Otorgue la propiedad del directorio /data a minio-user.

$ sudo chown minio-user:minio-user /data -R

El siguiente paso es crear un archivo de configuración para Minio. Cree un directorio para almacenar el archivo de configuración.

$ sudo mkdir /etc/minio

Otorgue la propiedad del directorio al usuario minio-user.

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

Cree el archivo de entorno para almacenar la configuración predeterminada. Este archivo debe almacenarse en el directorio /etc/default.

$ sudo nano /etc/default/minio

Pegue el siguiente código con variables de entorno para definir Minio.

MINIO_ROOT_USER="minio"
MINIO_VOLUMES="/data"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniostorage"

Revisemos todas las variables y lo que hacen.

  • MINIO_ROOT_USUARIO: establece la clave de acceso/usuario para acceder a la interfaz de usuario de Minio. Debe tener un m√≠nimo de 3 caracteres de longitud.
  • MINIO_VOLUMENES: especifica el directorio de almacenamiento para los datos.
  • MINIO_OPTS: establece varias opciones para el servidor Minio. El indicador -C especifica el directorio de configuraci√≥n creado anteriormente. El indicador –address especifica la direcci√≥n IP y el puerto al que enlazar. Si no especifica la direcci√≥n IP, Minio se vincular√° a cada direcci√≥n IP en el servidor, incluido localhost o cualquier direcci√≥n IP relacionada con Docker. El puerto predeterminado es 9000. El indicador –console-address establece el puerto 9001 para la consola web de Minio.
  • MINIO_ROOT_CONTRASE√ĎA: establece la clave/contrase√Īa privada para acceder a la interfaz de Minio. Debe tener un m√≠nimo de 8 caracteres de longitud. Elija una clave secreta fuerte y complicada.

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Paso 4: instale el servicio Minio

Descargue el archivo de servicio de Minio del repositorio oficial de Github.

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

Abra el archivo con el editor Nano.

$ nano minio.service

Encontrarás el siguiente código.

[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
ProtectProc=invisible

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=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# 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 servicio inicia Minio utilizando el usuario minio-user que creamos anteriormente. Utiliza /etc/default/minio como el archivo de entorno que configuramos en el paso 3. Una vez satisfecho, cierre el archivo presionando Control + X y entrando Y Cuando se le solicite.

Mueva el archivo de servicio al directorio /etc/systemd/system.

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

Vuelva a cargar el demonio de servicio.

$ sudo systemctl daemon-reload

Habilite el Servicio Minio.

$ sudo systemctl enable minio
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

Paso 5: inicie el servidor Minio

Inicie el servidor Minio.

$ sudo systemctl start minio

Verifique el estado.

$ sudo systemctl status minio
? minio.service - MinIO
     Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago
       Docs: https://docs.min.io
    Process: 26068 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exi>
   Main PID: 26076 (minio)
      Tasks: 6
     Memory: 55.3M
     CGroup: /system.slice/minio.service
             ??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data

Permita los puertos 9000 y 9001 utilizando el cortafuegos sin complicaciones (UFW).

$ sudo ufw allow 9000
$ sudo ufw allow 9001

Habilite el cortafuegos.

$ sudo ufw enable

Abra la URL http://your_server_ip:9001 en el navegador y ver√° la siguiente pantalla.

Iniciar sesión en la consola web de Minio

Paso 6: Minio seguro mediante SSL

Usaremos Let’s Encrypt para asegurar Minio. Para obtener un certificado SSL gratuito, debemos descargar la herramienta Certbot. Usaremos el instalador del paquete Snapd para eso.

Instale el instalador de Snap.

$ sudo apt install snapd

Aseg√ļrese de que su versi√≥n de Snapd est√© actualizada.

$ sudo snap install core 
$ sudo snap refresh core

Instale Certbot.

$ sudo snap install --classic certbot

Use el siguiente comando para asegurarse de que el comando Certbot se ejecute creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Genere un certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d minio.example.com

El comando anterior descargar√° un certificado en el directorio /etc/letsencrypt/live/minio.example.com de su servidor.

Copie los archivos privkey.pem y fullchain.pem en el directorio de certificados en la carpeta de configuración de Minio.

$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key
$ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt

Cambie la propiedad de los certificados copiados.

$ sudo chown minio-user:minio-user /etc/minio/certs/private.key
$ sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Permita los puertos HTTP y HTTPS a través del firewall.

$ sudo ufw allow 80
$ sudo ufw allow 443

Abra el archivo de configuración de Minio.

$ sudo nano /etc/default/minio

Agregue la siguiente línea en la parte inferior.

MINIO_SERVER_URL="https://minio.example.com:9000"

Aunque se accede a la consola a través del puerto 9001, la URL del servidor SSL usa el puerto 9000 para acceder a la API de Minio.

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Reinicie el servidor Minio.

$ sudo systemctl restart minio

Puede acceder a la consola de Minio a través de la URL https://minio.example.com:9001 en su navegador.

Paso 7: Conéctese a Minio y configure los cubos

Inicie sesi√≥n en Minio Console con el usuario y la contrase√Īa establecidos anteriormente para acceder al Minio Dashboard.

Tablero Minio

Haga clic en el Crear cubo botón para crear su primer depósito.

Minio Crear página de depósito

Dado que estamos instalando Minio en un solo servidor/disco, algunas de las funciones están deshabilitadas. Ingrese el nombre del cubo y haga clic en el Crear cubo botón para proceder. Obtendrá la siguiente pantalla una vez que haya terminado.

Lista de cubos de Minio

Para cargar archivos, haga clic en el Navegar y aparecer√° la p√°gina siguiente.

Minio Explorar cubos

Haga clic en el Subir archivos botón y seleccione Subir archivos de nuevo para abrir el Explorador de archivos en su PC. Puede seleccionar varios archivos a la vez para cargar.

Carga de archivos Minio

Haga clic en el botón de la papelera de reciclaje para borrar la cola de carga una vez que haya terminado.

Minio Borrar cola de carga

Eso es todo por ahora. Has creado tu primer cubo y subido algunos archivos. A continuación, nos conectaremos al servidor usando un cliente, acceda a este depósito. y gestionarlo.

Paso 8: instale Minio Client y acceda a los archivos

Instalaremos el cliente de línea de comandos de Minio en una máquina diferente basada en Ubuntu 20.04 para nuestro propósito. También puede descargar clientes de escritorio desde Página de descarga oficial de Minio.

Descarga el binario oficial de Minio.

$ wget https://dl.min.io/client/mc/release/linux-amd64/mc

Haga que el archivo binario sea ejecutable.

$ chmod +x mc

Mueva el binario al directorio /usr/local/bin.

$ sudo mv mc /usr/local/bin

Verifique la instalación.

$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z

Establezca un alias para su servidor Minio para que pueda acceder a √©l utilizando un nombre f√°cilmente identificable. Reemplace minio y miniostorage con su nombre de usuario y contrase√Īa elegidos para el servidor.

$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage
mc: Configuration written to `/home/<user>/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/<user>/.mc/share`.
mc: Initialized share uploads `/home/<user>/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/<user>/.mc/share/downloads.json` file.
Added `howtoforge` successfully.

El cliente Minio almacena todas las configuraciones en el directorio /home/user/.mc.

Obtenga la información del servidor Minio. Usamos el subcomando admin para esto.

$ mc admin info howtoforge
?  minio.example.com:9000
   Uptime: 2 minutes
   Version: 2022-01-28T02:28:16Z
   Network: 1/1 OK

9.6 MiB Used, 1 Bucket, 5 Objects

Para enumerar todos los cubos en su servidor Minio, use el siguiente comando.

$ mc ls howtoforge
[2022-02-01 16:59:46 UTC]     0B howtoforge/

Para enumerar todos los objetos/archivos en un depósito determinado, use el siguiente comando.

$ mc ls howtoforge/howtoforge
[2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg
[2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg
[2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg
[2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg
[2022-02-02 03:33:28 UTC]  25KiB STANDARD quarantine.jpg

Puede crear un nuevo depósito con el siguiente comando.

$ mc mb howtoforge/bucket2
Bucket created successfully `howtoforge/bucket2`.

Vamos a crear un nuevo archivo para copiarlo en este cubo.

$ touch test.txt

Para copiar un archivo en el depósito recién creado, use el siguiente comando.

$ mc cp test.txt howtoforge/bucket2
/home/nspeaks/test.txt:    0 B / ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????

Enumere el archivo recién copiado.

$ mc ls howtoforge/bucket2
[2022-02-02 07:06:44 UTC]     0B STANDARD test.txt

Puede verificar todos los comandos usando el argumento –help.

$ mc --help
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove object(s)
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  anonymous  manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release
  support    Support related commands

GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/home/<user>/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version

TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2022-02-02T02-03-24Z

Conclusión

Esto concluye nuestro tutorial en el que instal√≥ el servidor de almacenamiento de objetos Minio en un servidor basado en Ubuntu 20.04. Es accesible a trav√©s de una consola web protegida por un certificado SSL de Let’s Encrypt. Tambi√©n instal√≥ el cliente de l√≠nea de comandos Minio en otra m√°quina Ubuntu para administrar y acceder al servidor Minio.

Si tiene alguna pregunta, publíquela en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *