Vagrant Nedir

Değiştirilemez yapılar kurmak bizi bir çok dertten kurtara bilir mi ?

Yazılım geliştiriciler kodlarını yazar. Kendi ortamlarında test ederler.
Ardından bu kodu biri veya birileri test ederler. Ve genel de bizde çalışan
onlarda çalışmaz 🙂

Bu gibi durumların çok olası olduğu aşikardır.
Bu tarz durumları ortadan kaldırabilmek için iki kişinin de
test ortamı fiziksel olarak olmasa bile yazılımsal ve mantıksal
olarak aynı ortamlar yapabiliriz. Nasıl mı ?

Bir kutu düşünün ve kutu içerisine yazılımcıların geliştirmeleri mevcut.
Eğer test edecek kişiye de aynı kutunun tam bir kopyasını sunabilseydik
ve hatta canlı ortamda bile bu kutunun bir kopyasını kullanabilseydik
ne kadar güzel olurdu bir düşünelim ?

Değiştirilemez yapılar(immutable infrastructure) kurmak bize
istediğimiz bir an,
istediğimiz bir yerde,
istediğimiz bir versiyondaki kodu çalıştırabilmemize olanak sağlıyor.

A ve B versiyonlarına sahip kodlarımızı ayrı ayrı sanal makinalar
içerisine koyduğumuzu düşünelim. Önlerinde de bir yük dengeleyici (load balancer)
olsun.
Gelen istek trafiğini A yerine yeni versiyon olan B ye yönlendirelim. İşte en güzel an. İstediğimizi an trafiği A ya tekrar yönlendirebiliriz çünkü önceki alt yapımız yani A hala
hala elimizde mevcut olduğundan geri dönülebilirliği garantilemiş olduk.
Bu aracın asıl amacı canlı ortamda kullanılmak değil geliştirme ve test ortamlarında kullanmak içindir.

Herşey güzel birazcık terimlerden bahsedelim.

Türkçe de Vagrant kelimesi Göçebe olarak anlandırılıyor.

Peki amaç nedir ? Vagrant geliştirme ortamının sanallaştırılaması için gereken ayarları tutup, standart hale getirip kullanıyoruz. Tek bir dosya yardımı ile kurulum yapılan işleri ortak noktada toplayarak aynı ayar kümesi ile istenildiğinde oluşturabiliyor.
Ekibe yeni birisi katıldı. Sadece bu ayar dosyasına erişerek tüm geliştirme ortamını kurabilir.

Peki bu ürünü neden öğrenelim ki ?

Aslında burada vagrant ile yapılan tüm adımları kendimiz de yapabiliriz. Zaten işlerin hepsini aradaki hypervisor  yani sanal makinaların işletim sistemi üzerinde çalıştırılabilmesini sağlayan yapı sağlıyor.
Fakat herkes aynı işi yaparken aynı şekilde yapmayabilir. Vagrant tüm işlerin ortak bir konfigürasyon dosyası ile yönetilmesine olanak sağlıyor.

 

 

Uygulamanın sitesini gidip bilgisayarımıza kurabiliriz.

https://www.vagrantup.com

Tabi vagrant kullanabilmek için bir sanallaştırma aracı (hypervisor)
kullanmak gerekiyor. VMware Server,VirtualBox vb.

Uygulamanın sitesini gidip bilgisayarımıza kurabiliriz.

https://www.virtualbox.org

Örneğimizi açıklayalım.
Bir işletim sistemi kurup içerisine java yükleme adımlarını otomatikleştireceğiz.

Siz bu durumu istediğiniz kadar genişletebilirsiniz.(git yüklemek,kodu çekmek,geliştirici
araçlarını yüklemek eclipse,phpstorm vb. winrar benzeri araçlar kurmak vb. )

Hazır imajları bulabileceğimiz vagrant bize sağladığı bir site mevcut. Bir çok kişinin
hazırladığı bu tarz ortamlardan birini indirip kullabiliriz.

https://vagrantcloud.com

Ve ya biz kendimiz yapıp oraya koyup daha sonra kullanabiliriz.

https://www.vagrantup.com/docs/vagrant-cloud/api.html#create-a-box

