Debug Laravel Sail dengan Mudah Menggunakan Xdebug dan PHPStorm

Celvine Adi Putra
6 min readFeb 19, 2023

--

Laravel

Sebagai seorang pengembang, debugging adalah salah satu tugas yang bisa di bilang penting dalam proses pengembangan. Jika menggunakan laravel sail kita dapat dengan mudah melakukkanya cukup dengan beberapa tahap dan boom jadi.

Kali ini kita akan bersama sama mencoba untuk mengaktifkan Xdebug pada Laravel Sail dan menghubungkannya dengan PHPStorm untuk debugging.

Sebelum memulai tahap setting xdebungnya pada laravel sail, kali ini saya akan menggunakan laravel 10, untuk yang menggunakan laravel 9 sama aja kalau untuk laravel 9 kebawah saya belum mencoba nya tapi kemungkinan sama aja ya, dan saya menggunakan linux ubuntu jadi yang menggunakan windows dan mac os silahkan di sesuikan sendiri ya untuk perintah perintah docker nya, karna ini menggunakan laravel sail jadi saya anggap kamu sedikit paham dengan perintah perintah sederhana docker itu sendiri ya seperti start dan stop service docker, jadi kita hanya fokus pada laravel sail dan xdebugnya.

Mari kita mulai!

Install Laravel

Menginstall laravel cukup mudah dengan mengetikkan perintah di bawah ini pada terminal atau cmd dan enter selesai, oh iya silahkan ganti example-app menjadi nama aplikasi kamu ya. Seharusnya bagian ini kamu tidak ada masalah lagi atau bahkan kamu sudah punya project nya.

composer create-project laravel/laravel example-app

Install Laravel Sail

Silahkan menambahkan package laravel sailnya dulu ya, untuk dokumentasinya lengakapnya di sini.

composer require laravel/sail --dev

Silahkan install service yang kamu butuhkan untuk laravel sail nya seperti databasenya, sebagai contoh jika kalian mau menggunakan mysql, dan redis kalian bisa tulis dengan 0,3 dan enter.

php artisan sail:install
php artisan sail:install

Start Laravel Sail

Memulai laravel sail silahkan ketikkan, dan silahkan tunggu proses ini memerlukan waktu yang cukup lama dan ini tergantung dengan koneksi internet kamu saat ini.

Catatan : Silahkan sesuaikan dengan OS kamu ya, untuk detail nya kamu dapat membuka dokumentasi laravel di sini.

./vendor/bin/sail up -d

Kalau proses start laravel sail nya sudah selesai, kita publish dulu dockerfile nya dengan perintah berikut

./vendor/bin/sail artisan sail:publish

silahkan di matikan dulu sever dockernya dengan

./vendor/bin/sail down

Setting .env

Silahkan buka projectnya dan buka file .envnya, silahkan tambahkan ini di bagian bawah.

SAIL_XDEBUG_MODE=develop,debug

untuk pengguna linux tambahkan juga ini,

WWWGROUP=1000
WWWUSER=1000
SAIL_XDEBUG_CONFIG="client_host=<host-ip-address>"

untuk host-ip-address bisa di cek dengan cara berikut ini silahkan ganti container-name dengan container name aplikasi kamu, bisa kamu cek dengan docker ps -a, silahkan copykan ip address nya.

docker inspect -f {{range.NetworkSettings.Networks}}{{.Gateway}}{{end}} <container-name>

Setting XDebug

Sebelumnya silahkan buka file docker-compose.yml dan perhatikan path file dari Dokerfilenya. File ini akan muncul karana proses kita publish dockerfile nya pada tahap sebelumnya. Oh iya pada baris 9 tambahkan xdebug hanya agar image docker nya ngak sama dengan yang sebelumnya, silahkan ganti dari sail-8.2/app menjadi sail-xdebug-8.2/app, silahkan di sesuaikan sendiriya

Path dokerfile

karana path docker file saya ada di docker/8.2, kamu buka file Dockerfile perhatikan path nya jangan sampai salah ya. Tambahkan ini pada Dokerfile , hal yang perlu di perhatikan bagian 8.2 sesuaikan dengan path kamu saat ini, 8.2 di sini biasanya versi dari PHP yang digunakan oleh laravel sailnya.

COPY ext-xdebug.ini /etc/php/8.2/cli/conf.d/ext-xdebug.ini

Sehingga menjadi

FROM ubuntu:22.04

LABEL maintainer="Taylor Otwell"

ARG WWWGROUP
ARG NODE_VERSION=18
ARG POSTGRES_VERSION=14

WORKDIR /var/www/html

ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.2-cli php8.2-dev \
php8.2-pgsql php8.2-sqlite3 php8.2-gd \
php8.2-curl \
php8.2-imap php8.2-mysql php8.2-mbstring \
php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \
php8.2-intl php8.2-readline \
php8.2-ldap \
php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \
php8.2-memcached php8.2-pcov php8.2-xdebug \
&& php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y mysql-client \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2

RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail

COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini
# START -> Tambahkan pada baris ini
COPY ext-xdebug.ini /etc/php/8.2/cli/conf.d/ext-xdebug.ini
# END -> Tambahkan pada baris ini
RUN chmod +x /usr/local/bin/start-container

EXPOSE 8000

ENTRYPOINT ["start-container"]

Tahap selanjutnya silahkan buat file baru dengan nama ext-xdebug.ini pada path yang sama dengan lokasi Dockerfile

ext-debug.ini

isi dari file ext-debug.ini sebagai berikut

[xdebug]
xdebug.start_with_request=yes
xdebug.discover_client_host=true
xdebug.max_nesting_level=256
xdebug.remote_handler=dbgp
xdebug.client_port=9003
xdebug.idekey=VSCODE
xdebug.mode=debug
xdebug.client_host=host.docker.internal

kalau sudah kita jalankan perintah berikut, dan silahkan tunggu lagi sampai proses nya selesai.

./vendor/bin/sail build --no-cache

kalau proses nya sudah selesai silakan hidupkan kembali service nya dengan cara

./vendor/bin/sail start -d

Setting PHPStrom

Buka project pada PHPStrom, pilih Run >> Start Listening for PHP debug Connections , dan jika sudah buka browser dan buka url http://localhost/ , atau sesuaikan sendiri dengan project kamu ya.

Start listen Xdebug

nanti kalau semua tahapan sudah benar akan muncul popup di PHPStromnya kurang lebih seperti ini, klik Accept aja

Popup Inconming Connection From Xdebug

terus buka Setting >> PHP >> Servers centang Use path mapptings pada project files pilih root project pada absolute path on the server masukkan /var/www/html. Hasilnya seperti ini dan klik ok

Setting Xdebug Servers

Kalau semua sudah selesai mari kita coba dengan memberikan break point, dan yeay punya saya berhasil, punya kamu bisa ngak ? kalau belum coba cek lagi ada yang salah tidak.

Contoh XDebug

Yeay artikel tentang Debug Laravel Sail dengan Mudah Menggunakan Xdebug dan PHPStorm telah selesai. Setelah membaca artikel ini, kamu seharusnya sudah dapat mengaktifkan dan menggunakan Xdebug pada Laravel Sail dengan bantuan PHPStorm untuk mempercepat proses debugging aplikasi Laravel kamu.

Memang ada beberapa tahapan yang perlu dilalui, seperti menginstal dan mengkonfigurasi Xdebug serta menghubungkannya dengan PHPStorm. Namun, dengan mengikuti langkah-langkah yang telah dijelaskan, proses debugging akan menjadi lebih mudah dan efektif.

Dalam mengembangkan aplikasi, debugging memang sering kali memakan waktu dan tenaga. Namun, dengan menggunakan teknik yang tepat, debugging dapat menjadi lebih mudah dan dapat mempercepat proses pengembangan aplikasi. Semoga artikel ini dapat membantu kamu untuk mengatasi masalah debugging pada aplikasi Laravel Sail kamu ya dan mempercepat proses pengembangan aplikasi kamu.

Mampir ke github dan profile saya juga ya, Terimakasih

--

--