29 Ocak 2015 Perşembe

Vagrant

NOT: Belge 0.1 sürümündedir, bilgiler yanlış olmasa da eksik olabilir. Öneri ve isteklerinizi paylaşmanız ya da belgeyi beğenmeniz büyük incelik olacaktır. Belgeyle ilgileniyorsanız izleyici olarak kayıt olabilirsiniz, böylece belgeyle ilgili ilerlemelerden haberdar olabilirsiniz.

Bu belgede Vagrant'ın tam olarak ne olduğu, hangi koşullarda kullanılabileceği, kurulumu ve kullanımını anlatacağız.

Vagrant nedir?

Vagrant yapılandırması kolay, yeniden üretilebilir ve taşınabilir çalışma ortamları oluşturulmasına olanak veren bir teknolojidir. Tek bir iş akışıyla kontrol edilen bu ortamlar yazılım geliştirici ve sistem yöneticilerinin daha üretken ve esnek olmasına imkan sağlar. Vagrant temelde iki adımda işler: Geliştirme ortamı oluşturulması ve geliştirme ortamının hazırlanması.
Vagrant geliştirme ortamlarını oluşturmak için VirtualBox, VMware ve AWS gibi geliştirme ortamı sağlayıcılarını kullanır. Dikkat ederseniz burada sanal makine yerine geliştirme ortamı sağlayıcısı terimini kullandık, çünkü bu geliştirme ortamları VirtualBox ya da VMware sanal makineleri olabileceği gibi Docker taşıyıcıları da olabilir.
Geliştirme ortamı oluşturulduktan sonra Vagrant, kabuk betikleri, Chef ya da Puppet gibi hazırlayıcı araçlarını kullanarak ortamda istenen yazılımların kurulum ve yapılandırmasını otomatik olarak yapar.
Eğer yukarıdaki bilgiler size çok karışık geldiyse endişelenmeyin, belgenin ilerleyen bölümlerinde örneklerle birlikte daha ayrıntılı bir anlatım sunmaya çalışacağız.

Vagrant hangi durumlarda kullanılabilir?

Vagrant, sanal makinelerin kurulması ve yönetilmesi gereken her durumda kullanılabilir. Örneğin; yalıtılmış yerel geliştirme ortamları, test/staging sunucuları, üretim ortamları, vb. bütün yazılım geliştirme ortamları için yönetici olarak görev alabilir.
Eğer projenizi fiziksel makineniz üzerinde, herhangi bir sanal makine kullanmadan geliştiriyorsanız bile Vagrant'ın sağladığı kolaylıklar sayesinde bir sanal sunucu içinde projenizi geliştirmeye başlayabilirsiniz. Projenizi Vagrant'la yönetilen bir sanal makineye taşımanız oldukça kolaydır. Ayrıca önceden kullandığınız IDE, tarayıcı ya da hata ayıklayıcı gibi uygulamaları aynı şekilde kullanmaya devam edebilirsiniz. Bu şekilde fiziksel makinenizi projeniz için gerekli olan programlama dili, çatı, kütüphane ve bağımlılıklarla kirletmekten de kurtulmuş olursunuz.

Vagrant kurulumu

Vagrant'ı kurmak oldukça kolaydır; tüm popüler işletim sistemleri için standard bir kurucu ya da paket mevcuttur. Kurulum 'vagrant' ikilisini sistem yol değişkeninize ekler, böylece bu ikiliyle vagrant'ı kullanmaya başlayabilirsiniz. Windows'ta sisteminizden çıkış yapıp sisteminize tekrar girmeniz gerekebilir.

Vagrant kullanımı

Şimdi bir örnek üzerinden Vagrant'ın kullanımını inceleyelim. Bu örnekle birlikte yürüyebilmeniz için Vagrant'ı yukarıdaki talimatlara göre kurmuş olmanız gerekmektedir.
Vagrant öntanımlı olarak VirtualBox sağlayıcısını kullanır; eğer VirtualBox sağlayıcısını kullanırsanız Vagrant kurulumunda herhangi bir değişiklik yapmanıza gerek yok, ancak VMware ya da Docker gibi bir sağlayıcı kullanırsanız Vagrant eklenti sistemi ile ilgili eklentiyi Vagrant kurulumunuza eklemeniz gerekir. Biz bu örnekte öntanımlı olan VirtualBox sağlayıcısını kullanacağız. Kullandığımız sağlayıcıdan bağımsız olarak sağlayıcıyı sistemimize kurmamız gerekmektedir. Şimdi VirtualBox'ın sitesindeki talimatlara göre kurulumu yapalım.
Örneğimize başlamadan önce bir deneme dizini oluşturup bu dizin içine girmemizde fayda var, çünkü örnek boyunca çeşitli dosyalar oluşturacağız.