Ben hazır bir imaj üzerinden ilerleyeceğim.
İşletim sistemi olarak Alpine kullanacağım.

https://app.vagrantup.com/alpine/boxes/alpine64

Hemen çalışma ortamımıza gidelim.

$ /home/user/workarea

$ mkdir vagrant-alpine64

$ cd vagrant-alpine64/
$ vagrant init alpine/alpine64

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.

Şuan sadece ayarların bulunduğu bir dosya indirmiş olduk hemen bakalım.

$ ls
Vagrantfile

Dosya içeriğine bakalım.

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.

# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "alpine/alpine64"

# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.

# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.

config.vm.provision "shell", inline: <<-SHELL
    #   apt-get update
    #   apt-get install -y apache2
     apk add git
     SHELL
end

Bu dosyaya ek olarak işletim sistemi kurulumundan sonra git uygulamasının
kurulu gelmesini istediğimden şu komutu ekliyorum.

Işletim sisteminin paket yöneticisine uygun olacak şekilde eklememi yapıyorum.
Burada apk kullanılıyor.

apk add git

Eklemelerimizi yaptıktan sonra

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'alpine/alpine64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'alpine/alpine64' is up to date...
==> default: Setting the name of the VM: vagrant-alpine64_default_1544821894284_52624
==> default: Vagrant has detected a configuration issue which exposes a
==> default: vulnerability with the installed version of VirtualBox. The
==> default: current guest is configured to use an E1000 NIC type for a
==> default: network adapter which is vulnerable in this version of VirtualBox.
==> default: Ensure the guest is trusted to use this configuration or update
==> default: the NIC type using one of the methods below:
==> default: 
==> default:   https://www.vagrantup.com/docs/virtualbox/configuration.html#default-nic-type
==> default:   https://www.vagrantup.com/docs/virtualbox/networking.html#virtualbox-nic-type
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 5.1.30 r118389
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /workarea/vagrant-alpine64
==> default: Running provisioner: shell...
    default: Running: inline script
    default: fetch http://nl.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
    default: fetch http://nl.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
    default: fetch http://nl.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
    default: (1/9) Installing libcrypto1.1 (1.1.1a-r0)
    default: -2.6.4-r0.
    default: (2/9) Installing ca-certificates (20180924-r1)
    default: (3/9) Installing nghttp2-libs (1.34.0-r0)
    default: (4/9) Installing libssh2 (1.8.0-r4)
    default: (5/9) Installing libssl1.1 (1.1.1a-r0)
    default: (6/9) Installing libcurl (7.62.0-r2)
    default: (7/9) Installing expat (2.2.6-r0)
    default: (8/9) Installing pcre2 (10.32-r0)
    default: (9/9) Installing git (2.19.2-r0)
    default: Executing busybox-1.27.2-r8.trigger
    default: Executing ca-certificates-20180924-r1.trigger
    default: 1 error; 130 MiB in 60 packages
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.


Virtual Box uygulamasını açarsak sanal makinanın çalışır durumda olduğunu göreceğiz.

Kullanıcı adımızı log lardan görebiliriz.

 username vagrant

Ardından terminali açıp git uygulamasının yüklendiğini kontrol ediyoruz.

git version

yazıyoruz. Uygulamamızın yüklendiğini görüyoruz.  Artık kullanıma hazırdır.

Biraz diğer komutlara değinelim.

Sanal makinamızın durumunu öğrenmek için

$ vagrant status

Kendi bilgisarımızdan sanal makinaya terminal üzerinden erişmek için

$ vagrant ssh

Terminalden sanal makinamızı kapatmak için

$ vagrant halt --force

Var olan sanal işletim sistemine bir şey yüklemek için tabi ki sanal makine içindeki kendi terminalini kullanabiliriz. Fakat burada işi vagrant tarafından yönetmek istiyoruz.

git için yapılanlara benzer şekilde yapabiliriz. Artından aşağıdaki komutu çalıştırmalıyız.

$ vagrant provision
$ vagrant up

Teşekkürler, Iyi çalışmalar 🙂

Devops kategorisinde yayınlandı

Yorum bırakın