Kategori arşivi: Genel

Vagrant 3 : Up ve Provisioning

Bu yazımızda Vagrant’ı nasıl ayağa kaldıracağımızı ve basit bir shell script ile ayağa kaldırdığımız makinemizi nasıl yapılandırdığımızı (provisioning) işleyeceğiz.

İlk olarak komut satırını açıp vagrant init diyoruz. Bu komut ile bulunduğumuz dizinde default bir Vagrantfile oluşturulacaktır. Default oluşturulan bu dosyanın içeriği sizi korkutmasın 🙂 Vagrant ile ilgili kullanılabilecek comment edilmiş ayar komutları bulunuyor.

Baştan bir sanal makina kurulumu yapmak yerine box’ları kullanabiliriz. Box’lar bir hızlı bir şekilde sanal makina klonlamak için kullanılan bir nevi base image şeklinde düşünebiliriz. Bu örnekte Ubuntu 12.04 LTS 32-bit box işletim sistemini kullanacağız. Eğer farklı bir işletim sistemi yüklemek istiyorsanız Atlas.Hashicorp adresinden kullanıma sunulan box’ları inceleyebilirsiniz.

Screen Shot 2015-09-27 at 20.37.11Komut satırından  vagrant box add hashicorp/precise32 komutunu çalıştırıyoruz. Bu komut eğer daha önceden bu box sisteminiz de yoksa bir kereliğine base box’ı download edecektir. Daha sonraki kullanımlarda var olanı kullanacaktır. Her kullanımda orjinal box’ı kullanmak yerine bu orjinal box’ın klonları kullanılacağı için orjinal box’ınız hiçbir şekilde değişikliğe uğramayacaktır.  Base box’ımızı yükledikten sonra Vagrantfile dosyamızı açıp config.vm.box = “hashicorp/precise32”  satırını ekliyoruz. Bu satır ile kullanacağımız box’ı belirtiyoruz.

Şimdi vagrant up komutunu çalıştırıp makinemizi ayağa kaldıralım. Ayağa kaldırdığımız bu makineye vagrant ssh komutu ile tam yetkili bir ssh bağlantısı kuralım. Download işlemini saymazsak full ssh bağlantı yapabildiğimiz bir sanal makineyi saniyeler içerisinde ayağa kaldırmış bulunduk. Dark magic 🙂

Her şey tamam ve güzel. Sanal makine içerisinde herhangi bir işlem yapmam gerektiğinde downloadterminal tabanlı text editoru mu kullanmak zorundayım? Gelişmiş text editorleri dururken terminal ile bu iş biraz daha zahmetli ve sıkıcı. Tam bu noktada imdadımıza sycned folders yetişiyor. synced folders ile herhangi bir dosyayı guest ve host makinelerimiz arasında senkronize edebiliriz. Bunun için guest makinamızda touch /vagrant/senkFile yazıp çalıştıyoruz. Bu komut ile Vagrant, host ve guest makinamızda senkFile adında bir dosya oluşturacaktır. Bu dosya guest ve host arasında senkronize edilecektir.

Son olarak basit bir shell script kullanarak sanal makinemizde Apache web sunucusunu ayağafb0b45015a kaldıralım. Bunun için apache.sh adında bir dosya oluşturup aşağıdaki scripti yazıyoruz içerisine.


#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi

Daha sonra Vagrantfile dosyamıza config.vm.provision :shell, path: “apache.sh”  satırını Screen Shot 2015-09-27 at 21.18.54ekliyoruz. Bu kod ile sanal makinemizi shell script ile provision edeceğimiz söylüyoruz ve script dosyamızın bulunduğu dizini belirtiyoruz.  vagrant reload –provision
komutu ile sanal makinemizi tekrar ayağa kaldıralım. Vagrant ssh yapıp wget 127.0.0.1 komutunu çalıştırıp web sunucumuza istek yapabiliriz. Ve yaptığımız bu istek sonucunda HTTP 200 responsunun geldiğini görürüz.

 

 

EOF

Kaynakça :

https://www.vagrantup.com/

 

Vagrant 2 – Kurulum ve Terminoloji

