Blog AI

Panduan Lengkap Membuat Storage Link pada Laravel

16 May 2026· Wahyu Rifki Taufik
storage link LaravelLaravel storage linkphp artisan storage:linkcara membuat storage link LaravelLaravel public storagesymbolic link Laravelgambar Laravel tidak munculfile upload Laravel tidak tampilLaravel storage link hosting
Panduan Lengkap Membuat Storage Link pada Laravel

Laravel menyediakan sistem penyimpanan file yang rapi melalui fitur filesystem. Salah satu perintah yang sering digunakan saat membuat aplikasi Laravel adalah php artisan storage:link. Perintah ini berguna untuk membuat symbolic link dari folder storage/app/public ke folder public/storage.


Fitur ini penting karena file yang disimpan di dalam folder storage secara default tidak bisa langsung diakses oleh browser. Browser hanya bisa mengakses file yang berada di dalam folder public. Karena itu, Laravel menyediakan mekanisme storage link agar file upload seperti gambar profil, dokumen, thumbnail, atau lampiran dapat diakses melalui URL publik dengan cara yang aman dan terstruktur.

Apa Itu Storage Link di Laravel?

Storage link adalah symbolic link yang menghubungkan folder private storage Laravel ke folder publik aplikasi. Secara default, file public Laravel disimpan di:

Code 1
storage/app/public

Agar file tersebut bisa diakses dari browser, Laravel membuat shortcut ke:

Code 2
public/storage

Setelah link dibuat, file yang berada di:

Code 3
storage/app/public/avatar/user.jpg

dapat diakses melalui URL:

Code 4
https://domain.com/storage/avatar/user.jpg

Dengan cara ini, aplikasi tetap memiliki struktur penyimpanan yang jelas tanpa harus menyimpan file upload langsung ke folder public.

Cara Membuat Storage Link

Cara paling disarankan untuk membuat storage link adalah menggunakan perintah Artisan:

Code 5
php artisan storage:link

Jika berhasil, Laravel akan menampilkan pesan bahwa link sudah dibuat. Setelah itu, folder public/storage akan muncul sebagai symbolic link menuju storage/app/public.


Pastikan Anda menjalankan perintah tersebut dari folder project yang benar, yaitu folder yang memiliki file:

Code 6.1

artisan

composer.json

app/

storage/

public/

Jika perintah dijalankan dari folder yang salah, Laravel tidak akan bisa menemukan file artisan.

Cara Manual Membuat Symbolic Link

Selain menggunakan Artisan, symbolic link juga bisa dibuat secara manual melalui terminal dengan perintah `ln -s`.

Contoh perintah manualnya:

Code 6.2
cd public
ln -s /home/username/project/storage/app/public storage

Namun, untuk Laravel modern, cara manual ini hanya digunakan jika php artisan storage:link tidak bisa dijalankan atau server memiliki konfigurasi khusus.

Contoh Menyimpan File Upload ke Storage Public

Misalnya Anda ingin menyimpan gambar yang diupload dari form. Contoh controller sederhana:

Code 7
public function upload(Request $request)
{
    $request->validate([
        'photo' => ['required', 'image', 'max:2048'],
    ]);

    $path = $request->file('photo')->store('photos', 'public');

    return response()->json([
        'path' => $path,
        'url' => asset('storage/' . $path),
    ]);
}

Kode di atas akan menyimpan file ke:

Code 8
storage/app/public/photos

Jika file bernama abc.jpg, maka URL publiknya menjadi:

Code 9
https://domain.com/storage/photos/abc.jpg

Bagian penting dari kode tersebut adalah penggunaan disk public:

Code 10
store('photos', 'public')

Tanpa disk public, file bisa saja tersimpan ke disk default yang tidak bisa diakses dari browser.

Konfigurasi Filesystem Laravel

Konfigurasi storage Laravel berada di file:

dapat kamu temukan pada config dibawah ini

file ini sudah tersedia bawaan.

Code 11
config/filesystems.php

Biasanya disk public sudah tersedia secara default:

Code 12

'public' => [

    'driver' => 'local',

    'root' => storage_path('app/public'),

    'url' => env('APP_URL').'/storage',

    'visibility' => 'public',

],

Pastikan APP_URL di file .env sudah sesuai dengan domain aplikasi:

Code 13
APP_URL=https://domain.com

Jika APP_URL salah, URL file yang dihasilkan bisa tidak sesuai.

Permission Folder Storage

Di server production, masalah yang sering terjadi bukan pada perintah storage:link, tetapi pada permission folder. Laravel perlu akses tulis ke folder storage dan bootstrap/cache.


Gunakan ownership yang benar, misalnya user deploy adalah psbhost dan web server menggunakan group www-data:

Code 14

sudo chown -R psbhost:www-data storage bootstrap/cache

sudo chmod -R 775 storage bootstrap/cache

Jangan memberi permission 777 kecuali dalam kondisi debugging sementara. Permission 777 terlalu longgar dan tidak aman untuk production.

Error yang Sering Terjadi

Jika muncul error:

Code 15
The public/storage directory already exists.

artinya link atau folder public/storage sudah ada. Cek dulu:

Code 16
ls -la public/storage

Jika itu symbolic link yang benar, tidak perlu dibuat ulang. Jika itu folder biasa dan salah, hapus lalu buat ulang:

Code 17

rm -rf public/storage

php artisan storage:link

Jika gambar tetap tidak muncul, cek apakah file benar-benar ada:

Code
ls -la storage/app/public

Lalu pastikan web server dapat membaca file tersebut.

Praktik Terbaik di Production

Untuk production, storage link biasanya dibuat sekali saat setup server atau dimasukkan ke script deploy. Contoh:

Code

php artisan storage:link || true

php artisan optimize:clear

php artisan config:cache

php artisan route:cache

php artisan view:cache

Namun, jangan menjalankan perintah sembarangan dengan sudo jika tidak diperlukan. Perintah Laravel sebaiknya dijalankan oleh user deploy yang memiliki akses benar ke folder project.


Selain itu, jangan menyimpan file sensitif seperti KTP, invoice private, atau dokumen internal di disk public. Jika file hanya boleh diakses oleh user tertentu, simpan di disk private lalu buat endpoint download dengan validasi authorization.

Kesimpulan

Storage link pada Laravel adalah fitur penting untuk menampilkan file upload secara publik. Perintah php artisan storage:link membuat hubungan antara storage/app/public dan public/storage, sehingga file dapat diakses melalui URL browser.


Agar fitur ini berjalan dengan benar, pastikan file disimpan menggunakan disk public, konfigurasi APP_URL sudah tepat, permission folder benar, dan symbolic link tidak rusak. Untuk aplikasi production, gunakan storage public hanya untuk file yang memang aman diakses publik. File sensitif harus tetap disimpan secara private dan dilayani melalui controller dengan authorization yang ketat.

Stack Pendukung

Layanan & infrastruktur yang digunakan.

Dipilih sesuai kebutuhan proyek, alur kerja, dan target rilis.

IDCloudHostCloud dan hosting
HostingerHosting dan domain
MicrosoftProduktivitas dan cloud
CloudflareDNS, CDN, R2 dan keamanan
MidtransPayment gateway