Vagrantfile, получает базовый образ — box — и поручает создание виртуальной машины выбранному provider. Повторяемый стенд получается, когда в проекте зафиксированы доступная версия box, настройки VM, сеть и provisioning, а также документированы версии Vagrant, provider и внешние источники сценариев.Что делает Vagrant и чем он отличается от гипервизора
Vagrant — это CLI-инструмент управления средой, а не гипервизор. Он читает Vagrantfile, скачивает или использует локальный box, вызывает provider для создания VM, передаёт ему параметры и запускает подготовку гостевой системы. Само выполнение гостевого кода, виртуальные процессоры, память, диски и сеть предоставляет provider и лежащий под ним продукт виртуализации.
| Компонент | Роль |
|---|---|
| Vagrant | Описывает и оркестрирует жизненный цикл VM: up, halt, reload, destroy, provisioning. |
| Provider | Адаптер Vagrant к конкретной платформе виртуализации; принимает provider-specific параметры из Vagrantfile. |
| VirtualBox | Настольный гипервизор и распространённый локальный provider для Vagrant. |
| VMware Workstation | Настольный гипервизор; для управления из Vagrant применяется VMware provider и его компоненты. |
| Box | Распространяемый базовый образ для конкретного provider, архитектуры и гостевой ОС. |
Поэтому Vagrant не заменяет VirtualBox, VMware Workstation, Hyper-V, KVM/libvirt или серверную платформу. О различиях гипервизоров и уровнях виртуализации читайте в статье «Гипервизоры и типы виртуализации: Type 1, Type 2, полная и паравиртуализация».
Подготовьте хост и выберите provider
До создания проекта установите Vagrant для своей поддерживаемой хостовой ОС и один выбранный provider со всеми требуемыми компонентами. Набор поддерживаемых ОС, встроенных providers и дополнительные зависимости зависят от релиза Vagrant, provider и хостовой ОС: сверяйте матрицу совместимости в официальной документации Vagrant и документации provider.
- VirtualBox: установлены Vagrant и совместимый VirtualBox. Для первого стенда обычно достаточно встроенного provider
virtualbox. - VMware Workstation: установлены Vagrant, совместимый VMware Workstation и компоненты VMware provider для Vagrant. В зависимости от актуального выпуска это может включать отдельный плагин и служебный компонент; совместимость и лицензионные условия проверяют по документации Vagrant и VMware.
- Другой provider: кроме Vagrant могут потребоваться отдельный плагин, локальная служба, API-доступ, драйверы или системные пакеты. Например, работа с KVM/libvirt относится к отдельному стеку; его подготовка описана в статье «KVM, QEMU и libvirt в Linux: установка, VM, virsh и Guest Agent».
vagrant --versionВ выводе должна быть установленная версия Vagrant. Если команда не найдена, проверьте установку программы и переменную PATH.vagrant plugin listКоманда выводит установленные плагины, но не перечисляет все доступные providers: встроенный provider, наприме р VirtualBox, может отсутствовать в списке. Фактическую доступность выбранного provider проверьте после создания проекта явной командой `vagrant up --provider=имя_provider`; при ошибке проверьте продукт виртуализации, плагин, служебные компоненты и совместимость версий.Не смешивайте providers в одном первом запуске
Выберите box, совместимый с provider
Box — не универсальный файл виртуального диска. Это пакет с метаданными и файлами, подготовленный для определённого provider. В метаданных каталога box обычно указываются версии box, варианты provider, архитектуры, URL загрузки и контрольные суммы. Один издатель может публиковать отдельные варианты одного образа для virtualbox, VMware и других платформ — либо не публиковать нужный вариант вовсе.
- Выберите издателя box и проверьте в его карточке или документации поддерживаемую гостевую ОС, архитектуру, provider и условия использования.
- Выберите версию box, которая существует для нужного provider, и зафиксируйте её в
Vagrantfileчерезconfig.vm.box_version. - Проверьте, что образ предназначен для вашей архитектуры хоста и поддерживает нужный способ доступа, например SSH для Linux-гостя.
- Сверьте лицензию box и лицензионные условия гостевой ОС отдельно. Разрешение на загрузку одного образа не означает право распространять, модифицировать или использовать другой образ либо другую редакцию ОС.
Не рассчитывайте на переносимость box
Создайте каталог проекта и минимальный Vagrantfile
Ниже — сквозной пример для virtualbox. Сначала выберите существующие имя и версию box, затем замените ими значения publisher/box и required-box-version непосредственно в Vagrantfile. Значения CPU и памяти в примере также скорректируйте с учётом ресурсов хоста и требований гостевой ОС. Команды записаны для POSIX-совместимой оболочки; в PowerShell используйте эквивалентные команды создания каталога и перехода в него.
Первый воспроизводимый стенд на VirtualBox
В результате появится одна VM с отдельными именами на уровне Vagrant, гостевой ОС и VirtualBox.
- 1Выберите параметры проектаПодберите существующие имя и версию box для VirtualBox. Определите имя машины Vagrant, hostname гостя, отображаемое имя VM, число vCPU и объём памяти с учётом ресурсов хоста и требований гостевой ОС.
- 2Создайте проект и начальный VagrantfileКоманда
vagrant initсоздаёт файлVagrantfile. Замените его конфигурацией из следующего блока, подставьте выбранные имя и версию box и при необходимости измените ресурсы. Конфигурация явно задаёт provider, сеть, политику общей папки и provisioning. - 3Проверьте синтаксисЗапустите
vagrant validate. Успешная проверка подтверждает синтаксис Vagrantfile, но не наличие box, совместимость provider или возможность запуска VM.
mkdir vagrant-lab
cd vagrant-lab
vagrant initVagrant.configure("2") do |config|
config.vm.define "lab" do |lab|
# Замените значения на существующий box и его версию для VirtualBox.
lab.vm.box = "publisher/box"
lab.vm.box_version = "required-box-version"
lab.vm.hostname = "lab-guest"
# Частная сеть с адресом, выделяемым механизмом provider.
lab.vm.network "private_network", type: "dhcp"
# Для минимального стенда общая папка отключена явно.
# Включайте её только поддерживаемым выбранным provider способом.
lab.vm.synced_folder ".", "/vagrant", disabled: true
lab.vm.provider "virtualbox" do |vb|
vb.name = "lab-virtualbox"
vb.cpus = 2
vb.memory = 2048
end
lab.vm.provision "shell", inline: <<-SHELL
set -eu
install -d -m 0755 /opt/lab
printf '%s\n' 'provisioned-by-vagrant' > /opt/lab/marker
chmod 0644 /opt/lab/marker
SHELL
end
endvagrant validateОжидаемый результат — сообщение, что Vagrantfile валиден. Если команда сообщает об ошибке, исправьте имя переменной, кавычки или структуру Ruby-конфигурации и повторите проверку.В примере три имени решают разные задачи. config.vm.define задаёт имя машины в Vagrant: оно используется в командах вроде vagrant up lab. config.vm.hostname задаёт hostname внутри Guest OS. vb.name задаёт отображаемое имя объекта VM в VirtualBox. Они могут совпадать, но это не одно и то же.
Provider-specific параметры
config.vm.provider "virtualbox" настраивает VirtualBox, но сам по себе не всегда выбирает provider для запуска. Выбор делайте явно через vagrant up --provider=virtualbox или поддерживаемую вашей версией Vagrant переменную VAGRANT_DEFAULT_PROVIDER. Имена параметров CPU, памяти, сети и shared folders, как и доступные режимы, зависят от provider, его версии и хостовой ОС. Сверяйте их с официальными руководствами Vagrant и выбранного provider.Запустите VM и управляйте её жизненным циклом
Первый up при необходимости скачает box, создаст VM через VirtualBox, применит конфигурацию и выполнит provisioning. Явный параметр --provider исключает случайный выбор другого доступного provider.
vagrant up lab --provider=virtualboxОжидаемый результат — завершение создания VM и статус `running`. При ошибке загрузки проверьте имя, версию и provider box; при ошибке создания — доступность VirtualBox, аппаратной виртуализации и достаточность ресурсов хоста.vagrant statusПосле успешного запуска для `lab` ожидается состояние `running`. Статус `not created` означает, что VM ещё не создана или была удалена; при другом provider укажите его явно при следующем `up`.vagrant ssh labПосле подключения проверьте `hostname` и наличие файла `/opt/lab/marker`. Если SSH недоступен, сначала убедитесь в `vagrant status`, затем проверьте, что box поддерживает SSH и provisioning завершился без ошибки.hostname
cat /opt/lab/marker
nprocДля гостевых ОС без SSH способ подключения зависит от communicator и возможностей конкретного provider. Не подменяйте эту проверку попыткой подключиться по случайному IP: используйте способ, предусмотренный выбранным box и конфигурацией Vagrant.
| Задача | Команда | Результат |
|---|---|---|
| Остановить VM штатно | vagrant halt lab | VM выключена, её файлы и конфигурация сохранены. |
| Применить изменённые настройки с перезапуском | vagrant reload lab | Vagrant перезапускает VM и передаёт изменённую конфигурацию provider. |
| Повторно выполнить provisioning | vagrant provision lab | Vagrant запускает provisioners вне зависимости от того, выполнялись ли они при первом up. |
| Перезапустить и применить provisioning | vagrant reload lab --provision | VM перезапускается, затем выполняется provisioning. |
| Удалить VM | vagrant destroy lab | Vagrant запросит подтверждение и удалит созданную VM. |
| Создать заново после удаления | vagrant up lab --provider=virtualbox | VM создаётся из зафиксированного box и текущего Vagrantfile. |
Destroy удаляет VM
vagrant destroy удаляет виртуальную машину, созданную provider, и её виртуальные диски в рамках этого стенда. Не храните в такой VM единственную копию важных данных. Перед удалением сохраните нужные результаты за пределами VM или используйте согласованный механизм резервного копирования.Добавьте shell provisioning без секретов
Provisioning автоматически подготавливает гостевую ОС после создания. В примере выше shell-сценарий создаёт каталог и файл-маркер; повторный запуск приводит к тому же результату. Это пример идемпотентности: скрипт можно применить повторно без накопления дубликатов и без требования ручной очистки.
Shell provisioning по умолчанию обычно выполняется при первом создании машины. Команда vagrant provision запускает его повторно, а vagrant up --provision и vagrant reload --provision позволяют совместить операцию с повторным применением. Идемпотентность не обеспечивается Vagrant автоматически: её должен реализовать автор сценария. Полную настройку ОС, контейнерной среды или приложений следует вести в профильных материалах, а не переносить в один большой Vagrantfile.
Не записывайте секреты в Vagrantfile
Vagrantfile, inline shell-скрипты и историю команд. Передавайте их через утверждённое хранилище секретов, защищённые переменные CI/CD или локальный исключённый файл по правилам команды. Не выводите секреты в журнал provisioning.Храните описание стенда как код
Добавьте Vagrantfile, отдельные сценарии provisioning и документацию с версиями в систему контроля версий. Каталог .vagrant содержит локальное состояние конкретного развёртывания и обычно не нужен другим участникам проекта. Также исключайте секреты и локальные переопределения согласно принятой политике команды.
.vagrant/
.env
*.local
secrets/Фиксация Vagrantfile не делает окружение полностью неизменным сама по себе. На результат также влияют релизы Vagrant и provider, версия и содержимое box, версия VirtualBox или VMware Workstation, плагины, обновления гостевой ОС, репозитории пакетов, DNS и другие внешние источники provisioning. Запишите эти зависимости в README проекта или в принятом реестре зависимостей; при необходимости сохраняйте проверенные артефакты и контрольные суммы в разрешённом внутреннем хранилище.
Особенности VMware Workstation и других providers
Для VMware Workstation нельзя просто заменить в команде сло во virtualbox на vmware_desktop. Нужны совместимые Vagrant, VMware Workstation и VMware provider, а также VMware box, опубликованный для этого provider. Provider-specific блок в Vagrantfile будет иным: параметры отображаемого имени VM, ресурсов, сети и shared folders определяются документацией VMware provider.
- До запуска через VMware проверьте текущий способ интеграции с Vagrant: требуемый плагин, служебные компоненты, поддерживаемые версии Workstation и Vagrant.
- Проверьте лицензионные условия VMware Workstation, VMware provider и выбранного box для вашей редакции, региона и сценария использования. Условия поставки и доступные права меняются, поэтому их нельзя выводить из старых инструкций или условий другого продукта.
- Явно укажите provider при запуске, например
vagrant up lab --provider=vmware_desktop, только если именно такое имя provider указано в актуальной документации установленного компонента. - Не переносите без проверки параметры VirtualBox, включая
vb.name, в VMware provider: это разные интерфейсы конфигу рации.
Установка VirtualBox, VMware Workstation и создание первой VM через их графический интерфейс рассмотрены отдельно в статье «VirtualBox и VMware Workstation для лаборатории: выбор и первая VM». Названия разделов интерфейса, статусов и настроек у providers зависят от продукта, версии и хостовой ОС; сверяйте действия с официальным руководством выбранного provider.
Практическая проверка готового стенда
- Выполните
vagrant statusи убедитесь, что Vagrant-машинаlabимеет статусrunning. - Подключитесь предусмотренным методом: для Linux box из примера —
vagrant ssh lab. Внутри гостя выполнитеhostnameи проверьте ожидаемый hostname. - Проверьте маркер provisioning:
cat /opt/lab/markerдолжен вывестиprovisioned-by-vagrant. - Проверьте выделенные ресурсы средствами гостевой ОС и сопоставьте их со значениями
vb.cpusиvb.memoryвVagrantfile, учитывая возможные различия в отображении со стороны ОС. - Откройте VirtualBox и убедитесь, что объект VM отображается под именем
lab-virtualbox, заданным черезvb.name. - Выполните
vagrant halt lab, затем сноваvagrant up lab --provider=virtualboxи проверьте, что машина остановилась и снова запустилась без ошибок. - Если стенд больше не нужен, выполните
vagrant destroy labи подтвердите удаление. Затемvagrant statusдолжен показать, что машина не создана.
Локальная виртуализация для разработки, тестирования и лаборатории через Vagrant удобна именно как повторяемая среда на одном хосте. Она не заменяет проектирование серверной виртуальной инфраструктуры, отказоустойчивость, резервное копирование, мониторинг и эксплуатационные процессы. Для производственного уровня ориентируйтесь на статью «Как спроектировать виртуальную инфраструктуру для продакшена и 1С».
Термины в статье
- Виртуализация
- Технология абстрагирования физических вычислительных ресурсов, позволяющая создавать виртуальные серверы, хранилища, сети и другие логические ресурсы.
- Виртуальная машина
- Изолированная вычислительная среда с виртуальными процессорами, памятью, дисками и сетевыми адаптерами, в которой под управлением гипервизора работает гостевая ОС.
- Виртуальное оборудование
- Виртуальное оборудование — логическая аппаратная платформа, которую гипервизор предоставляет ВМ: виртуальные процессоры, память, устройства и системную прошивку.
- Гипервизор
- Программный слой, который абстрагирует ресурсы физического хоста, выполняет виртуальные машины и управляет ими.
- Имя хоста
- Имя хоста — идентификатор узла в сети и операционной системе, используемый для отображения, журналирования и разрешения имени в IP-адрес при наличии DNS или hosts.
- Командная оболочка
- Командная оболочка — программа-интерпретатор, принимающая команды и запускающая процессы; в отличие от терминала, она обрабатывает синтаксис и сценарии.
- Репозиторий пакетов
- Репозиторий пакетов — структурированный источник пакетов и метаданных, из которого менеджер пакетов получает версии ПО, зависимости, обновления и информацию о подписях.
- Cloud-Init
- Cloud-Init — система начальной настройки облачных экземпляров, применяющая метаданные и пользовательские данные при первом запуске виртуальной машины.
- Guest OS
- Операционная система, установленная в виртуальной машине и работающая под управлением гипервизора; не следует путать с хостовой ОС гипервизора типа 2.
- Hyper-V
- Платформа виртуализации Microsoft с гипервизором типа 1, доступная как роль Windows Server и компонент Windows 10/11 Pro, Enterprise и Education.
- KVM
- Подсистема аппаратной виртуализации ядра Linux, предоставляющая пользовательским мониторам ВМ, обычно QEMU, интерфейс для запуска изолированных виртуальных машин.
- libvirt
- libvirt — открытый набор библиотек, API, служб и утилит для унифицированного управления ВМ, контейнерами, сетями и хранилищами на платформах виртуализации.
- SSH
- SSH — криптографический сетевой протокол для удалённого доступа и передачи данных, аутентифицирующий стороны и защищающий сеанс от перехвата.
- Vagrant
- Vagrant — CLI-инструмент для воспроизводимого создания, настройки и управления средами разработки с помощью Vagrantfile и подключаемых провайдеров.
- vCPU
- vCPU — виртуальный логический процессор, предоставляемый виртуальной машине; гипервизор планирует его выполнение на процессорных ресурсах хоста.
- VirtualBox
- Oracle VirtualBox — кроссплатформенный гипервизор типа 2 для локального запуска ВМ на Windows, macOS, Linux и Oracle Solaris; базовый пакет открыт и доступен бесплатно.
- VMware
- VMware — бренд Broadcom и семейство продуктов виртуализации; серверная платформа vSphere объединяет гипервизор ESXi и средства управления vCenter Server.
- VMware Workstation
- VMware Workstation Pro — гипервизор типа 2 для создания и запуска виртуальных машин на компьютерах с Windows и Linux, преимущественно для разработки, тестирования и лабораторий.
