Laravel Homestead ile herkeste aynı geliştirme ortamı
Laravel Homestead'ı kurup ekipte 'bende çalışıyordu' sorununu nasıl çözdüğümü adım adım anlattım.
“Bende çalışıyor ama sende neden çalışmıyor?” Bu cümleyi bir geliştiriciden en az bir kez duymayan ya da söylemeyen yoktur. Birinin makinesinde PHP 5.4, diğerinde 5.6; birinde MySQL 5.5, diğerinde 5.7. Yerel ortamlar farklılaştıkça bu tür problemler kaçınılmaz hale geliyor.
Laravel Homestead, bu problemi geliştirme tarafında çözmek için tasarlanmış hazır bir Vagrant kutusu. Vagrant, VirtualBox veya VMware gibi sanallaştırma araçlarının üzerine oturuyor ve tek bir yapılandırma dosyasıyla tüm ekip için birebir aynı geliştirme ortamı sağlıyor.
Bu yazıda Homestead’ı sıfırdan nasıl kurduğumu ve birkaç projede çalışacak şekilde nasıl yapılandırdığımı anlatacağım.
Ön gereksinimler
Homestead’ı çalıştırmak için iki araç gerekiyor:
- VirtualBox — ücretsiz, virtualbox.org’dan indiriliyor
- Vagrant — sanal makine yöneticisi, vagrantup.com’dan indiriliyor
İkisi de işletim sisteminden bağımsız çalışıyor; Windows, macOS, Linux fark etmez. Bu zaten amacın özü.
Kurulum sonrası:
vagrant plugin install vagrant-vbguest
vagrant box add laravel/homestead
vagrant box add komutu Homestead kutusunu indiriyor — birkaç dakika sürebiliyor, kutu yaklaşık 1 GB boyutunda.
Homestead’ı kurmak
Homestead’ı sisteme global olarak kurmanın iki yolu var: Composer ile ya da doğrudan git deposunu klonlayarak. Composer yöntemi daha pratik:
composer global require "laravel/homestead=~2.0"
homestead init
Bu komut ev dizininizde ~/.homestead/Homestead.yaml dosyası oluşturuyor. Tüm yapılandırma buradan yönetiliyor.
Homestead.yaml yapılandırması
Yapılandırma dosyası şu bölümleri içeriyor:
ip: "192.168.10.10"
memory: 2048
cpus: 1
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/Projeler
to: /home/vagrant/Projeler
sites:
- map: proje.app
to: /home/vagrant/Projeler/proje/public
databases:
- proje_db
Birkaç önemli nokta:
- folders: Yerel makinenizdeki dizini sanal makineyle eşliyorsunuz.
~/Projelerklasörü sanal makinede/home/vagrant/Projelerolarak görünüyor. - sites: Her projeye bir alan adı (domain) atıyorsunuz.
proje.appyerel makinenizde çalışacak. - databases: Adını verdiğiniz veritabanları otomatik oluşturuluyor.
Yapılandırmayı kaydettikten sonra /etc/hosts dosyanıza alan adını eklemeniz gerekiyor:
192.168.10.10 proje.app
Sanal makineyi başlatmak
homestead up
İlk başlatmada kutu yapılandırılıyor. Sonraki başlatmalarda sadece birkaç saniye sürüyor. Tarayıcınızda http://proje.app adresine gittiğinizde projeniz açılıyor.
homestead ssh
Bu komutla sanal makineye bağlanabiliyorsunuz. Artisan komutlarını, veritabanı işlemlerini buradan çalıştırıyorsunuz.
Homestead ne sunuyor?
Homestead kutusu önceden yapılandırılmış şunları içeriyor: PHP 5.6 (ve 5.5 ile 7.0 beta seçeneği), Nginx, MySQL, Postgres, Redis, Memcached, Beanstalkd, Node.js ve Composer. Bunları ayrı ayrı kurmanıza gerek yok.
Birden fazla proje
Aynı Homestead kurulumunda birden fazla proje çalıştırmak mümkün. sites ve databases bölümlerine yeni girişler ekliyorsunuz, /etc/hosts’a yeni domain yazıyorsunuz ve homestead reload --provision ile yapılandırmayı uyguluyorsunuz.
sites:
- map: proje-a.app
to: /home/vagrant/Projeler/proje-a/public
- map: proje-b.app
to: /home/vagrant/Projeler/proje-b/public
Her proje kendi alan adında, tek bir sanal makinede çalışıyor.
İlk kullanım izlenimi
Homestead’ı ekibe tanıtmadan önce birkaç gün kendi başıma kullandım. En büyük avantajı, yerel makinede yazılım sürümü uyuşmazlıklarıyla uğraşmayı tamamen bitirmesi. “Bende PHP bu sürümde” diye düşünmeden direkt kodlamaya geçebiliyorsunuz.
Dezavantajı ise sanal makinenin kaynak tüketimi. Düşük RAM’li bir makinede belirgin bir yavaşlama olabiliyor. Ama bu, kurulum süreci dışında pratikte pek sorun çıkarmadı.
Homestead, özellikle birkaç kişilik ekiplerde “ortam kurulumu” derdini gerçekten çözüyor. Yeni bir geliştirici projeye başladığında saatler değil dakikalar içinde hazır oluyor.