MinIO Docker Compose: Almacenamiento S3 en tu Servidor 2026

MinIO Docker Compose - Almacenamiento S3 compatible en tu servidor

MinIO Docker Compose te permite desplegar almacenamiento de objetos compatible con S3 en tu propio servidor. En esta guía aprenderás a levantar MinIO con Docker Compose de forma segura, configurar buckets, usar la consola web y conectarte desde aplicaciones. Ideal para backups, CI/CD, homelab y desarrollo sin depender de la nube.

¿Qué es MinIO?

MinIO es un servidor de almacenamiento de objetos de alto rendimiento, compatible con la API de Amazon S3. Está escrito en Go, es open source (AGPLv3) y se usa en desarrollo, homelabs y producción para guardar backups, artefactos de CI/CD, datos de aplicaciones y grandes volúmenes de ficheros. Al ser compatible con S3, cualquier herramienta o SDK que hable con AWS S3 puede usar MinIO cambiando solo el endpoint y las credenciales. El proyecto está disponible en el repositorio oficial de MinIO en GitHub y cuenta con documentación detallada en la web de documentación de MinIO.

Incluye una consola web para crear buckets, subir y descargar objetos, gestionar políticas y ver uso. Se integra con otros servicios que desplegamos con Docker Compose como Nextcloud, Coolify o aplicaciones que necesiten un backend tipo S3. Desplegar MinIO Docker Compose en tu homelab o servidor de desarrollo te da el mismo modelo de almacenamiento que AWS S3 sin coste de API ni vendor lock-in.

Arquitectura de MinIO Docker Compose

En un despliegue con MinIO Docker Compose típico tienes un único contenedor que ejecuta el servidor MinIO. El puerto 9000 expone la API S3 (lectura y escritura de objetos); el puerto 9001 sirve la consola web. Los datos se guardan en un volumen Docker (o en un directorio del host) para que persistan al reiniciar. Para entornos de producción con alta disponibilidad, la documentación de MinIO recomienda despliegues distribuidos con varios nodos y Erasure Coding; el esquema con un solo contenedor es perfecto para desarrollo, homelab y cargas moderadas.

Casos de uso de MinIO Docker Compose

Desplegar MinIO Docker Compose es útil en muchos escenarios. En homelab sirve como almacenamiento S3 para backups de aplicaciones, fotos, documentos o bases de datos. En CI/CD puedes guardar artefactos de compilación, imágenes Docker o logs en buckets privados. Aplicaciones como Nextcloud, Duplicati o herramientas de backup permiten configurar un backend S3 apuntando a tu MinIO. En desarrollo, tener un S3 local evita costes de AWS y acelera pruebas. Si combinas MinIO con otros servicios de la categoría Docker Compose, puedes montar un stack completo de almacenamiento, monitorización y automatización en un solo servidor.

Requisitos previos

Para seguir esta guía de MinIO Docker Compose necesitas un equipo con Docker y Docker Compose instalados (versión 2 o superior del plugin Compose). Los puertos 9000 (API S3) y 9001 (consola web) deben estar libres en el host o accesibles a través de un proxy inverso. El disco debe tener espacio suficiente para los objetos que vayas a almacenar; el volumen Docker crecerá según el uso.

  • Docker y Docker Compose instalados (v2 o superior).
  • Puertos 9000 (API) y 9001 (Consola) libres o accesibles tras proxy.
  • Disco con espacio suficiente para los datos que vayas a almacenar.
  • En producción, planifica backups del volumen donde MinIO guarda los datos.

MinIO Docker Compose: despliegue paso a paso

Crea un directorio para el proyecto y guarda el siguiente docker-compose.yml. La configuración usa variables de entorno para las credenciales; en producción no uses las por defecto. Este ejemplo es el estándar para levantar MinIO Docker Compose en modo standalone.

# docker-compose.yml - MinIO standalone
# Documentación: https://min.io/docs/

services:
  minio:
    image: minio/minio:latest
    container_name: minio
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"   # API S3
      - "9001:9001"   # Consola web
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
    volumes:
      - minio_data:/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

volumes:
  minio_data:

