Laravel Sail adalah alat pengembangan berbasis Docker yang dirancang khusus untuk mempermudah pengelolaan lingkungan pengembangan aplikasi Laravel. Dengan Laravel Sail, kamu dapat menyederhanakan konfigurasi dan pengelolaan layanan yang dibutuhkan untuk menjalankan aplikasi Laravel, seperti web server, database, cache, dan layanan email, tanpa harus repot dengan pengaturan manual.
Meski Sail menawarkan konfigurasi default yang cukup baik, ada kalanya perlu penyesuaian lingkungan pengembangan sesuai dengan kebutuhan spesifik proyek. Misalnya, kamu mungkin perlu menambahkan layanan baru seperti Redis atau Elasticsearch, mengganti versi database, atau mengatur volume untuk penyimpanan data persisten. Mengetahui cara mengkonfigurasi Sail dengan tepat tentu akan sangat membantu
File Konfigurasi Utama
1. docker-compose.yml
File docker-compose.yml adalah inti dari konfigurasi Laravel Sail. Di sinilah layanan-layanan yang dibutuhkan oleh aplikasi di definisikan.
services:
laravel.test:
build:
context: './vendor/laravel/sail/runtimes/8.2'
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: 'sail-8.2/app'
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- 'sail-mysql:/var/lib/mysql'
- './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
networks:
- sail
healthcheck:
test:
- CMD
- mysqladmin
- ping
- '-p${DB_PASSWORD}'
retries: 3
timeout: 5s
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sail-redis:/data'
networks:
- sail
healthcheck:
test:
- CMD
- redis-cli
- ping
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local
sail-redis:
driver: local
Penjelasan Konfigurasi :
image: Menentukan image Docker yang digunakan untuk container tersebut. Misalnya,sail-8.2/appadalah image default untuk aplikasi Laravel.ports: Menghubungkan port di container dengan port di host.
Contoh'${APP_PORT:-80}:80'berarti port80di container akan dipetakan keAPP_PORTyang di definisikan pada file .env atau port default80jika APP_PORT tidak di definisikan.environment: Mendefinisikan variabel lingkungan yang digunakan oleh container. Variabel ini sering kali diambil dari file.env.volumes: Menyediakan persistent storage untuk data yang perlu bertahan meskipun container di-restart. Misalnya,./:/var/www/htmlmenghubungkan direktori kerja lokal dengan container.networks: Menentukan jaringan Docker yang digunakan oleh layanan. Biasanya, semua layanan terhubung ke jaringan yang sama untuk saling berkomunikasi.depends_on: Menentukan layanan-layanan lain yang harus berjalan sebelum layanan ini dapat dimulai, memastikan urutan startup yang benar.
2. .env
File .env berisi variabel lingkungan yang mengkonfigurasi aplikasi Laravel dan layanan-layanan yang digunakan di dalam container :
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:9zuyTV0Ftg0+o3qHAiLrJiVXFjop9m+fSFkXqEeBCOU=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=database
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
Menyesuaikan Konfigurasi
1. Menambahkan layanan baru
Jika proyek memerlukan layanan tambahan, seperti Elasticsearch atau RedisInsight, kamu dapat menambahkannya ke dalam file docker-compose.yml. Berikut adalah contoh cara menambahkan layanan RedisInsight untuk monitoring Redis:
services:
redisinsight:
image: 'redis/redisinsight:latest'
ports:
- '5540:5540'
networks:
- sail
2. Mengubah versi layanan
Untuk mengganti versi layanan, seperti MySQL atau Redis, ubah tag versi pada image di docker-compose.yml. Misalnya, untuk menggunakan versi MySQL yang lebih baru:
services:
mysql:
image: 'mysql/mysql-server:latest'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
3. Mengatur Variabel Lingkungan
Variabel lingkungan dalam file .env digunakan untuk mengkonfigurasi berbagai pengaturan aplikasi dan layanan. Berikut contoh kita menyesuaikan variabel lingkungan untuk APP_PORT:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:9zuyTV0Ftg0+o3qHAiLrJiVXFjop9m+fSFkXqEeBCOU=
APP_DEBUG=true
APP_URL=http://localhost
APP_PORT=8080
Jalankan kembali sail maka project laravel tidak lagi berjalan pada http://localhost namun pada http://localhost:8080/
4. Mengatur Volume
Volume digunakan untuk menyimpan data secara persisten. Jika kamu memerlukan volume tambahan atau perubahan lokasi penyimpanan, sesuaikan pengaturan volume di docker-compose.yml.
services:
laravel.test:
volumes:
- '.:/var/www/html'
- 'app-data:/var/www/html/data'
5. Menyinkronkan Perubahan
Setelah melakukan perubahan pada docker-compose.yml atau .env, jalankan perintah berikut untuk membangun ulang image docker sehingga perubahan diterapkan:
sail build
saild up -d
Kesimpulan
Laravel Sail memudahkan pengaturan lingkungan pengembangan dengan Docker, memberikan fleksibilitas dalam konfigurasi layanan seperti database, cache, dan volume untuk menjaga data tetap persisten. Dengan konfigurasi yang tepat, kamu dapat menyesuaikan kebutuhan proyek tanpa banyak kerumitan, sehingga lebih fokus pada pengembangan aplikasi. Sail mempercepat setup dan manajemen lingkungan, membuat pengembangan Laravel lebih efisien dan praktis.