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:
- base box;
- provider;
- CPU;
- memory;
- network;
- shared folder;
- provisioning;
- hostname;
- multi-machine topology
belgilanadi.
Fayl source code bilan version control’da saqlanishi mumkin.
Box
Box — Vagrant virtual mashina yaratish uchun foydalanadigan tayyor base image.
Box tarkibida:
- operatsion tizim;
- boshlang‘ich user;
- SSH konfiguratsiyasi;
- providerga mos disk;
- metadata
mavjud bo‘ladi.
Box versionlangan va ishonchli manbadan olinadi.
Provider
Vagrant virtualizatsiyani bevosita o‘zi amalga oshirmaydi. U provider orqali ishlaydi.
- 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:
- file permission;
- symlink;
- performance;
- case sensitivity;
- file watcher
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.
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:
- Vagrant versiyasi;
- host OS;
- dependency;
- security
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:
- yengil;
- tez;
- image workflow;
- kernelga bog‘liq.
Loyiha ehtiyojiga qarab ikkalasi ishlatiladi.
CI
Vagrant integration test uchun ephemeral VM yaratishi mumkin.
CI jarayoni:
- VMni yaratadi;
- provisioning qiladi;
- testlarni bajaradi;
- log va artifactni oladi;
- 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:
- publisher;
- checksum;
- version;
- default credential;
- update;
- network exposure;
- provisioning script.
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