story
Setiap developer PHP yang pernah pakai Laravel pasti akrab dengan php artisan storage:link. Perintah satu baris yang terasa sakral, padahal kalau dipikir lebih dalam — kenapa kita masih melakukan ini di tahun segini?
Dipublikasikan

Ada ritual kecil yang hampir setiap developer Laravel lakukan setiap kali setup project baru. Bukan migrasi database, bukan generate app key — tapi satu perintah yang terasa seperti mantra wajib:
php artisan storage:link
Dan setelah itu, kamu bernapas lega. Seolah kamu baru saja menyelesaikan sesuatu yang penting.
Padahal kalau dipikir pelan-pelan, ada yang agak lucu di sini.
Kamu baru saja membuat symlink — alias shortcut sistem operasi — supaya folder storage/app/public bisa diakses lewat public/storage. Dua folder di server yang sama. Dua path yang berbeda. Satu perintah PHP untuk menjembatani keduanya. Dan kalau kamu deploy ke server baru, kamu harus ingat untuk menjalankannya lagi. Kalau lupa? Semua gambar yang harusnya tampil jadi broken image yang memalukan.
Welcome to the comedy of local file storage.
Supaya fair, mari kita pahami dulu kenapa fitur ini ada.
Laravel memisahkan file yang "boleh diakses publik" dan file yang tidak. File sensitif seperti invoice, dokumen kontrak, atau backup database disimpan di storage/app/private — tidak bisa diakses langsung lewat browser. Itu keputusan keamanan yang masuk akal.
Tapi untuk file yang memang perlu tampil ke pengguna — foto profil, thumbnail produk, gambar artikel — kamu butuh cara supaya web server bisa menyajikannya. Dan karena web server (Nginx, Apache) hanya bisa serve file dari direktori public/, Laravel menyiasatinya dengan membuat symlink dari public/storage ke storage/app/public.
Secara konsep, ini bukan ide yang gila. Ini solusi yang pragmatis untuk batasan arsitektur yang sudah ada.
Tapi pragmatis bukan berarti tidak ada konsekuensinya.
Kalau kamu sudah cukup lama kerja dengan Laravel, kamu pasti pernah mengalami setidaknya satu dari skenario berikut:
Skenario pertama. Kamu push code ke production. CI/CD berjalan mulus. Deploy sukses. Tapi tiba-tiba klien WhatsApp kamu: "Mas, kok fotonya nggak muncul?" Kamu panik, cek log, cek config — semuanya bersih. Lalu sadar: kamu lupa jalankan di server baru.
Kamu bisa berkomentar sebagai pengguna login atau anonim. Demi menjaga integritas diskusi, komentar yang sudah dikirim tidak bisa diedit atau dihapus.
Belum ada komentar. Jadilah yang pertama berbagi pendapat.
Jelajahi Selanjutnya
Dipilih dari artikel yang membahas app serupa, punya konteks editorial yang berdekatan, dan tetap menjaga variasi bacaan.

Dari bootcamp sampai hackathon, aplikasi pencatatan keuangan selalu jadi pilihan pertama para developer. Basi? Iya. Tapi alasannya lebih dalam dari sekadar malas mikir ide.
28 Mar 2026

