hostprofi.ru
Подобрать хостинг
Термин·буква V

Vagrant

краткое определение

Vagrant — инструмент управления виртуальными машинами для разработки, создающий воспроизводимые и переносимые dev-окружения. Настройка через Vagrantfile в коде; одна команда vagrant up поднимает готовую VM с установленным ПО.

Vagrant — open-source инструмент HashiCorp для автоматизированного управления виртуальными машинами в разработке. Описывает конфигурацию VM (ОС, ресурсы, проброс портов, provisioning) в файле Vagrantfile на Ruby-подобном DSL. Команда vagrant up создаёт и настраивает VM за несколько минут, vagrant destroy — удаляет. Устраняет проблему «работает на моей машине»: идентичное окружение у всех членов команды.

Типичный Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/jammy64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", ip: "192.168.56.10"
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
    v.cpus = 2
    v.name = "dev-server"
  end
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update -q
    apt-get install -y nginx php-fpm
    systemctl start nginx
  SHELL
end

После vagrant up VM доступна по IP 192.168.56.10, порт 80 VM смаппирован на 8080 хоста. vagrant ssh открывает SSH-сессию без пароля (Vagrant автоматически управляет ключами).

Providers и Provisioners

Vagrant поддерживает несколько типов виртуализации (providers):

  • VirtualBox — бесплатный, по умолчанию. Работает на Windows, macOS, Linux.
  • VMware (Workstation/Fusion) — коммерческий, более быстрый. Требует платного плагина vagrant-vmware-desktop.
  • Hyper-V — встроен в Windows 10/11 Pro, Server.
  • libvirt/KVM — для Linux-разработчиков через vagrant-libvirt. Наибольшая производительность на Linux.
  • Docker — контейнер вместо VM. Только для Linux-гостей.

Provisioners (инструменты настройки внутри VM): Shell-скрипты, Ansible, Chef, Puppet, Salt. Ansible — самый популярный provisioner для сложных конфигураций.

Vagrant Boxes

Vagrant Box — готовый базовый образ VM, хранимый на Vagrant Cloud (app.vagrantup.com). Команда vagrant box add ubuntu/jammy64 скачивает образ (~500 МБ–2 ГБ). Популярные boxes: ubuntu/jammy64 (Ubuntu 22.04), debian/bookworm64 (Debian 12), generic/rocky9 (Rocky Linux 9). Boxes кэшируются локально: повторный vagrant up работает без скачивания.

История

Vagrant создал Митчелл Хашимото (Mitchell Hashimoto) в 2010 году как студенческий проект. В 2012 году основана HashiCorp для коммерциализации — сначала Vagrant, затем Terraform, Vault, Consul, Nomad. Версия 1.0 вышла в 2012 году. В 2023 году HashiCorp изменила лицензию большинства инструментов на BSL (Business Source License), но Vagrant остался под MIT. В 2024 году HashiCorp приобретена IBM за $6,4 млрд.

Vagrant vs Docker Dev Containers

Docker Dev Containers (VS Code Remote) в 2023–2024 годах вытеснил Vagrant во многих сценариях разработки: контейнеры запускаются за секунды против минут для VM, потребляют меньше ресурсов. Однако Vagrant незаменим для тестирования изменений на уровне ОС: ядро, init-система (systemd), сетевые драйверы, RAID-конфигурации. На VM можно тестировать Kickstart-скрипты, Ansible-плейбуки и конфигурацию Nginx в точном соответствии с production-сервером, включая то же ядро и init-систему.

Multi-machine конфигурация

Vagrant позволяет описать несколько связанных VM в одном Vagrantfile — например, имитация production-стека с веб-сервером, базой данных и балансировщиком:

Vagrant.configure("2") do |config|
  config.vm.define "db" do |db|
    db.vm.box = "ubuntu/jammy64"
    db.vm.network "private_network", ip: "192.168.56.11"
  end

  config.vm.define "web" do |web|
    web.vm.box = "ubuntu/jammy64"
    web.vm.network "private_network", ip: "192.168.56.10"
    web.vm.network "forwarded_port", guest: 80, host: 8080
  end
end

Оба хоста запускаются командой vagrant up. Это позволяет тестировать многоуровневую архитектуру: репликацию PostgreSQL, кластер Nginx + backend, конфигурацию NFS-хранилища.

Другие термины