Neymiş bu Vagrant

Kısaca Vagrant Nedir?

Kendi anladığım şekilde anlatmam gerekirse Vagrant hazırladığınız text scriptleri ile sanal sunucular oluşturabileceğiniz otomatize bir araçtır.

Ne İşe Yarar?

Oluşturduğunuz scriptler ile herhangi bir ortamda (Müşteri ortamı vs.) sizler için hazır bir makine inşa eder. Tabi bir de ansible ile birleştirirseniz tadından yenmez sanırım. Tabi ki bunda özgürsünüz projenizin içerisinde ki bir sh dosyasını da çalıştırabilirsiniz.

Birkaç Terim

Provider : Sisteminizin hangi sanallaştırma platformu üzerinde çalıştırılacağını belirtir. Örn: Virtualbox, Vmware, Docker

Box : Binlerce kullanıcı tarafından oluşturulmuş özel kutulardır. Bu kutuları scriptiniz içerisine yazarsanız Vagrant bunu sizin için indirir ve script içerisinde belirttiğiniz özellikler üzerinden çalışmasını sağlar. Örnek vermek gerekirse pfsense box'ını indirirseniz sizlere nur topu gibi bir pfsense makinesi verecektir.

Provision : Sistem kurulduktan sonra çalıştırılacak script vs şeyleri yazdığımız yer ( en azından benim anladığım :D )

Next, Next, Next

Debian based sistemler üzerinde

apt install vagrant

Tabi ki sadece vagrant kurmak yetmeyecektir. Kullanacağınız provider'ı da sisteminize indirmeniz gerekmektedir. Ben virtualbox kullanacağım.

Hadi Başlayalım.

Projeyi oluşturacağınız klasöre gittiğinizde burada vagrant init yaparsanız sizin için bir vagrantfile oluşacaktır. İçerisini temizleyerek aşağıda ki satırları ekleyelim.

Vagrant.configure(2) do |config|
        config.vm.define "nebuvagrantya" do |nbv|
        nbv.vm.box = "ubuntu/trusty64"
        nbv.vm.network :private_network, ip: "10.0.0.2"
        nbv.vm.hostname = "nebuvagrantya"

Burada ki kodları açıklamak gerekirse Vagrant.configure(2) do |config| yazdığımızda kalın yazdığım kısım aslında bir değişken olarak davranıyor.

Altında Vagrant üzerinde bir makine açacağımızı ve bunu kısaltma olarak nbv olarak çağıracağımızı belirtiyoruz. ( nbv )

Diğer satırlarda bu makinemizin ubuntu kutusunu kullanacağını belirtiyoruz. Bu kutunun hangi ip alacağını ve private networkde olacağını belirtiyoruz. Ayrıca bu makinenin Virtualbox üzerinde ki ismini de belirtmiş oluyoruz. Fakat bu bize yetiyor mu tabi ki yetmiyor. Hadi biraz daha sanal makinemizin ayarları ile oynayalım.

Projemize provider olarak virtualbox ekleyelim.

Vagrant.configure(2) do |config|
    config.vm.define "nebuvagrantya" do |nbv|
    nbv.vm.box = "ubuntu/trusty64"
    nbv.vm.network :private_network, ip: "10.0.0.2"
    nbv.vm.hostname = "nebuvagrantya"

    nbv.vm.provider "virtualbox" do |vb|
        vb.name = "Ne bu vagrant ya"
        vb.name =  "Ne bu vagrant ya"
        vb.memory = "512"
        vb.cpus = "2"
        vb.customize ["modifyvm", :id, "--vram", "32"]
        end

Burada VBoxmanage kullanarak sanal makinemizin ismini, ram miktarını, ekran kartı ram miktarını ve işlemci sayısını belirttik. Ayrıca provision kısmında shell üzerinde proje klasörümüzde bulunan nginxyukle.sh dosyasını çalıştıracağız. İsterseniz provisioning kısmında isterseniz direkt olarak ansible çalıştırabilirsiniz.

Örnek kod:

    vb.vm.provision "ansible" do |ansible|
        ansible.playbook = "nginxyukle.yml"
        ansible.verbose = "v"
end

Sanal makinenizin çok daha fazla ayarını değiştirmek isterseniz eğer aşağıya referans sayfasını ekleyeceğim.

Vagrant dosyamızın son hali

Vagrant.configure(2) do |config|
    config.vm.define "nebuvagrantya" do |nbv|
    nbv.vm.box = "ubuntu/trusty64"
    nbv.vm.network :private_network, ip: "10.0.0.2"
    nbv.vm.hostname = "nebuvagrantya"

    nbv.vm.provider "virtualbox" do |vb|
        vb.name = "Ne bu vagrant ya"
        vb.name =  "Ne bu vagrant ya"
        vb.memory = "512"
        vb.cpus = "2"
        vb.customize ["modifyvm", :id, "--vram", "32"]
        end
    nbv.vm.provision :shell, path: "nginxyukle.sh"
        end
        end

Hadi çalıştıralım artık. Terminalinize

vagrant up

Yazarsanız eğer daha önce aynı box'ı indirmemişseniz aşağıda ki gibi bir ekran göreceksiniz.

Not: Nginxyukle.sh dosyanızı oluşturmayı unutmayın :) Vagrant1

İşlemler bittikten sonra aşağıda ki gibi bir ekran göreceksiniz

Vagrant2

Artık herşey hazır.

Kullanabileceğiniz komutlar:

Komut Açıklama
vagrant ssh Eğer bir tane makineniz bulunuyorsa bu makineye direkt olarak ssh üzerinden erişir.
vagrant destroy Makinenizi destroy eder.
vagrant global-status Makineleriniz hakkında sizlere bilgi verir.
vagrant reload Makinenizi update eder

Komutlar ile ilgili aşağıda referans sayfası vereceğim. SSH bağlantısı yapalım ve yazıyı sonlandıralım. Vagrant3

Evet artık nur topu gibi bir sanal makinemiz var. Vagrant4

Vagrant Kutuları İçin

Vagrant üzerinde kutuları kullanabileceğinizi söylemiştik. Kullanıcılar tarafından oluşturulmuş public kutulara ulaşmak için aşağıda ki linki kullanabilirsiniz.

Vagrant Boxes

Ek Linkler

Vagrant CheatSheet

VBoxManage

Vagrant CLI

Complex VagrantFile