storage:linkSkenario kedua. Kamu kerja di tim. Ada anggota baru yang clone repo dan langsung jalankan aplikasi. Semua tampak oke secara lokal, tapi file tidak bisa diakses. Kamu perlu menjelaskan bahwa ada "langkah tambahan" yang tidak ada di README — atau ada di README tapi tidak ada yang baca.
Skenario ketiga. Kamu deploy pakai Docker. Dan tiba-tiba kamu bergulat dengan volume mounting, permission folder, dan symlink yang tidak selalu berperilaku konsisten antar environment. Satu jam hilang untuk sesuatu yang seharusnya tidak jadi masalah.
Semua ini lahir dari satu asumsi mendasar: file disimpan di server yang sama dengan aplikasi.
Dan asumsi itulah yang jadi akar masalahnya.
Menyimpan file di server yang sama dengan aplikasi kamu itu bukan cuma soal symlink yang ribet. Ada masalah yang lebih besar mengintai di baliknya.
Coba bayangkan kamu punya dua server untuk handle traffic yang meningkat. Load balancer akan mendistribusikan request ke Server A dan Server B secara bergantian. Pengguna upload foto profil — file tersimpan di Server A. Lalu request berikutnya masuk ke Server B. File tidak ada di sana. Foto tidak muncul. Pengguna bingung.
Kamu butuh shared storage, NFS mount, atau solusi lain yang tiba-tiba menambah kompleksitas infrastruktur secara signifikan.
Belum lagi soal backup. File yang ada di dalam server aplikasi sering kali tidak masuk dalam strategi backup yang proper — atau kalau masuk, ukurannya bikin proses backup jadi berat dan lambat. Dan kalau server kena masalah — disk penuh, hardware failure, salah hapus folder — file pengguna bisa ikut hilang.
Ini bukan skenario paranoid. Ini skenario yang benar-benar terjadi.
Di sinilah object storage masuk — dan rasanya aneh bahwa ini belum jadi pilihan pertama semua developer PHP sejak lama.
Konsepnya sederhana: file tidak disimpan di server kamu. File disimpan di layanan eksternal yang dirancang khusus untuk itu. AWS S3, Google Cloud Storage, Cloudflare R2, atau alternatif lokal seperti Wasabi dan MinIO — semuanya bekerja dengan prinsip yang sama.
Kamu upload file lewat API. Kamu dapat URL publik. Selesai.
Tidak ada symlink. Tidak ada ritual storage:link. Tidak ada drama ketika deploy ke server baru. File kamu tetap ada meski server aplikasinya diganti total. Skalanya otomatis. CDN-nya bisa langsung disambungkan. Dan untuk banyak kasus, biayanya justru lebih efisien daripada membayar disk space server yang terus membesar.
Laravel sendiri sudah punya dukungan native untuk ini lewat Filesystem Disks — kamu tinggal konfigurasi driver s3 di config/filesystems.php, pasang package league/flysystem-aws-s3-v3, dan hampir semua kode yang sudah kamu tulis bisa langsung jalan tanpa perubahan signifikan. Storage::put(), Storage::url(), Storage::delete() — semua tetap sama. Yang berubah cuma di mana file itu sebenarnya tinggal.
Itulah yang membuat transisi ke object storage di Laravel jauh lebih mulus dari yang kebanyakan orang bayangkan.
Arg yang paling sering muncul ketika diskusi soal ini. Dan ada benarnya — untuk development lokal, object storage memang terasa overkill.
Tapi ini justru yang menarik: kamu bisa pakai MinIO secara lokal. MinIO adalah object storage open-source yang kompatibel dengan API S3. Kamu jalankan lewat Docker dalam satu baris, konfigurasi credential-nya di .env, dan environment lokal kamu berperilaku persis sama dengan production.
docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"
Tidak ada lagi "works on my machine" soal file storage. Tidak ada perbedaan perilaku antara lokal dan production yang bikin debugging jadi tebak-tebakan.
Ini bukan kompleksitas tambahan yang tidak perlu. Ini konsistensi yang kamu bayar di depan untuk menghindari sakit kepala yang jauh lebih besar di kemudian hari.
Karena tulisan ini bukan fatwa, ada baiknya kita jujur.
storage:link masih masuk akal untuk project yang skalanya kecil, tidak akan pernah di-scale horizontal, dan tim pengelolanya cukup disiplin untuk tidak lupa menjalankannya setiap deploy. Project internal, tools sederhana, atau prototype yang tidak pernah dimaksudkan untuk jadi besar — di sini local storage masih pilihan yang wajar.
Tapi begitu aplikasi kamu mulai punya pengguna nyata, mulai butuh lebih dari satu server, atau mulai menyimpan file yang benar-benar tidak boleh hilang — saat itulah storage:link harus kamu tinggalkan. Bukan karena fiturnya buruk, tapi karena kebutuhan kamu sudah melampaui apa yang bisa ditawarkannya.
Mengandalkan local storage untuk aplikasi production yang serius itu seperti tetap naik angkot padahal kamu sudah mampu dan butuh Grab — bukan masalah gengsi, tapi soal reliabilitas dan efisiensi yang sudah tidak sebanding.
Storage link bukan fitur yang jelek. Ini solusi yang lahir dari kebutuhan nyata dan bekerja sesuai janji — dalam batas-batas tertentu. Laravel sebagai framework PHP yang mature sudah lama menyediakan abstraksi yang memudahkan kita berpindah dari local storage ke object storage tanpa drama besar.
Masalahnya ada di kebiasaan. Kita terlalu nyaman dengan setup yang "cukup jalan" sampai lupa bertanya: apakah ini cara terbaik untuk skala yang kita tuju?
Kalau kamu sedang membangun sesuatu yang serius — atau bahkan baru mulai dan ingin punya pondasi yang benar sejak awal — pertimbangkan untuk langsung pakai object storage dari hari pertama. Setup awalnya sedikit lebih panjang, tapi kamu akan bersyukur ketika deployment ke-sekian tidak lagi diwarnai dengan broken image dan pertanyaan "storage:link sudah dijalankan belum?"
Kalau kamu suka konten seperti ini — opini teknis yang tidak basa-basi dan langsung ke intinya — AppVerse.id adalah tempat yang tepat untuk kamu jelajahi lebih lanjut.
Anthropic meluncurkan promo terbatas untuk pengguna Claude: kuota usage digandakan di luar jam 8 pagi-2 siang ET. Berlaku otomatis untuk Free, Pro, Max, dan Team plan hingga 27 Maret 2026.
7 Apr 2026

