Nurul Huda

Nurul Huda

Seorang Web Developer dan pemerhati SEO, senang menulis tentang pemrograman dan berbagi pengalaman digital.

Laravel Sail - Solusi Laravel Menggunakan Docker (Development)

10 Januari 2026 pukul 10.31

Problem Klasik Developer

Ganti OS? Projek broken.

Upgrade OS? Projek yang lagi dikerjain tiba-tiba gak jalan.

Projek working di mesin/laptop sendiri, tapi error di punya kolega?

Projek dari jaman tobangado tiba-tiba perlu diupdate. Dan udah susah di-setup karena stack udah terlalu lama? Masih pakai MySql 5 lah, php7.1 lah, dan lain-lain… dan lain-lain.

Solusinya: docker (meskipun cuman untuk development).

Crafting Docker Sendiri Itu Ribet

Saya termasuk yang adopsi docker dari dulu. Dari jaman masih PHP versi 7, Laravel versi 5, dan jQuery masih the king.

Buat saya pribadi, docker itu ribet. Konsepnya “beda” kayak kerja biasa. Mau bikin koneksi database susah, mau eksekusi perintah CLI susah. Dan juga sering ketipu sama tutorial docker yang ditujukan untuk production alih-alih untuk development. Akhirnya apa? Dockerfile dieksekusi berkali-kali tiap kali save file! Wkwk.

Sudah nyoba beberapa solusi: dari mulai bikin sendiri (jelek, tapi jalan), terus pakai third party library (dulu ada yg populer, lupa namanya), sampai pernah juga beralih ke solusi Virtual Machine seperti homestead (tapi lemot).

Laravel Sail Solusi Official

Sampai akhirnya sekitar tahun 2020 ada solusi official dari laravel untuk docker: yakni laravel sail.

Sudah ada package composer-nya.

Sudah ada artisan-nya.

Sudah ada docker image yang ready to use, tinggal build aja di local.

Sudah ada konfigurasinya.

Bahkan juga udah ada integrasi sama tool-tool development lain seperti redis untuk caching, Meilisearch untuk pencarian, sama mailpit untuk email (yang ini favorit saya pribadi).

Projek Baru Dengan Laravel Sail

Sayangnya, sejak laravel versi 12, LARAVEL SAIL UDAH dianggap jadi second class citizen. Udah gak muncul di halaman instalasi di dokumentasi resmi. Karena sejak versi 12, laravel justru mempromosikan Laravel Herd (produk berbayar punya mereka, tentu setelah dapat pendanaan).

Jadi kalau mau baca-baca soal laravel sail, harus ke bagian khusus untuk laravel sail. Bukan di halaman instalasi utama.

Tapi tenang aja, cara official instalasinya masih working sampai sekarang (sampai laravel terbaru alias laravel 12 saat artikel ini ditulis). Dan juga masih bisa dicek di halaman instalasi laravel 11 ke belakang.

dokumentasi instalasi laravel sail di laravel v10

Catatan sebelum mulai instalasi: saya tidak menginstall php native di mesin saya pribadi karena semua projek php sudah menggunakan docker / sail.

php --version 
zsh: command not found: php

Instalasi projek baru laravel dengan sail (di linux):

curl -s "https://laravel.build/nama-projek-kita" | bash

Perintah di atas akan otomatis membuat direktori baru dengan nama nama-projek-kita, lengkap dengan laravel terbaru dan sail yang siap digunakan.

laravel versi 12

Bahkan, composer install udah dilakukan, database sudah di-create. Jadi kita sudah TIDAK PERLU setup database lagi. Tinggal pakai. Tinggal running artisan:

sail up -d # jalankan container
sail artisan migrate

Catatan:

  • Untuk build image pertama kali biasanya perlu waktu yang cukup lama. Tapi kalau sudah pernah sebelumnya, prosesnya akan menjadi lebih cepat.
  • Untuk pengguna linux, ada kemungkinan / kasus bahwa ownership file projek yang baru dibuat adalah ownership user root:root. Jadi untuk menghindary permission error, kita perlu ubah ownership seluruh file projek ke user kita yang sedang aktif:
      cd nama-projek
      sudo chown -R $USER:$USER .
    

Env & Database Default

Penting untuk diketahui bahwa projek baru sudah memiliki file .env. Tapi secara default, database yang digunakan adalah mysql dengan nama database laravel sesuai dengan env variables:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=laravel

Dan jika kita ingin mengganti nama database (misal), kita bisa mengganti nama database dari env, kemudian hapus volumes dari sail, dan jalankan ulang, sehingga dia akan membuat database baru dengan nama laravel lengkap beserta username dan passsword-nya:

sail down -v # hentikan proses + hapus volume
sail up -d # jalankan lagi

Port Default

Secara default, laravel sail akan jalan di dalam port 80. Jadi kita bisa mengakses projek cukup dengan mengunjungi url http://localhost.

Bagaimana kalau kita ingin projek laravel kita jalan di port lain?

Kita tinggal stop container (kalau lagi jalan).

Edit .env, dan tambahkan APP_PORT ke port yang kita inginkan:

APP_PORT=5033 # port baru

Kita juga bisa ganti port forward mysql dari yang default-nya adalah 3306 menjadi terserah kita:

FORWARD_DB_PORT=3308

Jangan lupa untuk melakukan restart container agar sebelum perubahan port aktif.

Setup Laravel Sail ke Projek Lama

Sedangkan untuk projek lama, dengan asumsi mesin/komputer host kita sudah memiliki php, composer, dan lain-lain. Kita tinggal menginstall laravel sail seperti berikut:

composer require laravel/sail --dev

Kemudian jalankan:

php artisan sail:install

Git Clone Projek Sail

Ada hal unik yang selalu terjadi ketika kita clone projek sail di mesin / laptop / os baru yang mana:

  • environment baru gak ada php
  • mau jalankan sail, tapi folder vendor belum ada (karena baru clone)
  • mau jalankan composer install, tapi gak ada php sama composer

Solusinya?

Kita bisa pakai docker image punya laravel sail juga! Perintahnya seperti ini:

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v "$(pwd):/var/www/html" \
    -w /var/www/html \
    laravelsail/php84-composer:latest \
    composer install --ignore-platform-reqs

Teman-teman tinggal sesuaikan image-nya sesuai dengan versi php yang dibutuhkan, pada contoh di atas, image yg dipakai adalah untuk php8.4 (laravelsail/php84-composer).

Sayangnya perintah di atas udah gak disebutkan di dokumentasi Laravel 12, tapi masih bisa kita temukan di dokumentasi versi 11.

Note: jangan lupa untuk copy file .env.example ke .env sebelum menjalankan sail up (agar database di-create dengan benar).

Shell Alias

Secara default, perintah sail ada di dalam folder vendor/bin/sail. Jadi setiap kali kita mau memanggil sail, kita harus panggil path-nya secara lengkap:

./vendor/bin/sail artisan route:list

Agar bisa lebih singkat, kita bisa membuat alias dengan perintah berikut:

alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

Taruh perintah di atas di dalam file ~/.bashrc dan ~/.zhrc dan kita akan bisa memanggil sail dengan lebih singkat:

sail artisan route:list

Operasi Container (Run, Restart, Remove, dll)

Untuk mengoperasikan container, kita bisa menggunakan perintah-perintah berikut:

Menjalankan sail:

sail up

Menjalankan sail di dalam background:

sail up -d

Me-rebuild ulang image:

sail build --no-cache

Men-stop container:

sail down

Stop Container + Hapus volume (kalau kita mau reset database, bisa pakai ini):

sail down -v

Melihat service yang berjalan:

sail ps

Melihat log service:

sail logs

Artisan, Composer, npm, Database?

Untuk artisan dan composer, mirip seperti halnya ketika kita melakukannya langsung di OS host. Hanya saja kita perlu tambahkan sail di depannya, contoh:

sail artisan migrate # untuk migrasi

sail artisan route:list # untuk list route

sail artisan queue:work # untuk running queue

sail composer install # untuk run composer install

sail composer require paket/paket # untuk install paket composer baru

Untuk npm juga sudah include dalam image:

sail node --version

sail npm install

sail npm run dev

sail npm run build

Dan untuk masuk ke dalam mysql via CLI:

sail mysql

Masuk ke Shell di Dalam Container

sail shell

Masuk sebagai root:

sail root-shell

Dua perintah di atas jauh lebih singkat dari pada menggunakan docker compose asli:

docker compose exec -ti laravel.test bash

Tambah Servis Baru

Laravel sail memiliki beberapa service default. Kita bisa cek dengan perintah:

sail artisan sail:add

Pilihannya banyak, bisa discroll ke bawah (pakai arrow down):

Service yang kita pilih, akan ditambahkan pada file compose.yml atau docker-compose.yml. Dan karena sail hanyalah wrapper untuk docker compose, kita bisa menambahkan berbagai macam image lain baik image publik mau pun private seperti halnya docker biasa.

Terima kasih banyak!