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