Banyak orang gagal mencatat pengeluaran bukan karena malas mengatur uang, tapi karena prosesnya keburu terasa ribet. Catat Uang via WA menawarkan pendekatan yang lebih ringan: cukup chat di WhatsApp untuk mencatat pemasukan dan pengeluaran, lalu cek detailnya lewat dashboard web saat dibutuhkan.
7 Apr 2026

Ingin langganan ChatGPT tanpa kartu kredit? Begini cara membeli ChatGPT dengan QRIS lewat layanan Bayarin AI dari AppVerse.id: pilih paket, bayar dalam Rupiah via QRIS/transfer lokal, dan admin yang memproses. Harga transparan, invoice PDF, tanpa simpan password.
24 Mei 2026

Persistent Storage adalah penyimpanan data yang tetap ada meski aplikasi ditutup, server di-restart, atau kontainer dipindah. Kenali konsep, bentuk-bentuk populer, contoh penggunaan nyata, cara memilih teknologinya, dan praktik terbaiknya.
16 Mei 2026

NVIDIA NIM adalah kumpulan container untuk self-host microservices inferensi AI yang dipercepat GPU, siap dipakai di cloud, data center, hingga RTX AI PCs. Ia menghadirkan API standar industri, model pre-optimized, dan engine kinerja tinggi seperti TensorRT-LLM, vLLM, dan SGLang—memudahkan developer membangun agen AI, copilots, dan chatbot dari eksperimen ke produksi.
16 Mei 2026

Ingin menjajal Kiro PRO tanpa keluar biaya? Inilah cara claim Kiro PRO GRATIS satu bulan—mulai dari registrasi, upgrade paket $20, hingga tips aman agar promonya tidak hilang. Plus, ringkas fitur Kiro yang bikin produktivitas ngacir.
9 Mei 2026

Parallel Agent adalah pola orkestrasi beberapa agen AI yang bekerja serentak untuk tujuan yang sama. Artikel ini menguraikan konsepnya, manfaat, cara kerja ringkas, contoh konkret dengan Codex sebagai agen koder, skenario penggunaan, hingga praktik terbaik yang bisa Anda terapkan.
9 Mei 2026

