Vagrant Nedir? VirtualBox üzerine Vagrant kurulumu & BaseBox ve ProjectBox yönetimi

vagrantup

VAGRANT NEDİR?

Vagrant, Türkçe karşılık olarak göçebe, başıboş, avare olarak çevrilebilir. Vagrant, sanal makina programları (virtualbox, vmware) üzerine kurduğunuz işletim sistemlerini konsoldan yönetmenize olanak sağlayan bir uygulamadır. Yazılımcılara klonlanmış geliştirme ortamı sağlar. Bireysel olarak da kullanılabileceği gibi asıl faydasının ekip çalışmasında görüldüğü söylenebilir, son zamanlarda gitgide popülerleşmiştir. Özetle: “Nasıl olur! Az önce benim bilgisayarımda çalışıyordu. Sunucuya yollayınca patlamış.” Sorunu yaşamamanızı sağlar.

HER YİĞİDİN YOĞURT YİYİŞİ FARKLIDIR.

Bir geliştirici için performans ya da istikrarlı çalışma için en önemli hususların başında kendisini rahat hissettiği yazılım geliştirme ortamı gelir. Ortam derken, rahat bir koltuk ve huzurlu, eğlenceli bir ofisi de bu tanıma katabiliriz. Ama bizi ilgilendiren kısmı; hepinizin de anlayacağı üzere çalıştığımız işletim sistemi, IDE, araçlar, sunucular, test ortamları vs. vs.

Ekip içinde proje geliştirmek, birçok yazılımcının bu yukarıda bahsettiğimiz rahat çalışma ortamına erişmesine engel teşkil ediyor. Bazı şirketler kalıplar halinde yazılımcı bilgisayarları oluştururlar ve her yazılımcıya çalışacağı sistemi hazır olarak verirler. Yazılımcı, “Yok efendim ben Windows istemem Mac olsun, ben wamp istemem, AppServ olsun” deme lüksüne sahip olamayabiliyor. Aslında şirketler kendilerine göre haklı sebepler sunarak, böyle bir standardizasyonun verimlilik artışı sağlayacağını düşünürler. Halihazırda birçok başarılı web projeleri ayakta kalmak için bireylerinin birbirine entegre çalıştığı, zaman ve emek verimliliğini arttırmak için yöntemler geliştiriyorlar. Vagrant’ ta işte tam burada bize yardımcı oluyor.

ÖZETLE ÇALIŞMA MANTIĞI

5 tane de yazılımcı olsun. Gerçek ortamda yayın yapan bir web sunucu olsun. Bu sunucu ile aynı şekilde yapılandırılmış bir sanal sistem (BaseBox) oluşturdunuz diyelim. 5 yazılımcının da bu oluşturduğumuz BaseBox’ ı kullanmasını sağladığınızda hepsi sunucuyla aynı özellikleri taşıyan birer lokal sunucuya sahip olacaklar. Bundan sonra 5 yazılımcının her biri projelerini ister not defteri ile yazsınlar, ister ide ile yazsınlar problem değil. Bu sayede lokalde çalıştırdıkları her kod parçacığı ya da kod bloğu sunucuda da sorunsuz bir şekilde çalışacaktır.
vagrant_calisma_prensibi

Vagrant’ box mantığı temel ve proje olarak ayrılır. Base Box oluşturup, her projeniz için ayrı ayrı ProjectBox’ ları oluşturabilirsiniz. ProjectBox’ lar, BaseBox’ lardan oluşur.

KURULUMU

