MinIO en un VPS: almacenamiento S3 autohospedado
Configura MinIO en Ubuntu 24.04 con binario verificado, systemd, mc, URLs prefirmadas y un bucket S3 para usarlo como destino de copias con restic.
Qué ofrece el almacenamiento de objetos autohospedado con MinIO
MinIO es un almacenamiento de objetos autohospedado que utiliza la API de Amazon S3. Apunte restic o cualquier SDK de S3 a su propio servidor, cambie un ajuste del endpoint y el cliente no notará la diferencia. Esta guía configura un nodo único en Ubuntu 24.04: un binario verificado, un usuario del sistema dedicado, una unidad de systemd que mantiene las credenciales root fuera del archivo de la unidad y un bucket en el que restic guarda las copias de seguridad.
S3 (simple storage service) es una API HTTP, no un sistema de archivos. Se coloca un objeto en un bucket con una clave mediante PUT y se recupera mediante GET. No existen las operaciones de escritura parcial ni de cambio de nombre. A las herramientas de copia de seguridad les conviene este modelo porque un objeto llega completo o no llega.
Un nodo almacena una sola copia de los datos. Ese es el compromiso que se asume. Se obtiene un endpoint de S3 bajo su control por el precio de un VPS, pero también se heredan todas las tareas que antes realizaba el proveedor cloud, desde reemplazar un disco averiado hasta aplicar parches al software del servidor. La sección cercana al final explica claramente cuándo este compromiso es adecuado.
Estado de la edición comunitaria de MinIO en julio de 2026
Lea esta parte antes de basarse en ella, porque cambió recientemente. En mayo de 2025, MinIO eliminó las funciones de administración de la consola web en la edición comunitaria. En el navegador solo queda un explorador de objetos. Por tanto, los buckets y las claves de acceso se administran con el cliente de línea de comandos mc.
Más adelante, en 2025, MinIO dejó de publicar binarios comunitarios precompilados. El archivo README del proyecto indica ahora que la edición comunitaria se distribuye únicamente como código fuente. Las URL de descarga antiguas todavía funcionan: en julio de 2026 proporcionan la compilación del servidor RELEASE.2025-09-07T16-13-09Z y la compilación del cliente RELEASE.2025-08-13T08-35-41Z, y no ha aparecido ninguna compilación comunitaria más reciente. Por tanto, el binario siguiente es real, funciona y está congelado. No incluye las correcciones de seguridad publicadas después de septiembre de 2025.
Este hecho determina el resto de esta guía. Por eso MinIO escucha aquí en 127.0.0.1 y solo accede a Internet a través de un proxy que usted controla. Si prefiere recibir las correcciones, compile desde el código fuente. El README del proveedor proporciona un único comando, go install github.com/minio/minio@latest, que necesita una cadena de herramientas de Go y escribe el binario en ~/go/bin/minio. Instale ese binario en /usr/local/bin/minio y todos los demás pasos de esta guía permanecen sin cambios.
Instalar el binario de MinIO y verificar la descarga
Descargue la versión fijada y su suma de comprobación publicada. La opción -f hace que curl falle ante un error HTTP en lugar de guardar la página de error con el nombre solicitado. De lo contrario, podría instalar una página 404 y preguntarse por qué no se puede ejecutar.
cd /tmp
REL=RELEASE.2025-09-07T16-13-09Z
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/archive/minio.$REL" -o minio
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/archive/minio.$REL.sha256sum" -o minio.sha256sumCompare los dos hashes, y compare solo los hashes.
published=$(awk '{print $1}' minio.sha256sum)
downloaded=$(sha256sum minio | awk '{print $1}')
[ "$published" = "$downloaded" ] && echo "checksum ok"No use sha256sum -c minio.sha256sum aquí. La etiqueta escrita después del hash en ese archivo es minio.RELEASE.2025-09-07T16-13-09Z, y guardamos la descarga como minio, por lo que -c busca un archivo que no existe. Informa No such file or directory y después WARNING: 1 listed file could not be read, lo que parece indicar una descarga dañada, pero no es así. La etiqueta solo es un nombre. El hash es la parte que proporciona la garantía.
Explique con precisión qué demuestra esta comprobación. El binario y el hash proceden del mismo proveedor y se obtuvieron mediante la misma conexión, por lo que una coincidencia demuestra que la descarga está completa y no se dañó ni se modificó durante el tránsito. No demuestra que el proveedor sea confiable. Ese es otro problema, y ningún comando sha256sum lo resuelve.
sudo install -o root -g root -m 755 minio /usr/local/bin/minio
minio --versionminio --version muestra minio version RELEASE.2025-09-07T16-13-09Z seguido de un par de líneas de compilación. Un Permission denied aquí significa que el modo es incorrecto, y command not found significa que /usr/local/bin no está en su PATH.
Crear un usuario del sistema y un directorio de datos
MinIO acepta cargas desde la red, por lo que no debe ejecutarse como root. Asígnele una cuenta sin directorio de inicio y sin shell de inicio de sesión.
sudo groupadd -r minio-user
sudo useradd -M -r -g minio-user -s /usr/sbin/nologin minio-user
sudo mkdir -p /var/lib/minio/data
sudo chown -R minio-user:minio-user /var/lib/minio
sudo chmod 750 /var/lib/minio-r crea una cuenta del sistema con un UID inferior a 1000, para mantenerla fuera del rango utilizado por las personas. -M omite el directorio de inicio, porque una cuenta que nunca inicia sesión no necesita conservar nada allí. Compruebe el resultado con id minio-user y con stat -c '%U %a' /var/lib/minio, que debería mostrar minio-user 750.
El usuario debe poder escribir en el directorio de datos, no solo leerlo. En el primer inicio, MinIO crea un directorio .minio.sys dentro del volumen para guardar su propia configuración. Por eso, si el directorio pertenece a root, MinIO termina durante el inicio con un mensaje que finaliza en permission denied. La misma regla se aplica a todos los servicios que ejecute de esta forma, y usuarios de servicio con privilegios mínimos en un VPS lo explica correctamente.
Coloque las credenciales de root en un archivo de entorno
Las credenciales de root permiten acceder a todos los buckets, por lo que no deben estar en el archivo de unidad, que es legible por todos. Cree primero el archivo con los permisos correctos y escriba en él después. Así, la contraseña no queda en un archivo legible ni siquiera durante un instante.
sudo install -o root -g root -m 600 /dev/null /etc/default/minio
printf 'MINIO_ROOT_USER=minio-root\nMINIO_ROOT_PASSWORD=%s\nMINIO_VOLUMES="/var/lib/minio/data"\nMINIO_OPTS="--address 127.0.0.1:9000 --console-address 127.0.0.1:9001"\n' "$(openssl rand -base64 24)" | sudo tee /etc/default/minio > /dev/null
sudo sed -n 's/^MINIO_ROOT_PASSWORD=//p' /etc/default/miniotee trunca un archivo existente en lugar de volver a crearlo, por lo que los permisos permanecen en 600 y el propietario sigue siendo root. Esto es intencionado. systemd lee EnvironmentFile como root antes de eliminar privilegios y cambiar a User=. Por tanto, la cuenta del servicio nunca necesita leer sus propias credenciales. Cuando el servicio esté en ejecución, compruébelo con sudo -u minio-user cat /etc/default/minio. Ese comando debe mostrar Permission denied.
Antes de iniciarlo, debe conocer dos comportamientos de MinIO. Si no tiene MINIO_ROOT_USER ni MINIO_ROOT_PASSWORD en su entorno, MinIO no rechaza el inicio. Se inicia con las credenciales predeterminadas documentadas, minioadmin:minioadmin. Es el primer par que prueba cualquier escáner y, mientras tanto, el servicio parece estar completamente operativo. En cambio, se rechaza una contraseña de menos de 8 caracteres. MinIO termina durante el inicio con un error que indica que las credenciales no son válidas, porque la clave de acceso necesita al menos 3 caracteres y la clave secreta, al menos 8.
MINIO_VOLUMES es la ruta de datos y MINIO_OPTS contiene las opciones. La vinculación a 127.0.0.1 significa que nada fuera de este VPS puede acceder todavía a la API de S3, lo que constituye el valor predeterminado adecuado. Más adelante puede abrir el acceso deliberadamente mediante un proxy que tenga un certificado.
Escribir la unidad de systemd
Crea /etc/systemd/system/minio.service:
[Unit]
Description=MinIO object storage
Documentation=https://github.com/minio/minio
Wants=network-online.target
After=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
Restart=always
RestartSec=5
LimitNOFILE=65536
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetNo hay un - inicial en EnvironmentFile. Es una decisión, no un error tipográfico. Con el guion, systemd ignora la ausencia del archivo e inicia MinIO de todos modos. Por tanto, un archivo eliminado o una ruta mal escrita deja de forma silenciosa un servidor ejecutándose con minioadmin:minioadmin. Sin el guion, la ausencia del archivo hace que la unidad falle antes de que MinIO se ejecute, y journalctl -u minio muestra Failed to load environment files: No such file or directory. Una unidad que se niega a iniciar se detecta con mucha más facilidad que un servidor que acepta silenciosamente la contraseña predeterminada.
$MINIO_VOLUMES y $MINIO_OPTS no llevan comillas a propósito, porque systemd divide las variables sin comillas por los espacios en blanco y las convierte en argumentos separados. Así, las cuatro palabras de MINIO_OPTS se convierten en cuatro argumentos para minio server. LimitNOFILE=65536 aumenta el límite de descriptores de archivo, porque cada conexión abierta y cada archivo de datos abierto consume un descriptor, y el valor predeterminado de 1024 se agota con carga.
sudo systemctl daemon-reload
sudo systemctl enable --now minio
systemctl is-active minio
curl -fsS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9000/minio/health/liveis-active debería mostrar active, y el endpoint de comprobación de estado debería responder 200. journalctl -u minio -n 20 --no-pager muestra la dirección de API en la que el servidor está escuchando. Si la unidad sigue reiniciándose, systemd se da por vencido y registra Start request repeated too quickly. Esto significa que MinIO termina en cada intento. El motivo aparece en las líneas anteriores a ese mensaje, así que lee hacia arriba.
Para lograr un mayor aislamiento, añade ProtectSystem=full y ProtectHome=true a la sección [Service]. Ambos requieren espacios de nombres de montaje del kernel del host. En la virtualización mediante contenedores que comparte el kernel del host, como OpenVZ o LXC, pueden fallar y la unidad informa de status=226/NAMESPACE. Elimina esas dos líneas para que se inicie. La unidad en sí es una unidad normal, y los servicios y temporizadores de systemd en un VPS cubre el resto de las directivas.
Instalar mc y demostrar un recorrido de ida y vuelta
El cliente de MinIO es mc. No lo instale con apt install mc. Ese paquete corresponde a Midnight Commander, un gestor de archivos sin relación con MinIO.
cd /tmp
curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o mc
curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc.sha256sum -o mc.sha256sum
[ "$(awk '{print $1}' mc.sha256sum)" = "$(sha256sum mc | awk '{print $1}')" ] && echo "checksum ok"
sudo install -o root -g root -m 755 mc /usr/local/bin/mcRegistre el servidor como un alias y transfiera un objeto a través de él.
MINIO_PASS=$(sudo sed -n 's/^MINIO_ROOT_PASSWORD=//p' /etc/default/minio)
mc alias set local http://127.0.0.1:9000 minio-root "$MINIO_PASS"
mc mb local/backups
echo "hello object storage" > /tmp/hello.txt
mc cp /tmp/hello.txt local/backups/hello.txt
mc ls local/backups
mc cat local/backups/hello.txtmc ls debe mostrar hello.txt con su tamaño, y mc cat debe imprimir hello object storage. Este recorrido de ida y vuelta demuestra que el servidor funciona, porque genera las mismas solicitudes S3 firmadas que generará cualquier otro cliente. mc admin info local muestra el estado del servidor si quiere una segunda comprobación.
Ejecute ahora una comprobación adicional, mientras el equipo aún está vacío.
mc alias set defaultcheck http://127.0.0.1:9000 minioadmin minioadminEste comando debe fallar. Si se ejecuta correctamente, el archivo de entorno no llegó al proceso y el servidor está utilizando las credenciales predeterminadas. Corrija esto antes de que cualquier otra cosa acceda al equipo.
mc almacena los alias en ~/.mc/config.json como texto sin formato, por lo que esas credenciales quedan en el directorio personal de quien ejecutó el comando. Ejecutar mc con sudo coloca las credenciales de root en /root/.mc/config.json. Mantenga el alias de root en una sola cuenta de administrador y asigne a cada aplicación su propia clave.
Entregar un objeto con una URL prefirmada
Una URL prefirmada es un enlace HTTPS normal con una firma y una fecha de expiración. Cualquiera que tenga el enlace puede descargar ese objeto sin una cuenta y sin un cliente.
mc share download --expire 12h local/backups/hello.txtLa salida incluye X-Amz-Signature y X-Amz-Expires en la cadena de consulta. Hay dos aspectos que suelen sorprender. El enlace se construye a partir del endpoint del alias utilizado. Por eso, un alias en 127.0.0.1 genera un enlace que solo se puede abrir desde esta máquina. Cree otro alias en su hostname público para los enlaces que vaya a enviar. Además, no existe un botón para revocarlo. La firma sigue siendo válida hasta que expira, por lo que una expiración breve es el único control disponible. Siete días es el máximo que permite el formato de firma S3.
Asigne a clave y un bucket propios a restic
Las credenciales de root pueden leer y eliminar todos los buckets, por lo que un trabajo de copia de seguridad no debe usarlas. Cree un bucket, una política limitada a ese bucket y un usuario sin ningún otro permiso.
mc mb local/restic
cat > /tmp/restic-rw.json <<'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetBucketLocation"],
"Resource": ["arn:aws:s3:::restic"]
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": ["arn:aws:s3:::restic/*"]
}
]
}
EOF
RESTIC_KEY=$(openssl rand -base64 24)
mc admin policy create local restic-rw /tmp/restic-rw.json
mc admin user add local restic-backup "$RESTIC_KEY"
mc admin policy attach local restic-rw --user restic-backupMinIO incluye una política integrada readwrite. Habría requerido un comando menos, pero concede acceso completo a todos los buckets del servidor. La política anterior nombra el bucket dos veces a propósito: una vez como arn:aws:s3:::restic para que funcione la enumeración del bucket, y otra vez como arn:aws:s3:::restic/* para los objetos que contiene. En S3, un bucket y sus objetos son recursos independientes, por lo que una política que solo nombra uno de ellos falla de una forma que parece indicar que el cliente está dañado.
Pruebe la limitación antes de confiar en ella.
mc alias set resticuser http://127.0.0.1:9000 restic-backup "$RESTIC_KEY"
mc ls resticuser/restic
mc ls resticuser/backupsEl primer ls se ejecuta correctamente y el segundo falla con Access Denied. Una política que no se ha probado es solo una suposición.
Ahora configure restic para que use el bucket. restic lee las credenciales de S3 desde las variables de entorno estándar de AWS, por lo que no se utiliza ningún archivo de credenciales específico de restic.
sudo apt install -y restic
export AWS_ACCESS_KEY_ID=restic-backup
export AWS_SECRET_ACCESS_KEY="$RESTIC_KEY"
restic -r s3:http://127.0.0.1:9000/restic init
restic -r s3:http://127.0.0.1:9000/restic backup /etc
restic -r s3:http://127.0.0.1:9000/restic snapshotsrestic init solicita una contraseña para el repositorio. Esa contraseña cifra el repositorio, por lo que MinIO solo almacena texto cifrado. Si pierde la contraseña, pierde la copia de seguridad. Un proceso iniciado por un temporizador de systemd no tiene un terminal donde introducirla, por lo que debe establecer RESTIC_PASSWORD_FILE en un archivo con modo 600 para las copias de seguridad programadas.
Una regla de ubicación es más importante que cualquiera de los comandos anteriores. Un repositorio de restic en el mismo VPS que los datos que protege evita un rm y nada más. El nodo de MinIO debe estar en otra máquina, idealmente en otra región. copias de seguridad de restic en un VPS explica cómo configurar la programación y la retención a partir de esta base.
Terminar TLS con nginx
MinIO se ejecuta en localhost, por lo que nginx es la superficie pública. Emita primero el certificado, como se describe en Certificados de Let's Encrypt con certbot y nginx, y después use este bloque de servidor.
server {
listen 443 ssl;
server_name s3.example.com;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
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_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://127.0.0.1:9000;
}
}Varias de esas líneas son esenciales. client_max_body_size 0 elimina el límite predeterminado de 1 MB para el cuerpo de la solicitud. Sin este ajuste, cualquier carga más grande se rechaza con 413 Request Entity Too Large antes de que MinIO reciba la solicitud. proxy_request_buffering off transmite la carga directamente, porque la configuración predeterminada guarda primero toda la solicitud en un archivo temporal. Por tanto, un objeto grande necesita el doble de espacio en disco. proxy_set_header Host $http_host es el ajuste más sutil: una firma de S3 incluye el encabezado Host. Si el proxy lo reescribe, todas las solicitudes fallan con SignatureDoesNotMatch, aunque el registro de acceso muestre que la solicitud llegó con normalidad.
Indique también a MinIO su nombre público. Así, los enlaces que genere apuntarán al proxy y no a localhost.
echo 'MINIO_SERVER_URL=https://s3.example.com' | sudo tee -a /etc/default/minio
sudo systemctl restart minioEl firewall solo necesita unas pocas reglas. Permita SSH y HTTPS. No cree ninguna regla para los puertos 9000 y 9001, porque una dirección enlazada a 127.0.0.1 no es accesible desde otra máquina, independientemente de la configuración del firewall. Conceptos básicos del firewall ufw en un VPS contiene los comandos.
Cuándo basta con MinIO en un solo nodo y cuándo conviene usar S3 administrado
Un solo nodo significa aquí una unidad sin paridad. La documentación de MinIO describe este diseño como adecuado para pruebas y cargas pequeñas sin requisitos de disponibilidad. No hay una segunda copia dentro del despliegue, por lo que la durabilidad de cada objeto depende de la durabilidad del disco de un solo VPS. Las funciones que presuponen un backend distribuido con codificación de borrado, incluida la replicación de buckets y el bloqueo de objetos, corresponden a despliegues con varias unidades. Por tanto, no prometa a nadie una política de retención inmutable en esta configuración.
Es una buena opción como destino de restic en un segundo VPS de otra región y como endpoint S3 para trabajos de desarrollo y artefactos de CI, cuando perder un bucket solo implica reconstruirlo. También es razonable para las cargas de archivos de los usuarios en una aplicación pequeña, siempre que usted sea responsable del plan de recuperación y haya probado realmente una restauración.
Elija S3 administrado cuando un contrato o un organismo regulador exija el bloqueo de objetos o durabilidad en varias regiones, o cuando prefiera no recibir una alerta a las 03:00 porque se llenó un disco. La compilación congelada es otra razón objetiva. En julio de 2026, el binario comunitario precompilado corresponde a septiembre de 2025 y no recibe correcciones. Ejecutarlo implica aceptar esa situación, o compilarlo desde el código fuente y mantenerlo actualizado por su cuenta.
Conviene establecer un límite porque esta cuestión aparece con frecuencia. El almacenamiento de objetos no es una base de datos. Cada escritura reemplaza un objeto completo, por lo que un archivo SQL activo en un bucket S3 es lento y no es seguro. Mantenga la base de datos en el disco local y haga una copia de seguridad en el bucket: ejecutar SQLite en producción en un VPS describe esta separación.
Modos de fallo y mensajes que verá
La unidad falla justo después de systemctl enable --now. Lea journalctl -u minio -n 30 --no-pager. Failed to load environment files: No such file or directory significa que falta /etc/default/minio o que su ruta está mal escrita en la unidad. Un mensaje que termina en permission denied significa que el directorio de datos no admite escritura para la cuenta de servicio. Compruebe que stat -c '%U' /var/lib/minio/data muestre minio-user.
minioadmin:minioadmin todavía permite iniciar sesión. El archivo de entorno nunca llegó al proceso. Confirme que la unidad contiene EnvironmentFile=/etc/default/minio, ejecute sudo systemctl daemon-reload y reinicie el servicio. MinIO lee sus credenciales raíz una vez al iniciar. Por tanto, editar ese archivo sin reiniciar no cambia nada.
Address already in use al iniciar. Otro proceso ocupa el puerto 9000. Encuéntrelo con sudo ss -ltnp | grep :9000 antes de cambiar el puerto de MinIO.
Las cargas de más de 1 MB fallan a través del proxy. nginx respondió con 413 Request Entity Too Large y MinIO nunca recibió la solicitud. Establezca client_max_body_size 0 en el bloque del servidor.
SignatureDoesNotMatch. La clave secreta es incorrecta o algo entre el cliente y MinIO reescribió el encabezado Host, que forma parte de la firma.
RequestTimeTooSkewed. El reloj del cliente o del servidor no es correcto. Cada solicitud S3 incluye una marca de tiempo y se rechaza fuera de una ventana de 15 minutos. Compruebe timedatectl y confirme que la sincronización de hora está activa.
Access Denied en un bucket que sabe que existe. La clave está limitada a otro bucket. Muestre lo que la política permite realmente con mc admin policy info local restic-rw y compare el nombre del bucket en las líneas de recursos.
FAQ
¿MinIO de un solo nodo es suficiente para copias de seguridad reales?
Es suficiente como destino de restic si se ejecuta en una máquina independiente de los datos que protege. No es suficiente como única copia. Una implementación con una sola unidad no tiene paridad, por lo que no existe una segunda copia dentro de MinIO. Si el disco de esa VPS pierde datos, los objetos desaparecen. Mantenga un segundo destino en otra ubicación y realice al menos una restauración desde ambos para comprobar que el proceso funciona.
¿Por qué sha256sum -c falla con el archivo de sumas de comprobación de MinIO?
Porque la etiqueta que aparece después del hash en ese archivo indica la versión, minio.RELEASE.2025-09-07T16-13-09Z, mientras que el archivo descargado normalmente se llama minio. sha256sum -c busca un archivo con el nombre escrito dentro del archivo de sumas de comprobación, no lo encuentra e informa de No such file or directory y WARNING: 1 listed file could not be read. La descarga es correcta. Compare directamente las cadenas de hash e ignore la etiqueta, que no tiene significado de seguridad.
¿Qué ocurrió con la consola web de administración de MinIO?
MinIO eliminó las funciones de administración de la consola de la edición comunitaria en mayo de 2025 y dejó un explorador de objetos en la interfaz web. Ahora los buckets y los usuarios se administran con el cliente mc, mediante comandos como mc admin user add y mc admin policy attach. Esta es la vía compatible en la edición comunitaria, no una solución provisional. Por eso esta guía realiza todas las operaciones desde la línea de comandos.
¿Cómo configuro restic para usar MinIO como backend S3?
Establezca AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY con una clave de acceso de MinIO y su secreto. Después, use una cadena de repositorio con el formato s3:https://s3.example.com/restic, donde el último elemento de la ruta es el nombre del bucket. Cree primero el bucket con mc mb, porque una clave limitada a un bucket no tiene permiso para crear buckets. restic cifra todo con su propia contraseña del repositorio antes de cargarlo. Por tanto, MinIO almacena texto cifrado y nunca puede ver sus archivos.
¿Tengo que ejecutar MinIO detrás de nginx?
Necesita TLS (seguridad de la capa de transporte) cuando un cliente no está en la misma máquina, porque las credenciales de S3 y los datos de los objetos viajan dentro de la solicitud. Un proxy en el puerto 443 con un certificado de certbot es la forma más sencilla de hacerlo y mantiene la renovación del certificado separada de MinIO. MinIO también puede terminar TLS directamente si configura --certs-dir para usar un directorio que contenga public.crt y private.key. Sin embargo, la cuenta de servicio necesitará acceso de lectura a la clave privada renovada, lo que añade trabajo para obtener el mismo resultado.