Vagrant nedir? Virtualbox, VMWare gibi sanallaştırma teknolojilerinin kullanımını kolaylaştıran bir provisioning aracıdır. Tek bir Vagrantfile dosyası ile sanal makinenin tüm ayarlarını ve kurulum detaylarını tanımlayıp kullanabiliriz. Mesela Vagrantfile üzerinden ubuntu 16 kur, şu network ayarlarını kullan, başlangıçta şu scriptleri çalıştır şeklinde bir makine tanımı yapabiliriz. Ardından tek bir vagrant up
komutu ile sistem kullanıma hazır olacaktır.
Vagrant ne işe yarar?
Vagrant sanal makine ayarlarını oldukça kolaylaştırır. Git repomuzun içerisine oluşturacağımız Vagrantfile isimli tek bir dosya ile tüm takımın aynı ortamda ayrı sürüm işletim sistemi ve aynı version araçlarla çalışmasını sağlayabiliriz. Takım içi entegrasyon süreçlerini ciddi anlamda kolaylaştırır.
Sadece takım için değil tek başınıza proje geliştirirken de kullanabilirsiniz. Sanal makine yapılandırması Virtualbox gibi araçları kullanmaktan çok daha kolaydır. Hiç arayüzde muhatap olmadan gerekli tüm ayarlarınızı yapıp tek vagrant up
komutuyla sanal makineyi oluşturabilir ve çalıştırabilirsiniz. Ardından vagrant ssh
diyerek sanal sunucuya bağlanabilirsiniz.
Vagrant nasıl çalışır
Vagrant kendi deposundaki boxlar ile çalışır. Tüm box listesine şu adresten ulaşabilirsiniz. https://app.vagrantup.com/boxes/search . Buradaki boxları alıp değiştirip yeniden kendimiz box dosyası oluşturabiliriz. Yalnız docker ortamında yaygın olan bu işlem vagrant’ta pek uygulamaz. Çünkü image boyutları büyük olduğu için pek kullanışlı olmaz. Bunun yerine gerekli tüm provision ayarları yani gerekli yazılımların kurulması, güncellenmesi, yapılandırılması gibi ayarlar doğrudan Vagrantfile ile yapılır. Ardından vagrant up
komutuyla sistem çalıştırılır.
Vagrantfile örnekleri:
Öncelikle Vagrant’ı kurduktan sonra vagrant init
komutla comment satırları ile açıklanmış boş bir Vagrantfile oluşturabilir ve bunu inceleyebilirsiniz. Yine de basit bir kaç vagrant file scriptini buraya yapıştırmakta fayda görüyorum:
Vagrant.configure(2) do |config| config.vm.box = "ubuntu/xenial64" config.vm.network "public_network" config.vm.synced_folder "d:/code", "/code" end
Burada public network kullanarak Vagrant ile oluşturulan guest sistemin bizim ağımızda otomatik olarak ip almasını istedik. synced_folders ile ise kendi sistemimizdeki hangi klasörün sanalda nereye bağlanacağını belirledik. Eğer synced folders kullanmazsan Vagrantfile’ın da bulunduğu ana dizin sanal makinedeki /vagrant
klasörüne bağlanacaktır.
Script dosyaları ile kurulum yapan ayrı bir örnek:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.network "forwarded_port", guest: 8000, host: 8000
config.vm.provision "shell", path: "install_nodejs.sh"
config.vm.provision "shell", path: "install_postgresql.sh"
config.vm.provision "shell", path: "install_python.sh"
...
end
inline olarak script yazmak içinse alttaki formatı kullanabilirsiniz:
config.vm.provision "shell", inline: <<-SHELL sudo apt-get update sudo apt-get install -y apache2 SHELL
Vagrant provider nedir?
Vagrant’ın önemli bir avantajı da arkada kullanılacak sanallaştırma sisteminin soyutlanmasıdır. Hem VmWare hem Virtualbox kullanabilirsiniz. Ama seçenekler bunla da sınırlı değil. Artık bazı cloud firmaları da Vagrant desteği vermeye başladı. Örneğin Vagrant ile arkaplanda Vultr cloud VDS’lerini kullanabilirsiniz. Detaylar için: https://www.vultr.com/docs/using-vultr-as-your-vagrant-provider