Vagrant ile yazılım geliştirmek

Yayın Tarihi : 22/08/2015Tahmini okuma süresi : 4 dakika

Ön Bilgi : Makale yerel ortamda PHP ile yazılım geliştirmek için yazılmış olup mantık diğer platformlara ve yazılım dillerine uyarlanabilir.

Ön bilgide de bahsettiğim gibi yerel ortamda PHP ile yazılım geliştirirken bize lazım olacak şeyler eğer Windows kullanıyorsak WAMP, Linux kullanıyorsak LAMP ya da Mac kullanıyorsak MAMP stack’ı, projemiz yayına çıkmadan önce geliştirme için bir nebze zorunlu. Yani açacak olursak kısaltmalardaki ilk harfler bulunduğumuz platform’u ikinci harf Apache HTTP sunucusunu, üçüncü harf MySQL sunucusunu ve son harf de PHP interpreter’ını sembolize eder. Bu stack’daki bileşenlerin dışında başka şeyler de var tabi. Mesela apache yerine Nginx, MySQL yerine PostgreSQL vb. gibi…

Bu kadar sunucu paketini aynı anda sisteme kurmanın dışında düzgün ayarlanmazsa sunucu servislerinin devamlı çalışıp sisteme devamlı bir yük bindirmesi ve sistemde az da olsa bıracakları çöpler de ayrı bir sıkıntı. Bunun yerine sanallaştırılımış bir sunucumuz olsa ve her şeyi orada yapsak ve sanal makinayı kapattığımız anda sistemimizde gereksiz hiç bir şey çalışmasa mesela güzel olmaz mıydı?

Vagrant‘ın asıl amacı elbette bu değil ama bu da yararlarından bir tanesi. Vagrant temel olarak projenizi yayına alacağınız sunucunuzun aynısını kendi bilgisayarınızda sanal olarak kurup kullanmanızı sağlayan bir ara yazılım. Böylece platformlar arası uçurumlar ortadan kalkacağı için projenizi sunucunuzda yayına aldığınız zaman size sorun çıkarmadan çalışacaktır.

Şimdi sorabilirsiniz; zaten VMWare var, VirtualBox var, güzel de çalışıyorlar, peki neden Vagrant kullanalım? Merak etmeyin Vagrant da çalışırken VMWare veya VirtualBox’a ihtiyaç duyuyor zaten. Fakat sizi VirtualBox ya da VMWare’in arayüzü ve ince ayarları ile uğraştırmaktansa tüm gereken ayarları sizin için yapıp istediğiniz bir klasörü sizin için sanal sunucudaki yazılımın çalışacağı klasör ile senkronize ediyor ve sanal sunucunuz başladığı anda yazılımınız çalışır duruma geliyor. Hatta sunucunuz headless (özellikle siz kurmadığınız sürece görsel arabirimi olmayıp sadece terminalden yönetilen) bir sunucu olduğu için ekranını bile görmenize gerek kalmayıp arkaplanda sessizce çalışıyor.

Hemen hızlıca hayata geçirilebilecek bir örnekle başlamadan önce sistem gereksinimlerimizi öğrenelim. Öncelikle kullanacağınız Box‘a (Vagrant image’larına box deniyor) göre değişen gereksinimler olmakla beraber tavsiyem kullandığınız bilgisayarın işlemcisinin sanallaştırma teknolojilerine uygun olması ve host işletim sisteminizin 64 Bit olması en iyi performans için bir nebze gerekli. Intel işlemci kullanıyorsanız VT-X, AMD işlemci kullanıyorsanız da AMD-V desteğinin işlemcinizde olması ve BIOS’unuzda aktif olması birincil şartımız. Donanımsal gereksinimlerimizi öğrendiğimize göre yazılımsal gereksinimlerimize geçebiliriz.

Önce sanallaştırma yazılımlarından birini sistemimize kuruyoruz. Tavsiyem bir çok Box image’ı ile uyumlu olması açısından VirtualBox kullanmanız. Hemen ardından Vagrant‘ı da sistemimize kurup sanal makinemizi ayağa kaldırabiliriz. Ben bu örnekte PHP geliştirmek için en iyi image’lardan biri olan ScotchBox‘u kullanacağım.

Hemen ScotchBox reposunun bir kopasını git clone komutu ile çekiyoruz;

git clone https://github.com/scotch-io/scotch-box ozzyTest

Yukarıdaki komuttan sonra git bizim için ScotchBox reposunun bir kopyasını diskimizde ozzyTest klasörü altında oluşturacak. İşlem bittikten sonra;

