Back to blog
3 min read

Comment faire fonctionner `temporaryUrl()` de MinIO avec Laravel

Découvrez comment configurer Laravel et MinIO dans Docker pour générer des URLs signées temporaires.

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) :

  1. Ouvrir la console MinIO : http://localhost:8900

  2. Se connecter avec :

    • Utilisateur : example
    • Mot de passe : password
  3. Aller dans Identity > Users

  4. Cliquer sur “Create User” et générer :

    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
  5. 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 :

ChampDescription
AWS_URLL’URL de votre app Laravel suivie du port MinIO + nom du bucket
AWS_ENDPOINTAdresse interne vers le conteneur MinIO
Clés AWSGé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.ymlEntrée /etc/hosts pour un accès local simplifiéIdentifiants AWS générés dans la console MinIOConfiguration .env adaptée à MinIOUtilisation 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. 🚀