Bosh sahifa Wiki Vagrant

Vagrant

Vagrant — virtual development muhitlarini deklarativ konfiguratsiya orqali yaratish va boshqarishga mo‘ljallangan vosita. U virtual mashina providerlari ustida bir xil workflow beradi va loyiha uchun takrorlanuvchi lokal muhit yaratishga yordam beradi.

Vagrant odatda applicationning production orchestration vositasi emas. U developer, test va laboratoriya muhitlarida virtual mashinalarni tez tayyorlash uchun ishlatiladi.

Vagrantfile

Loyiha muhitining asosiy ta’rifi Vagrantfile ichida saqlanadi.

Unda:

belgilanadi.

Fayl source code bilan version control’da saqlanishi mumkin.

Box

Box — Vagrant virtual mashina yaratish uchun foydalanadigan tayyor base image.

Box tarkibida:

mavjud bo‘ladi.

Box versionlangan va ishonchli manbadan olinadi.

Provider

Vagrant virtualizatsiyani bevosita o‘zi amalga oshirmaydi. U provider orqali ishlaydi.

Provider:

  • virtual mashina yaratadi;
  • CPU va memory ajratadi;
  • networkni sozlaydi;
  • diskni boshqaradi;
  • VM lifecycle’ini yuritadi.

Bir Vagrantfile turli provider bilan ishlashi mumkin, ammo providerga xos optionlar farq qiladi.

Asosiy buyruqlar

Keng tarqalgan lifecycle:

  • vagrant up — muhitni yaratish va ishga tushirish;
  • vagrant ssh — VMga kirish;
  • vagrant halt — VMni o‘chirish;
  • vagrant suspend — holatni vaqtincha saqlash;
  • vagrant resume — davom ettirish;
  • vagrant reload — qayta ishga tushirish va konfiguratsiyani yangilash;
  • vagrant destroy — VMni olib tashlash.

Destroy doimiy data’ni ham yo‘qotishi mumkin.

Provisioning

VM yaratilgach package, config va applicationni o‘rnatish provisioning orqali bajariladi.

Provisioner turlari:

Provisioning idempotent bo‘lsa muhit qayta tayyorlanganda natija barqaror bo‘ladi.

Shared folder

Host va guest orasida loyiha fayllari shared folder orqali ko‘rinadi.

Afzalligi — developer host editordan foydalanadi, kod VM ichida ishlaydi.

Kamchiligi:

muammolari bo‘lishi mumkin.

Provider va operatsion tizimga qarab boshqa sync usuli tanlanadi.

Network

Vagrant VM uchun:

sozlay oladi.

Port forwarding misoli:

host:8080 → guest:80

Bridged network VMni lokal tarmoqda alohida qurilma sifatida ko‘rsatishi mumkin.

Multi-machine

Bitta Vagrantfile bir nechta VM yaratishi mumkin.

Masalan:

web
database
load-balancer

Bu distributed system, cluster yoki network laboratoriyasini lokal muhitda sinashga yordam beradi.

Har mashina uchun alohida resource va provisioning belgilanadi.

Environment parity

Vagrant developerlar orasida bir xil OS va dependency versiyasini ta’minlashga yordam beradi.

Bu “mening kompyuterimda ishlaydi” muammosini kamaytiradi.

Biroq production cloud, kernel, network va storage xususiyatlari lokal VMdan farq qilishi mumkin.

Snapshot

Provider qo‘llasa VM snapshot saqlanishi mumkin.

Snapshot:

uchun foydali.

Snapshot backupning to‘liq o‘rnini bosmaydi va providerga bog‘liq.

Plugin

Vagrant plugin orqali yangi provider, command yoki capability qo‘shadi.

Plugin:

bilan mos bo‘lishi kerak.

Noma’lum plugin hostda code bajarishi mumkin.

Box versioning

Box yangilanganda yangi VMlar yangi base holatni oladi.

Mavjud VM avtomatik to‘liq qayta yaratilmasligi mumkin.

Loyiha box versiyasini pin qilib, update’ni nazoratli test qiladi.

Vagrant va container

Vagrant ko‘pincha to‘liq virtual mashina yaratadi.

Container esa host kernelini bo‘lishadi.

VM:

Container:

  • yengil;
  • tez;
  • image workflow;
  • kernelga bog‘liq.

Loyiha ehtiyojiga qarab ikkalasi ishlatiladi.

CI

Vagrant integration test uchun ephemeral VM yaratishi mumkin.

CI jarayoni:

  1. VMni yaratadi;
  2. provisioning qiladi;
  3. testlarni bajaradi;
  4. log va artifactni oladi;
  5. VMni yo‘q qiladi.

Virtualizatsiya mavjudligi va nested virtualization cheklovi hisobga olinadi.

Xavfsizlik

Public box ichida noma’lum service, key yoki zararli package bo‘lishi mumkin.

Tekshiriladi:

Default insecure SSH key faqat lokal boshqaruv modeli uchun ishlatilishi va productionga ko‘chirilmasligi kerak.

Provisioning qayta ishlashi

vagrant provision mavjud VMda provisioningni qayta bajaradi. Agar provision script idempotent bo‘lmasa duplicate user, config satri yoki package amali paydo bo‘lishi mumkin.

Recreate

Base box yoki past darajadagi network sozlamasi o‘zgarganda mavjud VMni patch qilishdan ko‘ra destroy va up orqali qayta yaratish aniqroq bo‘lishi mumkin. Doimiy loyiha data’si host yoki alohida volume’da saqlanadi.

Host resursi

Bir nechta VM host CPU, RAM va diskini tez sarflaydi. Vagrantfile konservativ default beradi, developer zarur bo‘lsa local override ishlatadi. Local override repositoryga qo‘shilmaydi.

Team workflow

Yangi developer repositoryni clone qilib bitta buyruq bilan muhitni yaratishi mumkin. README’da provider, plugin, host talabi va taxminiy resource hajmi ko‘rsatiladi.

Lokal farqlar

Host OS, hypervisor va filesystem farqi sabab bir xil Vagrantfile barcha kompyuterda mutlaqo bir xil performance bermasligi mumkin.

Box cache

Yuklangan boxlar hostda cache qilinadi. Eski va ishlatilmaydigan versiyalar diskni egallashi mumkin, shu sababli cache holati davriy tekshiriladi.

Bog‘liq tushunchalar

Virtual machine, Development environment, Vagrantfile, Box, Provider, Provisioning, Shared folder, Port forwarding, Infrastructure as Code