¿Busca una alternativa rentable a Amazon S3? MinIO es una gran opción. En esta guía, lo guiaremos a través de la instalación y configuración básica de MinIO en su servidor Ubuntu, junto con pasos adicionales para integrarlo con Laravel/PHP.
Por supuesto, configurar esto es bajo su propio riesgo. No somos responsables de nada.
Paso 1: configurar el servidor Ubuntu
Antes de comenzar, asegúrese de tener un servidor Ubuntu en funcionamiento.
Paso 2: Instale MinIO
Para instalar MinIO, siga las instrucciones proporcionadas en el documentación oficial de MinIO.
Paso 3: configurar el servicio minIO systemd
Después de la instalación, agregue el archivo systemd minio.service. Si no se agrega automáticamente, puede agregarlo manualmente. Puedes encontrar un archivo de ejemplo aquí.
Abra el archivo minio.service y elimine las siguientes líneas:
Usuario=usuario-minio Grupo=usuario-minio
Sin estas líneas, MinIO funcionará en la raíz como se describe en Este problema de GitHub.
Paso 4: Instale el certificado SSL Let's Encrypt
MinIO admite el cifrado SSL. Para configurar SSL, puede utilizar Let's Encrypt, un proveedor de certificados SSL gratuito y ampliamente confiable.
Siga las instrucciones en https://certbot.eff.org para que Ubuntu instale Let's Encrypt y genere su certificado SSL.
Paso 5: Configure MinIO con Let's Encrypt
Una vez que haya generado el certificado SSL, deberá configurar MinIO para usarlo. Así es cómo:
Copie los archivos del certificado SSL al directorio MinIO:
cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem /root/.minio/certs/public.crt cp /etc/letsencrypt/live/yourdomain.com/privkey.pem /root/.minio/certs/private .llave
Configure un crontab para renovar el certificado SSL semanalmente:
0 5 * * 1 cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem /root/.minio/certs/public.crt 0 5 * * 5 cp /etc/letsencrypt/live/yourdomain.com/privkey. pem /root/.minio/certs/private.key
Paso 6: cambiar la configuración de MinIO
Modifique el archivo de configuración de MinIO:
nano /etc/default/minio
Actualice las siguientes configuraciones:
MINIO_VOLUMES="/mnt/data" MINIO_OPTS="--dirección :9000 --dirección-consola :9001" MINIO_ROOT_USER="tu_nombre de usuario" MINIO_ROOT_PASSWORD="tu_contraseña" MINIO_SERVER_URL="https://tudominio.com:9000" MINIO_CONFIG_ENV_FILE=/ etc/predeterminado/minio
Paso 7: cambiar el nombre de usuario y la contraseña predeterminados
Cambie el nombre de usuario y la contraseña predeterminados para proteger su instalación de MinIO.
Paso 8: reinicie el servicio MinIO
Reinicie el servicio MinIO para aplicar los cambios:
sudo systemctl reiniciar minio.service
Verifique el estado para asegurarse de que MinIO se esté ejecutando:
sudo systemctl estado minio.servicio
Paso 9: habilite MinIO al iniciar
Para permitir que MinIO se ejecute al inicio, use el siguiente comando:
systemctl habilitar minio
Paso 10: crea un depósito
Cree un depósito en MinIO para almacenar sus archivos. Puede utilizar la interfaz web de MinIO o la herramienta de línea de comandos de MinIO para crear un depósito.
Paso 11: crear una política para el depósito
Cree una política para que el depósito defina los permisos de acceso. A continuación se muestra una política de ejemplo:
{ "Versión": "2012-10-17", "Declaración": [ { "Efecto": "Permitir", "Acción": [ "s3:*" ], "Recurso": [ "arn:aws:s3 :::tu_cubo/*" ] } ] }
Paso 12: cree un usuario y asigne la nueva política
Cree un usuario en MinIO y asígnele la política creada previamente.
Generar una clave de acceso y una clave secreta para el usuario. Necesitará estas claves en los siguientes pasos.
Paso 13: Configurar el soporte de Laravel para MinIO
Si está utilizando Laravel o PHP, puede integrar MinIO con su aplicación usando el liga/flysystem-aws-s3-v3
paquete.
Instale el paquete a través de Composer:
El compositor requiere liga/flysystem-aws-s3-v3 "^3.0"
A continuación, actualice el sistemas de archivos.php
archivo de configuración:
'nube' => env('FILESYSTEM_CLOUD', 'minio'), ... 'minio' => [ 'driver' => 's3', 'endpoint' => env('MINIO_ENDPOINT', 'https:// sudominio.com:9000'), 'use_path_style_endpoint' => true, 'key' => env('MINIO_KEY', '...'), 'secret' => env('MINIO_SECRET', '...') , 'región' => env('MINIO_REGION', 'JUSTSOMETHINGRANDOM'), 'bucket' => env('MINIO_BUCKET', 'BUCKETNAME'), ],
Paso 14: Pruebe la integración de MinIO en Laravel
Verifique la integración de MinIO usando la consola Tinker de Laravel:
php artesano tinker \Storage::cloud()->put('hola.json', '{"hola": "mundo"}'); \Storage::cloud()->get('hola.json');
Esto debería devolver algo como "verdadero" o algo exitoso. De lo contrario, puede agregar esta opción de depuración de sistemas de archivos a MinIO: 'throw'=> env('APP_DEBUG'), por lo que se convertirá en algo como:
'nube' => env('FILESYSTEM_CLOUD', 'minio'), ... 'minio' => [ 'driver' => 's3', 'endpoint' => env('MINIO_ENDPOINT', 'https:// sudominio.com:9000'), 'use_path_style_endpoint' => true, 'key' => env('MINIO_KEY', '...'), 'secret' => env('MINIO_SECRET', '...') , 'región' => env('MINIO_REGION', 'JUSTSOMETHINGRANDOM'), 'bucket' => env('MINIO_BUCKET', 'BUCKETNAME'), 'throw' => env('APP_DEBUG', false) ],
Esto solo depurará/arrojará mensajes de error cuando APP_DEBUG esté activado. Nunca ejecute esto en producción o en entornos sensibles.
Paso 15: Configurar DNS inverso
Configure DNS inverso si es posible.
Paso 16: reiniciar y verificar
Reinicie su servidor y verifique que MinIO y la integración con Laravel sigan funcionando correctamente. Esto (con suerte) significará que systemd todavía funciona correctamente.
Paso 17: Configurar cortafuegos
Para mejorar la seguridad, puede configurar firewalls para restringir el acceso a MinIO:
- Para acceso de administrador, permita conexiones solo desde las direcciones IP de su hogar/oficina.
- Para el acceso web, permita conexiones solo desde las IP de los servidores que necesitan acceso.
Tenga siempre cuidado con el hecho de que si la IP de su hogar, oficina o servidor cambia, tendrá que agregarlos a la lista blanca. Si las direcciones IP cambian con frecuencia, tome otras medidas de seguridad adecuadas para su servidor.
Siguiendo estos pasos, puede instalar y configurar un servidor MinIO básico en su servidor Ubuntu, evitando los altos costos asociados con Amazon S3. La integración de MinIO con Laravel/PHP le permite aprovechar el poder del almacenamiento de objetos en sus aplicaciones mientras mantiene el control sobre sus datos y costos.
También cree un cronjob de verificación de espacio en disco que envíe por correo electrónico si su disco está casi lleno, especialmente si está utilizando MinIO en modo de servidor único. MinIO tiene la capacidad de vincular múltiples servidores y zonas de replicación entre sí.
Si esto es demasiado complejo, también creamos una guía para configurar un Servidor SFTP simple para Ubuntu/Laravel.