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.