Índice del diarioDockup / nota de campo
Note / self-host-minio

Cómo autoalojar MinIO en 2026: endpoints S3, TLS y almacenamiento duradero

Guía práctica para autoalojar MinIO con Docker, puertos, datos persistentes, TLS, seguridad, backups y los fallos que impiden usarlo en producción. Paso a paso.

Un despliegue de MinIO con problemas no siempre se cae. Puede mostrar una página de inicio de sesión mientras los clientes firman las solicitudes para la URL de la consola en lugar de la URL de la API de S3. Empieza con una comprobación integral: crea un bucket, sube un objeto multipart, obténlo mediante una URL presigned y verifica que sea posible recuperar un borrado versionado.

Esta comprobación coincide con el propósito documentado de MinIO: almacenamiento de objetos compatible con S3 en discos bajo tu control. También revela antes que un uptime probe las dependencias ausentes, las suposiciones incorrectas del proxy y los datos efímeros.

De qué depende MinIO

El proceso HTTP de MinIO escucha en el puerto 9000; mantén ese puerto en la red de la aplicación y publica únicamente la ruta de la plataforma. El requisito del runtime local es disponer de un segundo disco o de un destino remoto para backups recuperables. Mantén su ciclo de vida explícito para que mover MinIO entre hosts no cambie su comportamiento de forma silenciosa.

Deja registrado el límite en forma de contrato breve: quién es responsable del requisito, qué credencial se utiliza, qué timeout es aceptable y cómo se manifiesta el fallo. Después, ejecuta esta transacción: crea un bucket, sube un objeto multipart, obténlo mediante una URL presigned y verifica que sea posible recuperar un borrado versionado. Durante la ejecución, observa la latencia del disco, las subidas multipart simultáneas, el margen de espacio libre y el throughput de red entre las aplicaciones y el endpoint S3, porque esta carga ofrece un tamaño inicial más útil que un contenedor inactivo.

Una base de Docker para MinIO

Un lanzamiento con una configuración similar a producción debe ser deliberadamente sencillo: estado con nombre, puerto explícito y ningún secret dentro de la imagen.

docker run -d \
  --name minio \
  --restart unless-stopped \
  -p 127.0.0.1:9000:9000 \
  -p 127.0.0.1:9001:9001 \
  -v minio-data:/data \
  -e MINIO_ROOT_PASSWORD=replace-with-a-long-random-value \
  -e MINIO_ROOT_USER=dockup-admin \
  quay.io/minio/minio:latest server /data --console-address :9001

El ejemplo es una base, no un stack auxiliar completo. Confirma el requisito local antes de exponer el servicio: un segundo disco o un destino remoto para backups recuperables. Comprueba los mounts efectivos y el listener; después, intenta crear un bucket, subir un objeto multipart, obtenerlo mediante una URL presigned y verificar que sea posible recuperar un borrado versionado. Fija la imagen que funciona antes del siguiente reinicio.

Dominios, headers del proxy y el puerto 9000

La emisión de TLS es solo la mitad de la ruta de MinIO. Configura la API de S3 y la consola con hostnames independientes cuando ambas estén expuestas. Envía el tráfico internamente al puerto 9000 y reenvía el scheme externo para que las URL generadas y las cookies seguras mantengan la coherencia.

Usa el escenario completo de MinIO desde una red limpia, no solo la página raíz. Un error 502 o un fallo del certificado se puede aislar con la configuración automática del dominio y TLS. Si el tráfico llega al proceso y los clientes firman las solicitudes para la URL de la consola en lugar de la URL de la API de S3, diagnostica esa condición en el punto donde se produce en lugar de acumular redirecciones.

Diseña la restauración de MinIO antes del lanzamiento

Crea un manifest de recuperación para MinIO: datos de los buckets, policies, usuarios y réplicas probadas a nivel de objeto. Monta /data antes del bootstrap, escribe datos de ejemplo inocuos y reemplaza el contenedor para demostrar que esa ruta es realmente persistente. Comprueba ahora los permisos y el espacio libre, porque una ruta montada pero sin permisos de escritura se comporta como si no hubiera persistencia.

Haz el backup en un failure domain separado del servidor en ejecución. Recrea MinIO a partir de su imagen fijada y verifica que las versiones de los buckets, las policies, los usuarios y un objeto multipart representativo sobrevivan a la recuperación en un almacenamiento diferente. La guía sobre volúmenes persistentes ayuda a convertir este ejercicio en una política de snapshots y retención.

Elige el trust boundary de MinIO

Haz un threat model de la acción que realiza MinIO, no solo de su formulario de inicio de sesión. En este caso, el error de mayor riesgo es usar credenciales root predeterminadas o demasiado cortas, o exponer ampliamente la consola de administración. Implementa este límite: separa la API de S3 de la consola administrativa y emite application keys que no puedan administrar todo el servidor.

Trata MINIO_ROOT_PASSWORD de acuerdo con su función en MinIO: mantén los valores sensibles fuera de Git, documenta los efectos de la rotación y nunca sustituyas un ejemplo público en producción. No resuelvas un error de permisos ejecutando el contenedor como root o montando ampliamente el host. Los límites de recursos también forman parte del diseño de seguridad cuando los usuarios pueden provocar latencia del disco, subidas multipart simultáneas, consumo del margen de espacio libre y tráfico de red entre las aplicaciones y el endpoint S3.

