Despliegue de MinIO en modo individual con Docker Compose
Para fines de prueba, se puede levantar una instancia única de MinIO usando Docker. Primero, cree un archivo de entorno .env con la contrsaeña de administración:
echo 'MINIO_SECRET_KEY=minio@123' > .env
A continuación, defina el archivo docker-compose.yml con la siguinete configuración:
version: "3.8"
services:
storage:
image: minio/minio
container_name: minio_standalone
ports:
- "9000:9000"
- "9001:9001"
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY}
volumes:
- ./data_store:/data
command: server --console-address ':9001' /data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
Ejecute docker-compose up -d para iniciar el servicio.
Despliegue de MinIO en modo clúster con Docker Compose
Para un clúster distribuido, se requieren al menos tres nodos. Utilice las siguientes direcciones IP como ejemplo:
10.0.1.10
10.0.1.11
10.0.1.12
1. Configuración de nombres de host
En cada nodo, edite /etc/hosts y agregue las siguientes entradas:
echo 'minio-node1 10.0.1.10' >> /etc/hosts
echo 'minio-node2 10.0.1.11' >> /etc/hosts
echo 'minio-node3 10.0.1.12' >> /etc/hosts
2. Preparación del directorio
Cree el directorio de almacenamiento en cada máquina:
mkdir -p /opt/minio_storage
3. Configuración de Docker Compose para el clúster
Genere el archivo .env con la clave raíz:
cd /opt/minio_storage && echo 'MINIO_ROOT_PASSWORD=minio@secret' > .env
Defina el archivo docker-compose.yml en cada nodo con este contenido:
version: "3.8"
services:
minio-node:
image: minio/minio
container_name: minio_node1
hostname: minio-node1
expose:
- "9200"
- "9201"
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
volumes:
- ./disk1:/data1
- ./disk2:/data2
command: server --console-address ':9201' --address ':9200' http://minio-node{1...3}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200/minio/health/live"]
interval: 45s
timeout: 15s
retries: 5
extra_hosts:
- minio-node1:10.0.1.10
- minio-node2:10.0.1.11
- minio-node3:10.0.1.12
restart: unless-stopped
network_mode: host
4. Configuración opcional de balanceador de carga con Nginx
Para disttribuir el tráfico, puede implementar un contenedor Nginx. Modifique el archivo docker-compose.yml en uno de los nodos (por ejemplo, en 10.0.1.10) para incluir el servicio load-balancer:
load-balancer:
image: nginx:1.25-alpine
container_name: nginx_proxy
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "8000:9300"
- "8001:9301"
extra_hosts:
- minio-node1:10.0.1.10
- minio-node2:10.0.1.11
- minio-node3:10.0.1.12
restart: always
El archivo nginx.conf debe configurar los bloques upstream y los servidores proxy_pass apuntando a los nodos del clúster. Asegúrese de habilitar el soporte para WebSocket en la configuración del proxy.
Una vez configurados todos los archivos, inicie el clúster ejecutando en cada nodo:
docker-compose up -d