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
- 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
Mueve el binario a /usr/local/bin
directorio.
$ 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
Instalar parted
aplicación para crear y modificar particiones de disco.
$ sudo apt install parted
Ejecute los siguientes comandos para montar el disco secundario en /data
directorio.
$ 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 -s
flag establece el shell de la cuenta de usuario en /sbin/nologin
, que no permite el inicio de sesión de usuario.
Cambie la propiedad del archivo binario de Minio.
$ sudo chown minio-user:minio-user /usr/local/bin/minio
Dar la propiedad de los /data
directorio 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
Dar propiedad del directorio al minio-user
usuario.
$ 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 /etc/default
directorio.
$ 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_USER :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 de los datos.
- MINIO_OPTS :establece varias opciones para el servidor Minio. El
-C
flag especifica el directorio de configuración creado anteriormente. La--address
flag 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--console-address
flag establece el puerto 9001 para la consola web de Minio. - MINIO_ROOT_PASSWORD :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 Ctrl + X e ingresando Y cuando se le solicite.
Paso 4:instalar 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á 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 usando el minio-user
usuario 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 Ctrl + X e ingresando Y cuando se le solicite.
Mueva el archivo de servicio a /etc/systemd/system
directorio.
$ 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:iniciar 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 mediante 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.
Paso 6:Proteja Minio 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 /usr/bin
directorio.
$ 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 /etc/letsencrypt/live/minio.example.com
directorio en su servidor.
Copie los archivos privkey.pem
y fullchain.pem
en los certs
directorio bajo 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
Permitir puertos HTTP y HTTPS a través del cortafuegos.
$ 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 Ctrl + X e ingresando 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:conectarse a Minio y configurar depósitos
Inicie sesión en Minio Console con el usuario y la contraseña establecidos anteriormente para acceder al Minio Dashboard.
Haz clic en Crear depósito. botón para crear su primer depósito.
Dado que estamos instalando Minio en un solo servidor/disco, algunas de las funciones están deshabilitadas. Ingrese el nombre del depósito y haga clic en Crear depósito botón para proceder. Obtendrá la siguiente pantalla una vez que haya terminado.
Para cargar archivos, haga clic en Examinar y aparecerá la página siguiente.
Haga clic en Subir archivos y seleccione Subir archivos de nuevo para abrir el Explorador de archivos en su PC. Puede seleccionar varios archivos a la vez para cargar.
Haga clic en el botón de la papelera de reciclaje para borrar la cola de carga una vez que haya terminado.
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:instalar Minio Client y acceder 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 la página de descarga oficial de Minio.
Descarga el binario oficial de Minio.
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
Haz que el archivo binario sea ejecutable.
$ chmod +x mc
Mueve el binario a /usr/local/bin
directorio.
$ 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. Reemplazar 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 /home/user/.mc
directorio.
Obtenga la información del servidor Minio. Usamos el admin
subcomando 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 depósito nuevo con el siguiente comando.
$ mc mb howtoforge/bucket2 Bucket created successfully `howtoforge/bucket2`.
Vamos a crear un nuevo archivo para copiarlo en este depósito.
$ 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 --help
argumento.
$ 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.