Vagrant’ın ne olduğu ve ne işe yaradığını bir önceki yazıda bahsetmiştik. Bu yazıda Vagrant’a kısa bir giriş yapacağız.

Vagrant Kurulumu

Vagrant kurulumu oldukça basit. Vagrant için herhangi bir sanal makina provider’ının sisteminizde yüklü olması gerekiyor.  Ücretsiz olduğundan dolayı VirtualBox kullanacağım 🙂 Aşağıdaki adreslerden uygulamarı indirebilirsiniz. Uygulamaları indirip next next ile basitçe yükleyebilirsiniz.virtualbox-logo
Download Vagrant
Download Oracle VM VirtualBox

Yükleme işlemi bittikten sonra Vagrant otomatik olarak kendisini bilgisayarınızın çevre değişkenlerine ekleyecektir. Bunun sayesinden herhangi bir değişiklik yapmadan komut satırınızda vagrat komutlarını çalıştırabilirsiniz.

Terminoloji 

Vagrant ekosisteminde  bazı terminoloji ve konseptlere değinmek gerekiyor.

Öncelikle host machine kendi fiziksel makinamız, guest machine ise makinamıza kurduğumuz sanal makinayi ifade eder.

Boxes  (Kutu)

vagrant_chillingBoxes, Vagrant’ın temel yapı taşıdır. Boxes, Vagrant ortamları için öntanımlı paket formatıdır. Bu paket formatı içerisinde basit işletim sistemi yüklemesi olabileceği gibi birden fazla uygulama yüklemesi de olabilir. Vagrant ortamlarımız bu box dediğimiz kutularda durur. Vagrant ile ayağa kaldırdığımız her bir ortam bir box’a denk gelir.

Base Boxes

Baştan başa bir sanal makina ayağa kaldırmak zahmetli ve sıkıcı bir iştir. Vagrant hızlı bir şekilde sanal makina oluşturmak için base box dediğimiz base image kullanır. Maven’daki  archetype mantığına denk gelir. Aslında box’ların özel bir biçimidir. Sanal bir makina oluşturmak için minimum gereksinimlerin tanımlandığı box’lardır. Örneğin, hızlı bir şekilde Ubuntu Server 14.04 LTS işletim sistemine sahip olan bir sanal bir makina ayağa kaldırmak için ubuntu/trusty64 base box’ını kullanırız. Box list adresinden mevcut box’ları inceleyebilirisiniz.

Providers

Sanallaştırma adına asıl işi yapan kısım burası. Vagrant herhangi bir sanallaştırma işlevi sağlamıyor. Bunun yerine sanallaştırma hizmeti sunan teknolojilerden yararlanır. Vagrant ekosisteminde sanallaştırma işlevi sunan teknolojiler Provider olarak isimlendirilir. VirtualBoxVMWareHyper-V bunlardan birkaçı. Vagrant için default provider VirtualBox’tır.

Provisioners

 

Provisioners ( yapılandırma araçları ) yüklenmiş olan sanal makinada  tanımladığımız taskları chef.puppet.ansibe.saltstack.fabricçalıştıran araçlardır. Sanal sunucuyu yapılandırma, gerekli yazılımların yüklenmesi, sanalmakinada bazı taskların koşturulması gibi işlemleri yapmak için kullanırlar. Vagrant ile Chef, Puppet veAnsible vs.. gibi provisoner araçlarını kullanılabilir. Ayrıca herhangi bir provisioner aracı kullanmadan daha zahmetli olan shell script‘i yapılandırma için kullanabilirsiniz.

Synced Folders

Sycned Folder sayesinde host makinamız ile guet makinamız arasında istediğimiz dosyaları senkronize edebiliriz. Bu sayede kodumuzu host makinamızda geliştirip build/test ve compile işlemlerini guest makinasında yapabiliyoruz.
VagrantChef1Son olarak Vagrantfile dosyasına değinelim. Vagrant ortamımız ile ilgili her türlü bilgi bu dosyada tutulur. Sanal makinenin nasıl konfigure edileceği, yapılandırma işlemleri gibi tanımlamalar bu dosya içerisinde yapılır. Ruby syntax’ına sahiptir. Tanımlamalar o kadar basit ve anlaşılır ki Ruby programlama dilini bilmeden de bu dosyayı istediğimiz şekilde yönetebiliriz. Her
bir box yani proje için bir adet Vagrantfile tanımlanır.

