· Admin

Laravel Sail ile Lokal Geliştirme Ortamı

PHP sürüm uyumsuzlukları, MySQL kurulumu, Redis yapılandırması... Lokal geliştirme ortamı kurmak bazen asıl işten — kod yazmaktan — daha çok zaman alıyor. Laravel Sail, Docker tabanlı resmi lokal geliştirme ortamıyla bu sorunu tek komutla çözüyor.

Laravel Sail Nedir?

Docker tabanlı, Laravel'in resmi lokal geliştirme ortamı. Varsayılan olarak PHP, MySQL/PostgreSQL, Redis, Meilisearch, Mailpit ve Selenium destekler. Docker bilmenize gerek yok — Sail her şeyi soyutluyor.

Ne DEĞİLDİR: Production çözümü değil. Sadece lokal geliştirme ve test için.

Neden Sail?

  • Ortam tutarlılığı: Ekipteki herkes aynı PHP sürümünü, aynı servisleri kullanır
  • Hızlı kurulum: Dakikalar içinde çalışan proje
  • Sıfır bağımlılık: PHP, Composer, MySQL sisteminize kurulu olmak zorunda değil
  • Yeni başlayanlar için: Ortam kurma en zor adım — Sail bunu basitleştirir

Yeni Proje ile Kurulum

curl -s https://laravel.build/my-project | bash
cd my-project
./vendor/bin/sail up

Servisleri seçerek kurma:

curl -s "https://laravel.build/my-project?with=mysql,redis,meilisearch,mailpit" | bash

Mevcut Projeye Sail Ekleme

composer require laravel/sail --dev
php artisan sail:install
./vendor/bin/sail up

sail:install sırasında hangi servisleri istediğiniz sorulur.

Alias Oluşturma

Her seferinde ./vendor/bin/sail yazmak uzun:

# .bashrc veya .zshrc'ye ekle
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

Artık sadece sail yazabilirsiniz.

Temel Komutlar

Ortamı Başlatma/Durdurma

sail up          # Ön planda başlat
sail up -d       # Arka planda başlat
sail down        # Durdur
sail restart     # Yeniden başlat

Artisan Komutları

sail artisan migrate
sail artisan make:model Post -m
sail artisan tinker
sail artisan queue:work

Composer

sail composer install
sail composer require laravel/scout
sail composer update

NPM / Vite

sail npm install
sail npm run dev
sail npm run build

PHP Komutu

sail php --version
sail php script.php

Testler

sail test
sail test --filter=UserTest

MySQL Entegrasyonu

.env varsayılan ayarlar (Sail otomatik set eder):

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

DB_HOST=mysql — bu Docker servis adı, 127.0.0.1 değil.

Dış bağlantı (TablePlus, Sequel Pro vs.):

Host: 127.0.0.1
Port: 3306
User: sail
Password: password
Database: laravel

Redis Entegrasyonu

.env:

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
REDIS_HOST=redis

Test:

Cache::put('test', 'Sail Redis çalışıyor!', 60);
echo Cache::get('test');

Meilisearch Entegrasyonu

.env:

SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://meilisearch:7700
sail artisan scout:import "App\Models\Post"

Meilisearch Dashboard: http://localhost:7700

Mailpit (Mail Testing)

Sail gönderilen e-postaları yakalar ve web arayüzünde gösterir:

.env:

MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025

Mailpit UI: http://localhost:8025

Gerçek e-posta gitmez, test ortamında güvenle mail gönderebilirsiniz.

docker-compose.yml Özelleştirme

Sail'in oluşturduğu docker-compose.yml dosyasını düzenleyebilirsiniz:

services:
    laravel.test:
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            PHP_CLI_MEMORY_LIMIT: 512M

Port çakışması varsa .env'de:

APP_PORT=8080
FORWARD_DB_PORT=33060

PHP Sürümü Değiştirme

docker-compose.yml:

laravel.test:
    build:
        context: ./vendor/laravel/sail/runtimes/8.3

8.3 yerine 8.2 yazarak PHP sürümünü değiştirebilirsiniz.

Sail Shell

Container içine girmek:

sail shell      # Normal kullanıcı
sail root-shell # Root kullanıcı

Gerçek Hayat Kullanım Senaryoları

  • Yeni ekip üyelerinin projeye hızlı adaptasyonu
  • Open-source projelerde standart ortam
  • Eğitim ve workshop'lar
  • CI/CD pipeline'larında lokal test
  • Farklı PHP sürümlerinde test

Dezavantajları

  • Docker performansı düşük makinelerde yavaş olabilir (özellikle macOS)
  • Windows'ta WSL2 gerektirir
  • Disk I/O macOS'ta yavaş (volume mount sorunu)
  • Production için uygun değil

Sonuç

Laravel Sail, lokal geliştirme ortamını standardize eden ve Docker karmaşasını gizleyen harika bir araç. Özellikle ekip çalışması ve yeni başlayanlar için büyük kolaylık sağlıyor. Docker bilmenize gerek yok — sail up ve başlayın.