cd ozzyTest

Komutu ile Vagrantfile dosyasının olduğu repo klasörümüze giriyoruz ve;

vagrant up

Komutu ile sanal makinamızın gerekli image’larının indirilip bizim için oluşturulmasını ve sunucumuzun çalıştırılmasını sağlıyoruz. İşlem bittiğinde elimizde tam kapsamlı bir sunucu çalışmış ve bizi bekliyor olacak. Tek yapmanız gereken az önce oluşturulan ozzyTest repo klasörümüz içindeki public klasörüne proje dosyalarını kopyalamak. Hatta projenizi bu klasör altından düzenlerseniz değişiklikleriniz hemen hayata geçecektir.

Peki bu ScotchBox neleri içeriyor? İşimize yarar mı? Şöyle bir liste vermek sanırım çok daha iyi olacak;

Sistem Zımbırtıları;

  • Ubuntu 14.04 LTS
  • PHP 5.6
  • Ruby 2.2.x
  • Vim
  • Git
  • cURL
  • Imagick
  • Composer
  • Beanstalkd
  • Node
  • NPM

Veritabanı Zımbırtıları;

  • MySQL 5.5
  • PostgreSQL
  • SQLite

Cache’leme Zımbırtıları;

  • Redis
  • Memcached

Node/NPM Zımbırtıları;

  • Grunt
  • Bower
  • Yeoman
  • Gulp
  • Browsersync
  • PM2

Laravel Zımbırtıları;

  • Laravel Installer
  • Laravel Envoy
  • Blackfire Profiler

Sunucumuzda ayrıca SSH sunucusu da kurulu ve aktif geldiğinden istediğimiz zaman repo klasörü içinde vagrant ssh komutunu vererek sunucumuza SSH üzerinden erişebilir ve istediğimiz herşeyi kendimize göre özelleştirebiliriz. Ayrıca Vagrant’ın desteklediği en güzel özelliklerden biri olan shell provisioning ile sunucumuza başladığı anda çalıştırılmak üzere komutlar gönderebiliriz. Örneğin;

config.vm.provision "shell", inline: <<-SHELL
    # Shell komutlarını buraya yazıyoruz...
    echo "Great Scott!"
SHELL

Kodlarını repo klasörümüzdeki Vagrantfile dosyasında sondaki end satırından önce ekleyerek istediğimiz komutu her sunucu başladığında çalıştırabiliriz. Yukarıdaki örnekte sunucu ekranına her sistem açılışında “Great Scott!” yazacak.

İstersek yine Vagrantfile dosyamızı düzenleyerek ScotchBox ile gelen varsayılan ağ bağlantısı ayarını private’dan public’e alabilir ve IP adresini kendi ağımıza uygun biçimde değiştirebiliriz. Böylece tek bir makinada çalışan sanal sunucuya ağdaki herkes erişebilir. Ayrıca yine buradaki ayarlardan senkronize edilecek klasörleri ve sanal sunucumuzun adını da düzenleyebiliriz.

ScotchBox’un sayfasından daha detaylı ayarları öğrenip sunucunuzun üzerinde istediğiniz her türlü ayarı yapabilir ve sunucunuzu çalışmamız için gereken en iyi hale getirebilirsiniz. Bundan sonrası artık bir de sunucu ayarları ile kafayı yemek değil doğrudan işimize odaklanıp projelerimizi bitirmeye kalıyor.

Peki günlük işimizi bitirdik, sanal sunucumuzu nasıl kapatacağız? Çok basit. Tek yapmanız gereken terminalden repo klasörümüze girip vagrant halt komutunu vermek. Sanal sunucumuzu komple silmek istersek de vagrant destroy komutu sanal makinamızı komple VirtualBox içerisinden uçuruyor. Daha sonra tekrardan vagrant up komutunu vererek zaten indirilmiş olan image’dan bir kopya daha yaratılmasını sağlayabiliriz. Ayarlarını bozduğunuz ve çalışmaz hale gelen bir sunucu için uğraşmanıza gerek yok, imha edip yenisini başlatın ve işinize devam edin.

Vagrant ile ilgili daha detaylı ayarları ve komutları Vagrant Docs sayfasından bulabilir ve kendinize özel sanal sunucularınızı yaratabilirsiniz.

Umarım makale amacına ulaşır ve işlerinizi hızlandırmak adına Vagrant size yararlı bir yardımcı araç olur…