Vagrantfile platform bağımsızdır. Projenin Vagrantfile dosyasına sahip iseniz istediğiniz platformda sanal makinanınız ayağa kaldırabilirsiniz.

 

EOF

Kaynakça :

https://www.vagrantup.com/

 

 

 

Vagrant 1 – Nedir/Neden

Bu yazıda Vagrant teknolojisinin ne işe yaradığını ve ne için kullanmamız gerektiğini işleyeceğiz.

Yazılım projelerinin bağımlılıkları ve karmaşıklıkları her geçen gün artıyor. Bu durum çeşitli problemleri de beraberinde getiriyor. Problemlerin en önemlisi de geliştirme ortamı (work environment).

download


Problem 1:  Yeni başlayan geliştirici

Ekibe yeni dahil olan geliştirici arkadaş için  geliştirme ortamlarının kurulması tam bir işkence. Örneğin, daha önce çalıştığım kurumsal bir firmada geliştirme ortamının kurulumu yaklaşık 2 gün sürmüştü (!). Zaman/kaynak ve motivasyon israfı.

Uygulama kurulumu için bir setup script ya da bir dokümantasyon oluşturabilirsiniz. Fakat bu dosyaların sürekli güncel tutulması gerekir ki bu da bir yazılımcı için gerçekten çok can sıkıcı bir durumdur.

Problem 2: Yeni teknoloji

Her gün onlarca teknoloji araçları ortaya çıkıyor. Yazılımcı bazı durumlarda bu yeni teknolojiyi bilgisayarında test etmek ya da çalıştırmak ister. Fakat yeni deneyeceğimiz bu teknoloji bizim düzgün çalışan geliştirme ortamımızı olumsuz etkileyebilir. Nahoş bir durum.

Problem 3: Çoklu proje

Geliştirdiğimiz birden fazla uygulamayı birbirinden tamamen izole edilmiş bir şekilde ayağa kaldırıp birbiriyle haberleştirmek isteyebiliriz. İzole edilmiş diyorum çünkü uygulamaların local makinada kullandıkları kaynaklar çakışabilir.

Problem 4: … ama lokalimde çalışıyor

Çoğu yazılımcının meslek hayatında çok kere sarfettiği cümle. Yazılımcı olarak bir problemi çözmüş ve proda kodu göndermiş olalım. Bir süre sonra geliştirdiğimiz çözüm prod ortamında  çalışmayabilir. Bunun sebebi ortamların farklılıkları. Prod ile geliştirme ortamları çoğu durumda farklıdır. Ortamlar arasındaki farklılık, problemi doğru bir şekilde gözlemleyip uygun çözüm üretmemize engel olur çoğunlukla.

Yukarıdaki ortamlar üzerine bir kaç problemden bahsettik. Tüm bu problemleri Vagrant ile kolaylıkla çözebiliriz.

vagrant-are-you-still-develop-in-a-nonvirtual-environment-6-638Vagrant Nedir?

Vagrant ; taşınabilir, tek kullanımlık, yeniden üretilebilir ortamlar oluşturmamızı sağlayan,bunun için sanallaştırma (Virtualbox,VMWare vs..) teknolojisinden faydalanan bir sanal makina yöneticisidir.Kolaylıkla yapılandırma teknolojileriyle (Chef,Ansible) konfigure edilebilir.

Uygulamayı bir kere Vagrant’a geçirdikten sonra istediğimiz an, istediğimiz makinada geliştirme ortamımızı çok hızlı bir şekilde oluşturabiliriz. Ortam bağımlılıklarını izole eder. Her yazılımcı klonlanmış prod ortamında kod yazıyor gibi olacak 🙂

say-one-more-time-works-on-my-machine

 

Bir sonraki yazıda Vagrant kurulumu ve Vagrant ile basit bir geliştirme ortamının nasıl kurulacağını göreceğiz.

EOF

Kaynakça :

https://www.vagrantup.com/