Si la imagen no incluye curl, puedes omitir el healthcheck o instalar curl en un contenedor personalizado. La mayoría de imágenes oficiales recientes de MinIO exponen el endpoint /minio/health/live para comprobar que el servicio está vivo.

Crea un archivo .env en el mismo directorio (y añádelo a .gitignore) con credenciales fuertes:

MINIO_ROOT_USER=tu_usuario_seguro
MINIO_ROOT_PASSWORD=tu_contraseña_larga_y_segura

Levanta el stack:

docker compose up -d

Abre en el navegador http://tu-servidor:9001, inicia sesión con MINIO_ROOT_USER y MINIO_ROOT_PASSWORD, y podrás crear buckets y subir objetos desde la interfaz.

Configurar MinIO Docker Compose con proxy inverso (SSL)

Para exponer MinIO tras Traefik, Caddy o Nginx Proxy Manager con HTTPS, necesitas que la consola conozca la URL pública. Añade estas variables al servicio en el docker-compose.yml:

environment:
  MINIO_ROOT_USER: ${MINIO_ROOT_USER}
  MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
  MINIO_BROWSER_REDIRECT_URL: https://minio.tudominio.com
  MINIO_SERVER_URL: https://minio-api.tudominio.com

MINIO_BROWSER_REDIRECT_URL es la URL de la consola (puerto 9001). MINIO_SERVER_URL es la URL de la API (puerto 9000). Ambas deben ser accesibles por el navegador y con certificado válido si usas HTTPS. En la documentación oficial de MinIO encontrarás más detalles para red y cifrado.

Uso desde línea de comandos (mc)

El proyecto MinIO en GitHub incluye el cliente mc (MinIO Client), compatible con S3. Instálalo y configura un alias apuntando a tu instancia:

mc alias set local http://localhost:9000 minioadmin minioadmin
mc mb local/mi-bucket
mc cp archivo.txt local/mi-bucket/
mc ls local/mi-bucket/

Reemplaza minioadmin por tus MINIO_ROOT_USER y MINIO_ROOT_PASSWORD. Para producción, crea usuarios y políticas desde la consola o con mc admin y evita usar el usuario root en aplicaciones. La documentación del cliente mc detalla todos los comandos disponibles.

Conectar aplicaciones a MinIO Docker Compose

