Cara menggunakan Minio Server sebagai Laravel Custom File Storage
Laravel
mempunyai konfigurasi file storage yang sangat customizable, Jadi kita bisa mengubah drivernya sesuai kebutuhan. Pada tutorial kali ini kita akan mengimplementasi Minio server untuk memanage file-file di aplikasi kita.
Install Minio Server here.
Install projek Laravel here.
Buat variable environment di file .env
dan sesuaikan dengan credentials Minio kalian.
MINIO_KEY=
MINIO_SECRET=
MINIO_REGION=us-east-1
MINIO_ENDPOINT=
MINIO_BUCKET=
MINIO_VERSION=latest
Install aws/aws-sdk-php
composer require aws/aws-sdk-php
Install league/flysystem
package
composer require coraxster/flysystem-aws-s3-v3-minio
Jalankan perintah berikut untuk membuat service provider
php artisan make:provider MinioStorageServiceProvider
Kemudian buka file tersebut di folder app/Providers/
, selanjutnya sesuaikan isinya seperti berikut ini:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Aws\S3\S3Client;
use League\Flysystem\AwsS3v3\AwsS3Adapter;
use League\Flysystem\Filesystem;
use Storage;
class MinioStorageServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Storage::extend('minio', function ($app, $config) {
$client = new S3Client([
'credentials' => [
'key' => $config["key"],
'secret' => $config["secret"]
],
'region' => $config["region"],
'version' => "latest",
'bucket_endpoint' => false,
'use_path_style_endpoint' => true,
'endpoint' => $config["endpoint"],
]);
$options = [
'override_visibility_on_copy' => true
];
return new Filesystem(new AwsS3Adapter($client, $config["bucket"], '', $options));
});
}
}
Daftarkan service provider tersebut di file config/app.php
pada bagian providers
:
App\Providers\MinioStorageServiceProvider::class
Tambahkan konfigurasi di bagian disks
pada file config/filesystems.php
:
'disks' => [
// other disks
'minio' => [
'driver' => 'minio',
'key' => env('MINIO_KEY'),
'secret' => env('MINIO_SECRET'),
'region' => 'us-east-1',
'bucket' => env('MINIO_BUCKET'),
'endpoint' => env('MINIO_ENDPOINT','http://localhost:9000')
]
]
Note : value region
bersifat opsional dan bisa kamu set apapun.
Storage::disk('minio')->put('avatars/1', $fileContents);