Mengeksplorasi jalur object storage untuk media: kapan MinIO di atas Local PV masuk akal, men-deploy MinIO dengan PVC, menghubungkan Laravel Flysystem ke endpoint S3, dan kapan shared filesystem NFS sudah cukup tanpa object store

Sejauh ini semua media disimpan sebagai file di filesystem — baik NFS RWX maupun hostpath. Tetapi ada pola aplikasi modern yang menyimpan media sebagai object: gambar, video, arsip yang diakses lewat API S3. Untuk itu, ada jalan lain: object storage.
Di episode 9 kita menilai kapan object storage dibutuhkan, dan jika ya, bagaimana menjalankannya di atas OpenEBS dengan MinIO + Local PV. Kalian juga akan belajar menyambungkan Laravel Flysystem ke endpoint S3.
Jujur: OpenEBS tidak menyediakan object store built-in. Object storage adalah lapisan tambahan yang kalian pasang sendiri. Sebelum melakukannya, ukur kebutuhan:
Aturan untuk lab: shared filesystem (NFS RWX) biasanya sudah cukup untuk media. Object storage adalah opsi lanjutan, bukan keharusan.
Bila memutuskan memakai object storage, MinIO adalah pilihan paling sederhana. Jalankan di atas Local PV:
helm repo add minio https://operator.min.io
helm repo update
helm install minio minio/minio \
--namespace minio --create-namespace \
--set persistence.storageClass=openebs-hostpath \
--set persistence.size=10Gi \
--set resources.requests.memory=512Mikubectl -n minio get pods
kubectl -n minio get pvc minioMinIO menyimpan data di backing Local PV (openebs-hostpath) — pola "di atas OpenEBS" yang sama seperti komponen lain. Endpoint layanan: minio:9000 (Service), kredensial dari Secret yang dibuat Helm.
Laravel memakai Flysystem untuk mengakses object storage. Konfigurasikan disk S3 di config/filesystems.php:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT_URL'),
],Lalu set di .env / ConfigMap:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=<minio-secret>
AWS_BUCKET=media
AWS_ENDPOINT_URL=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=trueAWS_USE_PATH_STYLE_ENDPOINT=true penting untuk MinIO (path-style, bukan virtual-host). Buat bucket dan uji upload dari kode:
use Illuminate\Support\Facades\Storage;
Storage::disk('s3')->put('gallery/foto.jpg', file_get_contents($file));
$url = Storage::disk('s3')->temporaryUrl('gallery/foto.jpg', now()->addMinutes(5));Tip
Test upload object di encoded: Storage::disk('s3')->put(...) lalu Storage::disk('s3')->exists(...) — keduanya harus true. Jika gagal, periksa endpoint URL dan AWS_USE_PATH_STYLE_ENDPOINT.
Pada episode 9 ini, kalian telah menilai object storage dengan jujur:
Inti yang harus dibawa pulang:
openebs-hostpath = object storage sederhana dalam cluster.s3 dengan endpoint + AWS_USE_PATH_STYLE_ENDPOINT=true.Storage::disk('s3')->put() + exists().Di episode 10 selanjutnya kita akan men-deploy aplikasi Lengkap: membangun image Laravel, menulis Deployment + Nginx Ingress + PostgreSQL Local PV, menjalankan migrasi, dan menguji end-to-end upload hingga tampil antar Pod. Sampai jumpa di episode 10!