Cualquier aplicación que soporte S3 puede usar tu instancia MinIO Docker Compose. Solo necesitas el endpoint (por ejemplo http://tu-servidor:9000), la región (por ejemplo us-east-1 si la pide el SDK) y las credenciales MINIO_ROOT_USER y MINIO_ROOT_PASSWORD. En AWS CLI puedes definir un perfil así:

aws configure set aws_access_key_id TU_MINIO_ROOT_USER --profile minio
aws configure set aws_secret_access_key TU_MINIO_ROOT_PASSWORD --profile minio
aws s3 ls --endpoint-url http://localhost:9000 --profile minio

En aplicaciones como Nextcloud, Coolify o herramientas de backup, configura el almacenamiento tipo S3 con la URL de tu MinIO Docker Compose y las mismas credenciales. Así centralizas backups, artefactos y datos en tu propio object store. Si la aplicación corre en otro contenedor de la misma red Docker, usa el nombre del servicio (minio) y el puerto 9000 como endpoint; si accedes desde el host o desde otra máquina, usa la IP o el dominio del servidor y el puerto 9000. La región puede ser cualquiera (por ejemplo us-east-1); MinIO la acepta sin validación especial.

Gestión y buenas prácticas con MinIO Docker Compose

Seguridad: Cambia siempre MINIO_ROOT_USER y MINIO_ROOT_PASSWORD. No expongas los puertos 9000/9001 a Internet sin proxy y HTTPS. Crea políticas por bucket y usuarios de servicio con permisos mínimos.

Backups: Los datos persisten en el volumen minio_data. Incluye ese volumen en tus copias de seguridad. Puedes usar mc mirror para replicar buckets a otro MinIO o a S3.

Rendimiento: Para cargas mayores, la documentación recomienda despliegues distribuidos con Erasure Coding (varios nodos/discos). El modo standalone que hemos visto sirve para desarrollo, homelab y cargas moderadas. Consulta el sitio de Docker para buenas prácticas de volúmenes y redes.

Actualizaciones: Mantén la imagen de MinIO actualizada con docker compose pull y docker compose up -d. Los datos del volumen se conservan entre actualizaciones. Revisa las release notes antes de actualizar en producción por posibles cambios de configuración o variables de entorno.

Problemas habituales con MinIO Docker Compose

No carga la consola tras el proxy: Comprueba que MINIO_BROWSER_REDIRECT_URL y MINIO_SERVER_URL coinciden con las URLs que usa el navegador y que el proxy reenvía correctamente a 9000 y 9001. Si usas Traefik o Caddy, asegura que las rutas para la API (9000) y la consola (9001) estén bien definidas. La documentación de MinIO incluye ejemplos para red y cifrado.

Error de permisos en /data: El contenedor escribe como UID 1000/GID 1000. Asegura que el directorio del volumen (si usas bind mount) tenga dueño correcto o usa volúmenes nombrados como en el ejemplo. Si ves errores de escritura al arrancar MinIO Docker Compose, revisa docker compose logs minio.

La aplicación no conecta a MinIO: Verifica endpoint (puerto 9000), región si la pide el SDK (por ejemplo us-east-1), y que las credenciales y el bucket existan. Si la app está en otro contenedor de la misma red Docker, usa el nombre del servicio (minio:9000) como endpoint. La documentación para desarrolladores detalla SDKs y opciones.

Healthcheck falla: Si el contenedor no incluye curl, el healthcheck que usa curl -f http://localhost:9000/minio/health/live fallará. En ese caso elimina el bloque healthcheck del docker-compose.yml o usa una imagen que incluya curl. El servicio MinIO Docker Compose seguirá funcionando; solo dejarás de tener comprobación automática de estado.

Preguntas frecuentes sobre MinIO Docker Compose

¿MinIO Docker Compose es adecuado para producción? El esquema de un solo nodo y un solo disco es válido para desarrollo y cargas ligeras. Para producción con alta disponibilidad y más rendimiento, MinIO recomienda despliegues distribuidos con varios nodos y Erasure Coding. Consulta la documentación de Erasure Coding si planeas escalar.

¿Puedo usar la API de S3 de AWS directamente? Sí. MinIO implementa la API S3; cambias el endpoint por la URL de tu MinIO (por ejemplo http://servidor:9000) y usas las credenciales de MinIO. Herramientas como aws-cli, SDKs y aplicaciones que soporten S3 suelen funcionar sin cambios contra tu MinIO Docker Compose.

¿Cómo actualizo MinIO sin perder datos? Los datos están en el volumen Docker. Haz backup del volumen, actualiza la imagen con docker compose pull y docker compose up -d. Revisa las release notes por cambios de configuración. El volumen asociado a MinIO Docker Compose se mantiene entre actualizaciones.

¿Qué recursos consume MinIO? En modo standalone, 512 MB–1 GB de RAM suelen bastar para uso moderado. El disco depende del tamaño de los objetos que almacenes. Monitorea con docker stats minio o integraciones como Prometheus.

¿Necesito SSL para MinIO Docker Compose? En red local o desarrollo no es obligatorio. Si expones el servicio a Internet o usas la consola desde fuera, pon MinIO detrás de un proxy inverso con HTTPS (Traefik, Caddy o Nginx Proxy Manager) y configura MINIO_BROWSER_REDIRECT_URL y MINIO_SERVER_URL como en la sección anterior.

Conclusión

Con MinIO Docker Compose tienes un almacenamiento de objetos S3-compatible en tu infraestructura: mismo flujo que en la nube pero bajo tu control. Es útil para backups, CI/CD, datos de aplicaciones y homelab. En unos minutos puedes tener la API S3 disponible en tu servidor, crear buckets desde la consola y conectar aplicaciones con las mismas credenciales que has configurado. Si quieres profundizar en despliegues distribuidos, Erasure Coding o integración con Kubernetes, visita la documentación oficial de MinIO y el repositorio en GitHub. MinIO Docker Compose sigue siendo la forma más rápida de probar y usar object storage S3 en tu propio entorno.

Avatar

Por Mid

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x