Pengantar Storage Minio
Dalam membuat project Laravel biasanya akan menggunakan storage tipe 'local' secara default. Storage tipe 'local' akan menggunakan folder storage/app di project Laravel kita. Metode ini digunakan apabila file source code aplikasi dan file upload aplikasi jadi satu dalam satu server atau dalam dunia arsitektur aplikasi disebut aplikasi monolith.
Ada metode lain yang ditawarkan Laravel dalam manajemen file upload ini. Salah satunya adalah menggunakan storage tipe 's3'. Storage tipe s3 ini memisahkan antara file source code aplikasi dengan file upload aplikasi, dan tidak dalam satu server. Metode ini menggunakan layanan storage pihak ketiga yang support driver s3, seperti amazone s3 storage, yandex s3 storage, digital ocean s3 storage dan lain-lain. Penyedia pihak ketiga ini biasanya memungut biaya tertentu untuk menggunakan layanannya.
Alih-alih membayar, kita bisa membuat layanan storage s3 ini dengan memanfaatkan layanan on-premise dari Minio (https://min.io) yang tentunya gratis. Tetapi kita perlu menyediakan sebuah server yang digunakan sebagai server storage s3. Spesifikasi server untuk diinstall Minio tentunya membutuhkan storage yang besar untuk menyimpan file-file upload proyek aplikasi laravel kita. Untuk installasi di server nya, dapat mengikuti petunjuk di https://min.io/download?license=agpl&platform=linux .
Untuk proses development, yang biasanya menggunakan OS windows, kita dapat menginstall di komputer local kita, dengan mengikuti petunjuk di : https://min.io/download?license=agpl&platform=windows . Setelah berhasil menginstall, akan didapatkan di terminal kita sebagai berikut :
Kemudian lewat browser kita akses alamat http://127.0.0.1:90001, dan login dengan menggunakan username 'admin', dan password 'password', dan akan tampil :
Langkah integrasi dengan project Laravel
Pertama agar bisa digunakan di proyek Laravel, kita harus membuat 'bucket'. Caranya : klik menu 'Bucket', kemudian 'Create Bucket +', kemudian masukkan 'Bucket Name'. Dalam contoh ini saya membuat 'bucket' dengan nama 'storage', dan akan muncul seperti tampilan di bawah ini :
Yang kedua kita perlu membuat access key dan secret key. Caranya klik "Access Keys", kemudian "Create access key +". Isian Access Key dan Secret Key akan terisi otomatis, tidak perlu diubah. Isian Expiry, dan lain-lain bisa dikosongkan, kemudian klik 'Create'. Setelah itu kita perlu meng-copy isian Access Key ke dalam file .env laravel pada bagian AWS_ACCESS_KEY_ID, dan Secret Key pada bagian AWS_SECRET_ACCESS_KEY.
Penerapan di Laravel
Buat sebuah project laravel baru
laravel new minio_app
Ubah isi file .env pada bagian
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
menjadi :
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=storage
AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_URL=http://localhost:9000/
AWS_ENDPOINT=http://localhost:9000/
Buat sebuah controller baru :
php artisan make:controller MinioController
Isikan pada controller tersebut :
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class MinioController extends Controller
{
function index() {
// ini digunakan untuk menampilkan file
return Storage::disk('s3')->response('tes.php'); // ganti tes.php dengan nama file di storage jika sudah ada
}
function post() {
// ini digunakan untuk menyimpan file
Storage::disk('s3')->put("tes.php", "Isi file tes.php");
}
}
Pada file routes/web.php, tambahkan route :
Route::get('minio/', [\App\Http\Controllers\MinioController::class, 'index']); // ini untuk menampilkan file
Route::get('minio/post', [\App\Http\Controllers\MinioController::class, 'post']); // ini untuk menyimpan file
Selesai
Read More