MoE (Mixture of Experts) adalah cara menskalakan model AI dengan mengaktifkan hanya sebagian kecil "pakar" (experts) per token. Hasilnya: model terasa besar, biaya jalan (inference) relatif hemat. Artikel ini merangkum konsep MoE, cara kerjanya, kapan dipakai, tantangannya, serta contoh model AI terkenal yang menggunakan MoE.
9 Mei 2026

Google disebut menerapkan shared pool family pada Antigravity, memicu pertanyaan soal kuota dan transparansi. Perubahan ini terdengar efisien di atas kertas, tetapi reaksi komunitas menunjukkan ada celah komunikasi yang tidak kecil.
5 Mei 2026

Panduan singkat untuk setting Pi dan 9Router, mulai dari edit file models.json di folder root pi/agents sampai memastikan provider lokal terbaca dengan benar. Cocok untuk kamu yang ingin konfigurasi lebih rapi tanpa langkah yang bertele-tele.
4 Mei 2026

Xiaomi MiMo membuka program distribusi token gratis dalam skala besar untuk kreator dan developer AI di seluruh dunia. Kalau kamu penasaran cara claim 1 triliun token gratis Xiaomi MiMo, ini panduan ringkas, syaratnya, alurnya, dan hal penting yang perlu diperhatikan sebelum mendaftar.
2 Mei 2026

Perbandingan Kilo Code vs Cline vs RooCode untuk developer yang mencari AI coding assistant paling pas. Kami bahas pendekatan, kelebihan, trade-off, model biaya, dan siapa yang cocok memakai masing-masing.
1 Mei 2026

Google sedang memberi diskon untuk Google AI Pro, paket langganan yang membuka akses ke Gemini, NotebookLM dengan limit lebih tinggi, Deep Search di AI Mode, sampai integrasi AI di Gmail dan Docs. Buat yang penasaran, ini fitur yang paling relevan dan siapa yang paling cocok memanfaatkannya.
24 Apr 2026

Coolify makin sering dibicarakan sebagai alternatif platform deployment yang fleksibel dan ramah developer. Kalau kamu masih ragu, ini 5 alasan kenapa harus pake Coolify untuk deploy aplikasi dengan lebih simpel, hemat, dan tetap punya kontrol penuh.
24 Apr 2026

Grok, AI chatbot besutan Elon Musk, kini tidak lagi gratis sepenuhnya. Apa yang membuat xAI mengubah strategi ini? Simak 5 alasan utama kenapa Grok sekarang berbayar dan apa artinya bagi kreator konten.
7 Apr 2026

Fuelmeter hadir sebagai aplikasi iOS untuk mencatat pengeluaran BBM dan perawatan kendaraan dengan pendekatan yang terasa praktis: scan struk, simpan riwayat, lihat statistik, hingga kelola lebih dari satu kendaraan. Menariknya, aplikasi ini juga terus berkembang lewat pembaruan fitur yang cukup konsisten.
11 Apr 2026

Menentukan harga SaaS bukan soal ikut-ikutan kompetitor. Artikel ini membedah Strategi Harga SaaS untuk segmen individu dan bisnis di Indonesia, membaca daya beli masyarakat Indonesia 2026, lalu mencari sweet spot pricing agar checkout lebih tinggi dan model bisnis langganan lebih sehat.
7 Apr 2026

Belisc hadir sebagai marketplace source code lokal yang menyediakan script website dan aplikasi siap pakai. Dengan koleksi berbasis Laravel, CodeIgniter, hingga Next.js, platform ini menawarkan solusi praktis bagi developer dan bisnis yang ingin menghemat waktu pengembangan hingga 70%.
7 Apr 2026

Sekarang makin banyak yang modal vibe coding: buka AI agent, bikin landing page, lalu jual kelas seolah-olah sudah bangun produk yang dipakai industri. Artikel ini membahas fenomena itu dengan gaya yang humanis, lucu, dan sedikit nyelekit—buat developer maupun orang awam yang sering jadi penonton drama “AI bisa semua”.
7 Apr 2026
© 2026 AppVerse.id. Direktori produk digital Indonesia.