Laravel ile MinIO Entegrasyonu: Kapsamlı Rehber

L

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:

  1. Sadece MinIO kullanacaksanız, FILESYSTEM_DISK=s3 olarak ayarlayabilirsiniz.

  2. Eğer lokal ve MinIO'yu birlikte kullanacaksanız, FILESYSTEM_DISK=local ve FILESYSTEM_CLOUD=minio olarak 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=s3 ayarı yeterlidir.

  • Eğer hem lokal hem de MinIO kullanacaksanız, FILESYSTEM_CLOUD=minio ayarı 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!

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri