Home Web Laravel Konfigurasi Laravel Sail untuk Lingkungan Pengembangan yang Optimal

Konfigurasi Laravel Sail untuk Lingkungan Pengembangan yang Optimal

0
Konfigurasi Laravel Sail untuk Lingkungan Pengembangan yang Optimal

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/app adalah image default untuk aplikasi Laravel.
  • ports: Menghubungkan port di container dengan port di host.
    Contoh '${APP_PORT:-80}:80' berarti port 80 di container akan dipetakan ke APP_PORT yang di definisikan pada file .env atau port default 80 jika 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/html menghubungkan 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.