Logs que responden a la siguiente pregunta

Observa el trabajo que realiza MinIO: latencia del disco, subidas multipart simultáneas, margen de espacio libre y throughput de red entre las aplicaciones y el endpoint S3. Define límites con margen suficiente para esa carga y evita un liveness probe que compita con ella. La comprobación del operador debe intentar igualmente crear un bucket, subir un objeto multipart, obtenerlo mediante una URL presigned y verificar que sea posible recuperar un borrado versionado de forma programada.

Para las actualizaciones, recuerda que las releases del servidor, el comportamiento de signing del cliente y cualquier layout de erasure set deben probarse con una copia de los metadatos reales de los buckets. Despliega la versión candidata sobre una copia recuperada y repite la prueba conocida. Si los clientes firman las solicitudes para la URL de la consola en lugar de la URL de la API de S3, utiliza los logs del runtime y la solicitud de red real para descubrir qué suposición ha cambiado.

Evidencias que debes recopilar antes de poner MinIO en producción

Antes de que lleguen los usuarios reales, prepara una hoja de lanzamiento para MinIO. Debe indicar la imagen fijada, el puerto 9000, el origin canónico, las rutas persistentes y el responsable de un segundo disco o destino remoto para backups recuperables. Adjunta el resultado esperado de esta transacción: crear un bucket, subir un objeto multipart, obtenerlo mediante una URL presigned y verificar que sea posible recuperar un borrado versionado.

Usa la hoja después de un reemplazo normal y de una restauración limpia. La recuperación solo se considera válida si las versiones de los buckets, las policies, los usuarios y un objeto multipart representativo sobreviven a la recuperación en un almacenamiento diferente. Recopila también un resource trace breve que cubra la latencia del disco, las subidas multipart simultáneas, el margen de espacio libre y el throughput de red entre las aplicaciones y el endpoint S3; consérvalo junto al lanzamiento para comparar futuros cambios de capacidad con la misma carga.

Incluye un fallo controlado: envía una entrada inocua cerca del límite de recursos o de formato asociado a este límite: los clientes firman las solicitudes para la URL de la consola en lugar de la URL de la API de S3. Confirma que MinIO informe del problema en el límite correcto, restablece la condición válida y vuelve a ejecutar la transacción. Esto comprueba la visibilidad del error, no solo el éxito, y evita que una interfaz con aspecto saludable oculte un worker, callback o conexión a la base de datos defectuosos.

Despliega MinIO en Dockup sin perder sus límites

Una plantilla de Dockup debe codificar la imagen, el puerto 9000, los mounts, el health timing, el dominio, TLS y la entrega de secrets. Dockup debe conservar la configuración del runtime de MinIO mientras el operador confirma este requisito local: un segundo disco o destino remoto para backups recuperables. El mismo despliegue puede dirigirse a servidores de Dockup o a capacidad adjunta del cliente.

Cuando la ruta esté activa, aplica la configuración pública e intenta crear un bucket, subir un objeto multipart, obtenerlo mediante una URL presigned y verificar que sea posible recuperar un borrado versionado. Haz backup de los datos de los buckets, las policies, los usuarios y las réplicas probadas a nivel de objeto, y mantén el ejercicio de restauración en el plan operativo; esas son responsabilidades de MinIO que siguen siendo visibles después del aprovisionamiento de la infraestructura.

Preguntas frecuentes

¿Qué necesita MinIO para un despliegue en producción?

Dirige el contenedor de MinIO en el puerto 9000 a través de un único origin HTTPS. El requisito del runtime local es disponer de un segundo disco o de un destino remoto para backups recuperables. No consideres que MinIO está listo hasta que puedas crear un bucket, subir un objeto multipart, obtenerlo mediante una URL presigned y verificar que sea posible recuperar un borrado versionado.

¿Qué datos de MinIO deben incluirse en un backup?

Haz persistir /data e incluye los datos de los buckets, las policies, los usuarios y las réplicas probadas a nivel de objeto en el mismo manifest de recuperación. Una restauración limpia de MinIO solo es válida cuando las versiones de los buckets, las policies, los usuarios y un objeto multipart representativo sobreviven a la recuperación en un almacenamiento diferente.

¿MinIO requiere HTTPS detrás de un reverse proxy?

Usa HTTPS para el origin público de MinIO y mantén el puerto 9000 en la ruta interna. Aplica correctamente la configuración de MinIO: dirige la API de S3 y la consola a hostnames independientes cuando ambas estén expuestas. En MinIO, HTTPS protege las credenciales o el contenido de los usuarios durante el tránsito y mantiene coherente el comportamiento del cliente sensible al origin.

¿Cómo se debe probar una actualización de MinIO?

Restaura el estado actual de MinIO en un despliegue aislado, aplica la versión candidata y repite su transacción de aceptación. Presta especial atención, porque las releases del servidor, el comportamiento de signing del cliente y cualquier layout de erasure set deben probarse con una copia de los metadatos reales de los buckets. Conserva la imagen anterior de MinIO hasta comprender sus límites de migración de datos y rollback.