Montando un servidor de almacenamiento de objetos compatible con Amazon S3

El uso de sistemas de almacenamiento basado en objetos para aplicaciones en la nube es algo relativamente comùn, siendo Simple Storage Service de Amazon uno de los más populares. Con el software MinIO podremos montar un servidor compatible con este protocolo. Será necesario un servidor con las siguientes características

  • Procesador X86 o ARM de 64 bits
  • 2 nombres de host apuntando a nuestro servidor (en este caso usaré object.asgardius.company para la API y panel.asgardius.company para la consola de administración)
  • Una cantidad considerable de almacenamiento
  • Alguna distribución actual de GNU/Linux (El software se puede usar también en Microsoft Windows y Mac OS, pero requieren pasos diferentes a los de este tutorial)
  • Un servidor web (en este tutorial usaremos NGINX)

Primero necesitamos descargar el ejecutable. Si el procesador del servidor es X86 lo descargamos de la siguiente forma

sudo wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/bin/minio
sudo chmod +x /usr/bin/minio

Si el procesador es ARM lo hacemos de esta forma

sudo wget https://dl.min.io/server/minio/release/linux-arm64/minio -O /usr/bin/minio
sudo chmod +x /usr/bin/minio

Crearemos un nuevo usuario para este programa

sudo groupadd --system minio
sudo useradd -s /sbin/nologin --system -g minio minio

Creamos un nuevo directorio para alojar los datos

sudo mkdir /var/lib/minio
sudo chown -R minio:minio /var/lib/minio

Creamos un servicio para Systemd

sudo nano /etc/systemd/system/minio.service

Agregamos el siguiente contenido

[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/bin/minio

[Service]
WorkingDirectory=/var/lib/minio
User=minio
Group=minio

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/bin/minio server /var/lib/minio --address 127.0.0.1:1200 --console-address 127.0.0.1:1201

# 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

Adaptamos los números de puerto en caso de querer cambiarlos. Creamos el archivo de configuración

sudo nano /etc/default/minio

Agregamos el nombre de usuario y contraseña que queremos para el administrador, además de la región y la URL mediante la cual se accederá a la API y a la consola (object.asgardius.company y panel.asgardius.company respectivamente en este caso)

MINIO_SERVER_URL="https://object.asgardius.company"
MINIO_BROWSER_REDIRECT_URL="https://panel.asgardius.company"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="password"
MINIO_API_CORS_ALLOW_ORIGIN="*"

Iniciamos el servicio

sudo systemctl daemon-reload
sudo systemctl enable --now minio

Instalamos NGINX y Certbot para el cifrado SSL

sudo apt install nginx certbot python3-certbot-nginx

Creamos 2 archivos de configuración en NGINX para hacer accesible nuestra instalación de MinIO

sudo nano /etc/nginx/sites-enabled/object.asgardius.company

El de la API nos quedaría algo así, para la consola de administración se cambiaría el puerto 1200 por 1201 en caso de haber utilizado la plantilla de systemd sin cambios

server {
    listen 80;
    server_name object.asgardius.company;
    root /var/www/html;
    # To allow special characters in headers
    ignore_invalid_headers off;
    # To disable buffering
    proxy_buffering off;

    index index.html index.htm;

    location / {
        proxy_pass http://127.0.0.1:1200;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        client_max_body_size 0;
    }


    location ~ /\.ht {
        deny all;
    }

}

Obtenemos el certificado

sudo systemctl restart nginx
sudo certbot --nginx

Ahora podemos entrar a la consola de administración de MinIO desde la dirección elegida

Dejar un comentario