Comment faire fonctionner temporaryUrl()
de MinIO avec Laravel
La méthode Storage::disk('s3')->temporaryUrl()
de Laravel permet de générer des URLs temporaires signées pour accéder à des fichiers privés stockés dans MinIO, une solution de stockage compatible S3. Lorsque MinIO est exécuté dans un environnement Docker, une configuration précise est nécessaire pour que ces URLs fonctionnent correctement.
Ce guide présente une configuration simple et efficace pour intégrer Laravel avec MinIO.
🔹 Étape 1 : Définir un nom de conteneur stable
Dans votre fichier docker-compose.yml
, configurez le service MinIO avec un nom de conteneur fixe :
minio:
image: "minio/minio:latest"
ports:
- "9000:9000"
- "8900:8900"
container_name: dev.minio.example.com
environment:
MINIO_ROOT_USER: "example"
MINIO_ROOT_PASSWORD: "password"
volumes:
- "example-minio:/data/minio"
networks:
- example-network
command: minio server /data/minio --console-address ":8900"
Pourquoi cette configuration ?
- En définissant
container_name: dev.minio.example.com
, Laravel peut toujours atteindre MinIO par ce nom dans Docker. - Plus besoin de configurer
VIRTUAL_HOST
,VIRTUAL_PORT
ou des alias réseau.
🔹 Étape 2 : Modifier /etc/hosts
pour un accès local
Sur votre machine locale, ajoutez cette ligne à votre fichier /etc/hosts
(Linux/macOS) ou C:\Windows\System32\drivers\etc\hosts
(Windows) :
127.0.0.1 dev.minio.example.com
Cela permet d’accéder à MinIO via http://dev.minio.example.com
.
🔹 Étape 3 : Générer des identifiants MinIO
Créez un nouvel utilisateur via la console MinIO (http://localhost:8900
) :
-
Ouvrir la console MinIO : http://localhost:8900
-
Se connecter avec :
- Utilisateur :
example
- Mot de passe :
password
- Utilisateur :
-
Aller dans Identity > Users
-
Cliquer sur “Create User” et générer :
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
-
Assigner les droits de lecture et d’écriture à cet utilisateur.
🔹 Étape 4 : Configurer Laravel
Mettre à jour votre fichier .env
avec les nouveaux identifiants et l’URL correcte :
AWS_ACCESS_KEY_ID=your_generated_access_key
AWS_SECRET_ACCESS_KEY=your_generated_secret_key
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=test-storage
AWS_URL=http://dev.marketplace-api.example.com:9000/test-storage
AWS_ENDPOINT=http://dev.minio.example.com:9000
AWS_USE_PATH_STYLE_ENDPOINT=true
Détail des champs :
Champ | Description |
---|---|
AWS_URL | L’URL de votre app Laravel suivie du port MinIO + nom du bucket |
AWS_ENDPOINT | Adresse interne vers le conteneur MinIO |
Clés AWS | Générées depuis la console MinIO |
Pensez à vider le cache de Laravel après mise à jour :
php artisan config:clear
php artisan cache:clear
🔹 Étape 5 : Générer une URL temporaire avec Laravel
Utilisez le code suivant pour générer une URL temporaire :
use Illuminate\Support\Facades\Storage;
use Carbon\Carbon;
$filePath = 'documents/sample.pdf';
$expiration = Carbon::now()->addMinutes(60); // URL valide pendant 1h
$url = Storage::disk('s3')->temporaryUrl($filePath, $expiration);
return response()->json(['temporary_url' => $url]);
🎯 Récapitulatif
✔ Nom fixe du conteneur MinIO via docker-compose.yml
✔ Entrée /etc/hosts
pour un accès local simplifié
✔ Identifiants AWS générés dans la console MinIO
✔ Configuration .env
adaptée à MinIO
✔ Utilisation de temporaryUrl()
dans Laravel
Votre application Laravel est désormais prête à utiliser MinIO pour générer des liens sécurisés temporaires ! Une configuration propre, prête pour une montée en charge. 🚀