Geliştirme ortamının oluşturulması

Vagrant'la bir proje geliştirirken ilk yapmamız gereken şey geliştirme ortamını oluşturmaktır, bizim örneğimizde bu bir VirtualBox sanal makinesi olacak. Bunu yapabilmek için bir uzun bir de kısa yol var. Biz bunların ikisini de burada sıralayacağız. Uzun yol ile bu aşamanın mantığını kavradıktan sonra gerçek işlerinizde kısa yolu gönül rahatlığı ile kullanabilirsiniz.

Uzun yol

Bir geliştirme ortamı oluşturmak için ilk yapmamız gereken aşağıdaki komutla bir Vagrant ortamı oluşturmaktır:
$ vagrant init
Bu komutun çıktısına baktığımızda, `Vagrantfile` adlı bir dosyanın oluşturulduğunu ve `vagrant up` komutunu çalıştırarak ilk sanal ortamımızı oluşturmaya hazır olduğumuzu söylediğini görebiliriz. Ancak öncelikle Vagrantfile'da yapmamız gereken bir ayar var.
Vagrantfile, tahmin ettiğiniz gibi projemizin Vagrant ile ilgili ayarlarını tutacağımız dosyadır. Bu dosyanın temelde iki amacı vardır: Projenin kök dizinini belirlemek ve projenin Vagrant ile ilgili ayarlarını tutmak. Bu aslında bir Ruby kaynak kodu dosyasından başka bir şey değildir, ancak tabiki Vagrant kullanmak için ne Ruby kurmanıza ne de Ruby bilmenize gerek var. Şimdi Vagrantfile'ı açalım ve içerisindekilere bir göz atalım; dosyada her satırın iyi bir şekilde anlatıldığını görebilirsiniz, ayrıca ayarlarla ilgili örnekler de vardır. Gördüğünüz üzere bu dosyada yorum satırı olmayan üç satır var, bunları toplarsak şöyle bir dosya elde ederiz:
1
2
3
Vagrant.configure(2do |config|
  config.vm.box = "base"
end
Burada 1. ve 3. satırları boşverebilirsiniz. Bizim yapmamız gereken ayar 2. satırdaki `config.vm.box` ayarıdır. Bu ayar projemizin geliştirme ortamı olarak kullanacağımız kutuyu belirtmemizi sağlar.
Vagrant'ta kutular sağlayıcılar tarafından sağlanan sanal geliştirme ortamı birimleridir. Örneğin; VirtualBox bir sağlayıcı, `Ubuntu 12.04 LTS 32-bit` ise bu sağlayıcının bir kutusudur. Her Vagrant geliştirme ortamı bir kutuya ihtiyaç duyar. Bu kutular resmi depodaaranıp bulunabilir. Burada bulunan kutular `sağlayıcı/paket` deseninde yer alır ve bütün olarak bir kutuyu işaret eder. Her ne kadar kutuları resmi depoda bulup kullanmak kolay olsa da kutular yerel bir dosya ya da özel bir URL'den de kullanılabilir. Şimdi resmi depoda bulunan `hashicorp/precise` kutusunu Vagrantfile'daki bahsettiğimiz ayara ayarlayalım; Vagrantfile'ın son durumu şöyle olacaktır:
1
2
3
Vagrant.configure(2do |config|
  config.vm.box = "hashicorp/precise32"
end
Bu ayarı yaparak Vagrant ortamımızda kullanacağımız kutuyu belirtmiş olduk. Bu ayar, `vagrant up` komutuyla birlikte `hashicorp/precise32` kutusunun içe aktarılmasını sağlayacak. Ancak bundan önce kutuların içe aktarılmasının tam olarak ne olduğu ve nasıl yapıldığı hakkında konuşmakta fayda var. Bir kutunun içe aktarılması için bu kutunun yerel makinemizdeki sağlayıcıda var olması gerekir; bizim örneğimizde VirtualBox içinde `hashicorp/precise32` kutusu bulunmalıdır. Vagrant kutuların sağlayıcılardaki karşılıklarında herhangi bir değişiklik yapılmasına izin vermez, eğer bir makine bir proje tarafından kullanılacaksa bu makineyi kopyalar ve bu kopya üzerinde değişiklik yapılmasına imkan sağlar. İşte içe aktarmaktan kastımız budur. Vagrant böyle bir yol izleyerek, özgün makinenin her zaman erişilebilir olmasına ve farklı projeler tarafından kullanılan farklı kopyaların birbirlerinden farklı içeriklere sahip olabilmelerine olanak verir. Bizim örneğimizde VirtualBox içinde çalışan ve `hashicorp/precise32` kutusunun karşılığı olan `Ubuntu 12.04 LTS 32-bit` sanal makinesi aslında salt-okunurdur, Vagrant içe aktarma ile bunun bir kopyasını oluşturur ve yapılan değişiklikler sadece bu kopyada gerçekleşir. Şimdi `hashicorp/precise32` kutusunu şu komut ile ekleyelim, kutunun boyutu nedeniyle bu işlem biraz uzun sürebilir:
$ vagrant box add hashicorp/precise32
İşte şimdi `vagrant up` komutunu çalıştırabiliriz:
$ vagrant up
Komutun çıktısına baktığımızda, komutun birçok şey yaptığını görebiliriz: Kutuyu içe aktarmak, kutunun güncel olup olmadığını kontrol etmek, kutunun VirtualBox'taki karşılığı olan sanal makineye isim vermek ve makineyi başlatmak. Ayrıca kutuyla ilgili bazı ayarların yapıldığını da görebiliriz, bu ayarlar aslında makinenin hazırlanmasıdır, ancak bunları şu anda boşverebiliriz.

Kısa yol

Yukarıdaki uzun yolda yapılan işlemleri aşağıdaki komutlar aynı sırada yerine getirmektedir:
$ vagrant init hashicorp/precise32
$ vagrant up
`vagrant init` komutu bir `Vagrantfile` oluşturur ve kendisine verilen parametre ile kutu ayarını ilklendirir. `vagrant up` komutu ise `Vagrantfile`ı okuyarak ilgili kutuyu öntanımlı sağlayıcıya, yani VirtualBox'a, ekler, ve kutuyu içe aktarmak, makineyi başlatmak ve makineyi hazırlamak gibi işlemleri yapar.

Geliştirme ortamının hazırlanması

Vagrant'la bir proje oluştururken yapmamız gereken ikinci iş, oluşturduğumuz geliştirme ortamını projemiz için hazır hale getirmektir. Bunun için `Vagrantfile`da en aşağılarda yer alan `config.vm.provision` ayarını düzenlememiz gerekmektedir. Bu ayarın aldığı ilk parametre kullanılacak hazırlayıcı tipidir. Biz bu örnekte `shell` hazırlayıcısını kullanacağız, ancak Puppet, Chef, Ansible, Salt ve Docker gibi hazırlayıcılar da kullanılabilir. Vagrantfile'ın bu bölümündeki örneği açarak doğrudan kullanabiliriz, son durumda yorum satırları olmadan Vagrantfile'ımız şöyle olacaktır:
1
2
3
4
5
6
7
8
Vagrant.configure(2do |config|
  config.vm.box = "hashicorp/precise32"
  
  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install -y apache2
  SHELL
end
Şimdi şu komutu çalıştırarak sanal makineyi yeniden başlatalım ve `--provision` bayrağıyla yeniden başlatma sırasında hazırlamayapılması gerektiğini belirtelim:
$ vagrant reload --provision
İşte bu kadar, çıktıdan da anlaşılabileceği gibi makine çalışırken hazırlama ayarında belirttiğimiz kabuk komutları çalıştı ve sanal makinemize `apache2` kuruldu.

Sonuç

Bu belgede Vagrant'ın tam olarak ne olduğu, hangi koşullarda kullanılabileceği, kurulumu ve kullanımını anlatmaya çalıştık, daha fazla bilgi için Vagrant'ın resmi belgelendirmesine bakabilirsiniz.

Hiç yorum yok:

Yorum Gönder