Vagrant’ı kullanabilmek için bilgisayarınızda Oracle VirtualBox’ ın (http://www.virtualbox.org) kurulu olması gerekmektedir. Vagrant’ı Vmware ile de kullanabilirsiniz ama o sürümünün paralı olduğunu belirtmek isterim. Bu yüzden Vmware ile kurulumu anlatmayacağım.

http://downloads.vagrantup.com/ sitesinden istediğimiz bir Vagrant sürümünü, hangi platformda kullanacaksak ona uygun olanı indirmemiz gerekmektedir. Ben Windows kullandığım için size Windows versiyonunu anlatmaya çalışacağım. Vagrant’ın kurulumu çok basit, kurulum adımlarını burada anlatmayacağım.

1. İleri,ileri butonlarına basarak kurulumu gerçekleştirdiniz varsayıyorum. Ben kurulum klasörünü değiştirmedim varsayılan olarak C:\HashiCorp\Vagrant adresine kurulum gerçekleşti.

2. Şimdi C klasörüne gidip “wwwroot” adında bir klasör oluşturalım, onun içine de “php-fil” klasörü açalım. Project box’ı burada aktif edeceğiz.

3. Eski tip ya da yeni PowerShell konsolunu çalıştırıp oluşturduğumuz “php-fil” klasörüne gidelim. Konsolda

vagrant init precise32 http://files.vagrantup.com/precise32.box 

komutu ile bulunduğumuz klasörün ProjectBox olarak tanımlanmasını sağlıyoruz.
vagrant_init_komutu

Daha önce BaseBox olmadığı için 4.adımda ki komutu uyguladığımızda aynı zamanda BaseBox burada verdiğimiz linkten download edilecek. Bu satırda ki precise32 oluşturacağımız sanal makinanın adı (BaseBox) ve hemen yanındaki de indireceğimiz linkidir. (Precise32 bir Ubuntu versiyonudur.) Dilerseniz kendi bulduğunuz boxlarını da indirebilirsiniz. Bunun için Google da arama yaparsanız size Vagrant Box sağlayan siteler çıkacaktır. Mesela; http://www.vagrantbox.es, http://puppet-vagrant-boxes.puppetlabs.com. Ben sunucularımda CentOS kullandığım için bu sitelerden kendime uygun olan Centos box’larını tercih ediyorum. Şimdi precise32 ile anlatımımıza devam edelim. Komutu çalıştırdığınızda size

“A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.”

sanal ortamınızın kullanıma hazır olduğunu bildiren bir bilgi mesajı veriyor

4. Hemen akabinde konsolda

vagrant up 

komutunu çalıştırırsanız, bu komutla BaseBox inmeye başlayacaktır.
vagrant_up

Aslında bu komut ProjectBox’ı çalıştırmak için kullanılan bir komut ama ilk defa kullanıldığımız için BaseBox’ ı indirecek ve ondan sonra ProjectBox’ ı çalıştıracak. İnternetinizin hızına ve dosyanın boyutuna göre biraz sürebilir. İndirme bittikten sonra Vagrant, port ayarlarını yapmak için sizi biraz daha bekletecek. Bu zamanı kendinize içecek birşeyler alarak değerlendirebilirsiniz. İndirme tamamlandığında BaseBox oluşmuş olacaktır. Vagrant, aynı zamanda “php-fil” klasörüne ProjectBbox’ ı da oluşturulmuş olacak. BaseBox’ lar “C:\Kullanıcılar\kullanıcı_adiniz\.vagrant.d” klasöründe yer alırken proje box’ı az önceki komutu çalıştırdığınız “php-fil” klasöründe yer alır. Bundan sonra eğer başka projelerde BaseBox olarak precise32 kullanırsanız tekrar indirmeyip, indirdiğiniz BaseBox’ı kullanacaktır.

5. “php-fil” dizinindeki VagrantFile ProjectBox’ ının temel ayar dosyasıdır. Not defteri ile açarsanız şu iki satırın commentsiz olduğunu görürsünüz. Bu projenin hangi BaseBox’ı kullanacağını belirten ayarlardır. Şimdilik değiştirmiyoruz, isterseniz farklı BaseBox’ lar da indirip, projelerin farklı platformlarda nasıl çalıştığını bu şekilde farklı BaseBox’ ayarını değiştirerek deneyebilirsiniz.

config.vm.box = "precise32"
 config.vm.box_url = http://files.vagrantup.com/precise32.box

6. Bu dosyada bir de network ayarları yapmamız gerekiyor. Commentli olan şu satırı bulup üzerinde değişiklik yapalım. Başındaki # kaldırıp port yönlendirmeyi aktif hale getirelim.

# config.vm.network :forwarded_port, guest: 80, host: 8080

7. Tabi bu esnada ProjectBox açık olduğu için yaptığınız değişik uygulanmayacak. Bunun için Projectbox’ ı kapatıp tekrar açmanız gerekecek. Bunun için konsolda vagrant halt komutunu verebilirsiniz. Bu durumda ProjectBox kapanır. Tekrar vagrant up komutuyla çalıştırdığınızda yeni port yönlendirmelerinizin aktif olduğunu göreceksiniz. Ya da kısaca vagrant reload yazarsanız, aynı işlemi yapacaktır.

vagrant_port_yonlendirme

Resim 2’de gördüyseniz bir de 2222 portu yönlendirilmiş bu da ssh bağlantısı için kullanacağız. Konsolda vagrant ssh komutu verdiğinizde size ssh için kullanabilecek program bulamadığı, path tanımlı olmadığının uyarısını verir, bunun yerine ssh client programları kullanabileceğinizi bildiren bir uyarı mesajı verecek. Linux kullanıcıları doğal olarak böyle bir uyarı almayacaklar. Bu uyarının hemen altında secure_key bilgisi gözükecek. Ben putty kullanıyorum, secure key’ i de puttygen ile anlatacağım.

8. Bu key dosyasını puttygen (http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe) ile putty private key dosyasına yani *.ppk dosyasına çevirmeniz gerekmektedir.

vagrant_ssh

Konu dışına çıkmamak için secure key nedir ne değildir değinmek istemiyorum. Sadece bu adımı nasıl yapacağımızı belirtip geçelim. Puttygen ile load private key yapıp insecure_key i programa açalım daha sonra sağ alttaki butondan save private key yaparasız size ppk dosyasını oluşturmanız için klasör soracak. Oluşturup puttygen i kapatabilirsiniz. Şifresiz kaydetmek istediğinize eminmisiniz diye sordu, evet diyip geçtik.

puttygen_secure_key_olusturma

9. Resim 3’ ü hatırlarsanız bize kullanıcı adı olarak vagrant vermişti. Private key de oluşturduğumuz için ssh ile 127.0.0.1:2222 ye bağlanmaya çalıştığımızda şifre sormadan login olabileceksiniz.

vagrant_ssh_login

Dilerseniz konsolda vagrant ssh-config ile ssh yapılandırmasını görebilirsiniz.

10. Bundan sonraki adım ise host işletim sistemi ile ProjectBox arasında klasörleri senkronize etmek. Konfigürasyon dosyamızda

# config.vm.synced_folder "../data", "/vagrant_data"

Satırını bulun, satırı klonlayıp yeni oluşturduğunuz satırın başındaki # kaldırıp satırı aktif edin.  Aktif ettiğiniz satırda da “” içerisinde bulunan klasör yollarından ilk sıradaki yani sol tarafta olan host makine yani sizin kullandığınız bilgisayarınızdaki yol, sağ taraftaki dizin yolu ise ProjectBox’ taki yolu gösteriyor. Bu şekilde istediğiniz kadar klasör senkronize edebilirsiniz. Bu adımı yaptığınızda şuna benzer bir yapılandırmanız olması lazım.

vagrant_klasor_senkronize

Artık klasörlerimiz senkronize şekilde çalışıyorlar. Bir sonraki resime bakarsanız touch komutu box ta oluşturduğumuz dosya doğrudan ana makinada da oluşturuldu.
vagrant_klasor_senkronize

VAGRANT KOMUTLARI

Bu bölümde de kısaca vagrant komutlarına değinmek istiyorum.  Bu komutların bir kısmını zaten yukarıdaki adımlarda öğrendiniz, dilerseniz hepsine şöyle topluca göz atalım.

box : BaseBox’ larla işlem yapan komuttur. box komutu add,list,remove,repackage şeklinde 4 tane daha parametre alır. add’ yeni box ekler, yazıda bahsetmiştik, remove eklediğiniz bir box’ı silmeye yarar. list mevcut box’ larınızı listeler. repackage ise mevcut bir box ı başka bir provider adresinden yani url’den tekrar indirip kurar. Örneklemek gerekirse

vagrant box repackage precise32 http://www.php-tr.org/deneme_vagrant.box

destroy : Box’ ı siler, uzun süre kullanmayacaksanız, silmek için bunu kullanabilirsiniz.

halt : çalışan box’ ı durdurur.

help : bu listeyi ve versiyon bilgilerini gösterir.

init : bir vagrant ortamı, yani ProjectBox’ ı oluşturur.

package : Eğer birden çok yazılımcı için aynı box’ ı kullanacaksanız can alıcı komutlardan birisidir, mevcut box’ ı paketler ver diğer kullanıcıların indirebileceği, kullanacağı bir şekle getirir, sıkıştırılmış şekilde .box uzantılı bir dosya oluşturur.
vagrant_package

plugin : Adından anlaşılacağı üzere eklentileri düzenlemek için kullanılır. Bu komut da parametreye ihtiyaç duyar. install, license, list, uninstall, update parametreleriyle eklentileri düzenleyebilirsiniz.

provision: Otomatik olarak box’ a uygulama yükleme, ayarları değiştirmenize yarar. Vagrant up komutu verdiğiniz an provision komutu zaten çalışır. Eğer sunucunuzu elle tek tek ssh’ dan ayarlarım diyorsanız, ihtiyacınız olmayabilir. Daha detaylı bilgi için internetten puppet, puppet server, chef solo, chef server ile ilgili dökümanları incelemenizi öneririm.

reload : box’ ı kapatıp tekrar açar, konfigürasyon dosyasında değişiklik yaptıysanız bu komutu uygulamanız gerekmektedir.

resume : suspend yaptığınız bir box’ ı tekrar çalışır hale getirir.

ssh: box’ a ssh ile bağlanmaya yarar. Biz makalemizde putty kullanarak yapmıştık bu işlemi hatırlarsanız.

ssh-config : ssh ayarlarınızı toplu halde gösterir.

status : boxların çalışıp çalışmadığının bilgisini verir.

suspend : çalışan bir box’ ı askıya alır, box restart olmadan durdurulur.

up : box’ ı çalıştırır.

Bu yazıda Vagrant’ ın ne olduğunu, box kurulumunu anlattık ama burada kullanmış olduğunuz box’ ın yapılandırma adımlarına hiç girmedik. Bu konular tamamen sunucu konfigürasyonu arzunuza bağlı. Mesela update yapabilirsiniz, lamp konfigürasyonlarını ayarlayıp ve servislerin her açılışta çalışmasını ayarlayabilirsiniz. Bu ayarları da internetten bulabileceğiniz shell scriptler ile hızlıca yapabilirsiniz. Ben size örnek olması için bir link vereyim. https://github.com/omerucel/vagrant-shell-modules. Bu scriptleri hazırlayan arkadaşa da teşekkürlerimizi sunalım.

php-fil de ne oluyor derseniz: http://fil.php-tr.org 

Kaynak: www.vagrantup.com

  • nazrdogan

    elinize sağlık güzel yazı olmuş

  • Ömer Faruk UYDURAN

    Merhabalar, güzel yazı olmuş teşekkürler.
    Ancak ben herşeyi yaptım ama vargant başlamıyor. Bu vargant için linux türevi bir işlemtim sistemi kurmamız gerekiyor mu? yoksa içinde entegre edilmiş bir şey var mı?

  • birol bellikan

    Elinize sağlık, güzel bir paylaşım olmuş. Putty ile bağlantı konusunda biraz daha konfigurasyon bilgisi vermek gerekiyor. Link bu yazıyı okuyanlar için faydalı olabilir. http://superuser.com/questions/532694/unable-to-connect-using-putty-ssh

  • mahmut

    elinize sağlık güzel yazı. ek olarak git kurarken ufak bir kaç ayarı değiştirince windows komut satırına ssh geliyor. ben asp.net geliştiricisyim ama meteor js gibi kutuphaneleri denemek için vagrant güzel bir seçenek gibi. Best linux distro for web developer diye ararken bir haci abi distro fark etmez docker kur onun içinde geliştir diyince dedim oo vaagraant yea. (vagrant daha pratik geliyor docker dan windows için)