Bulut tabanlı dosya depolama çözümleri günümüzde büyük önem taşımaktadır. Laravel projelerinde genellikle Amazon S3 kullanılırken, açık kaynak kodlu ve kendi sunucumuzda barındırabileceğimiz bir çözüm arıyorsak MinIO harika bir alternatiftir. Bu yazıda Laravel ile MinIO entegrasyonunu adım adım açıklayacağız.
MinIO Nedir?
MinIO, Amazon S3 ile uyumlu, açık kaynaklı bir nesne depolama sunucusudur. Laravel ile kolayca entegre edilerek dosya yükleme ve yönetme işlemlerinde kullanılabilir. Bu yazıda, Laravel'de MinIO entegrasyonunun farklı yöntemlerini, avantajlarını ve kullanım senaryolarını detaylı bir şekilde ele alacağız.
MinIO'yu Kurma ve Çalıştırma
Öncelikle MinIO'yu lokal ortamda çalıştırmak için Docker kullanabiliriz:
# MinIO'yu çalıştır
docker run -p 9000:9000 -p 9001:9001 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=password" \
minio/minio server /data --console-address ":9001"
MinIO arayüzüne tarayıcıdan şu adres üzerinden erişebilirsiniz:
http://localhost:9001
Kullanıcı adı: admin
Şifre: password
Artık MinIO hazır! Şimdi Laravel ile entegrasyona geçelim.
Laravel'de MinIO Yapılandırma Yöntemleri
Laravel’de MinIO’yu kullanmanın iki farklı yolu vardır:
-
Sadece MinIO kullanacaksanız,
FILESYSTEM_DISK=s3olarak ayarlayabilirsiniz. -
Eğer lokal ve MinIO'yu birlikte kullanacaksanız,
FILESYSTEM_DISK=localveFILESYSTEM_CLOUD=minioolarak yapılandırabilirsiniz.
Her iki yöntemi de detaylı inceleyelim.
Yöntem 1: Sadece MinIO Kullanımı (Basit Yöntem)
Eğer MinIO'yu S3 gibi kullanmak istiyorsanız .env dosyanızı aşağıdaki gibi düzenleyin:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=admin
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=my-bucket
AWS_ENDPOINT=http://localhost:9000
AWS_USE_PATH_STYLE_ENDPOINT=true
Daha sonra config/filesystems.php dosyanızda s3 diskine MinIO bilgilerini ekleyin:
'filesystems' => [
'disks' => [
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
],
],
],
Bu yapılandırmayla artık Storage::disk('s3') kullanarak MinIO'yu kullanabilirsiniz:
use Illuminate\Support\Facades\Storage;
Storage::disk('s3')->put('example.txt', 'Bu bir test dosyasıdır!');
✅ Avantajlar:
✔ Laravel'in varsayılan dosya sistemine tam uyumluluk sağlar.
✔ MinIO'yu Amazon S3 gibi kullanmanıza olanak tanır.
✔ Kod daha basit ve yönetimi kolaydır.
⚠ Dezavantaj:
❌ Eğer aynı anda farklı dosya sistemleri kullanacaksanız, yeterince esnek değildir.
Yöntem 2: Lokal + MinIO Birlikte Kullanımı (Esnek Yöntem)
Eğer Laravel’de hem lokal dosya depolamayı hem de MinIO’yu kullanmak istiyorsanız .env dosyanızı şu şekilde yapılandırabilirsiniz:
FILESYSTEM_DISK=local
FILESYSTEM_CLOUD=minio
AWS_ACCESS_KEY_ID=admin
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=my-bucket
AWS_ENDPOINT=http://localhost:9000
AWS_USE_PATH_STYLE_ENDPOINT=true
Daha sonra config/filesystems.php dosyanıza şu eklemeyi yapın:
'filesystems' => [
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'minio' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
],
],
],
Bu yapılandırmayla artık farklı diskleri ayrı ayrı kullanabilirsiniz:
// Lokal dosya yükleme
Storage::disk('local')->put('local-example.txt', 'Bu lokal bir dosyadır.');
// MinIO'ya dosya yükleme
Storage::disk('minio')->put('minio-example.txt', 'Bu MinIO üzerinde bir dosyadır.');
✅ Avantajlar:
✔ Aynı anda hem lokal hem de MinIO depolama alanlarını kullanabilirsiniz.
✔ Büyük ölçekli projeler için daha esnektir.
✔ Dosya sistemleri arasında kolay geçiş sağlar.
⚠ Dezavantaj:
❌ Yapılandırma biraz daha karmaşıktır.
Hangi Yöntemi Seçmeliyim?
| Kullanım Senaryosu | Önerilen Yöntem |
|---|---|
| Sadece MinIO kullanacaksanız | FILESYSTEM_DISK=s3 (Basit yöntem) |
| Lokal + MinIO birlikte kullanacaksanız | FILESYSTEM_DISK=local, FILESYSTEM_CLOUD=minio (Esnek yöntem) |
Eğer sadece MinIO kullanıyorsanız, FILESYSTEM_DISK=s3 yöntemi daha sade ve anlaşılırdır. Ancak, Laravel'in kendi local diskini de kullanmak istiyorsanız, ikinci yöntem daha esnektir.
Sonuç
MinIO, Laravel projelerinde S3 uyumlu bir nesne depolama servisi olarak kolayca kullanılabilir.
-
Sadece MinIO kullanacaksanız,
FILESYSTEM_DISK=s3ayarı yeterlidir. -
Eğer hem lokal hem de MinIO kullanacaksanız,
FILESYSTEM_CLOUD=minioayarı ile esnek bir yapı kurabilirsiniz.
Bu rehberde hem basit hem de gelişmiş MinIO yapılandırmalarını inceledik. Artık Laravel projelerinizde MinIO'yu rahatlıkla kullanabilirsiniz!
