Помимо унификации и изоляции окружения, Vagrant позволяет автоматизировать настройку виртуальной машины под конкретный проект. Что сюда входит? Обычно для работы проекта нужно поставить базу данных, зависимости, возможно системные пакеты и тому подобное. Все это можно делать самостоятельно после vagrant ssh
, но лучше воспользоваться готовыми возможностями самого Vagrant.
Здесь стоит сказать, что Vagrant позволяет выполнять настройку большим количеством способом среди которых есть несколько наиболее удобных и распространенных. О них и поговорим.
Shell
По простому мы можем попросить Vagrant выполнить shell-скрипт при запуске виртуальной машины:
Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "script.sh"
end
Скрипт script.sh должен лежать в корне проекта, там же где и Vagrantfile:
# здесь набор команд для настройки виртуальной машины, например:
apt-get install -yq postgresql
# установка зависимостей для Node.JS проекта
npm install
Затем нужно выполнить команду vagrant provision
. Она возмет файл script.sh и запустит его внутри виртуальной машины:
vagrant provision
==> default: Running provisioner: shell...
default: Running: /tmp/vagrant-shell20211217-107284-behm38.sh
default: Reading package lists...
default: Building dependency tree...
default: Reading state information...
default: The following additional packages will be installed:
default: libcommon-sense-perl libjson-perl libjson-xs-perl libllvm11 libpq5
default: libsensors-config libsensors5 libtypes-serialiser-perl postgresql-13
default: postgresql-client-13 postgresql-client-common postgresql-common ssl-cert
default: sysstat
default: Suggested packages:
default: lm-sensors postgresql-doc postgresql-doc-13 isag
default: The following NEW packages will be installed:
default: libcommon-sense-perl libjson-perl libjson-xs-perl libllvm11 libpq5
default: libsensors-config libsensors5 libtypes-serialiser-perl postgresql
default: postgresql-13 postgresql-client-13 postgresql-client-common
default: postgresql-common ssl-cert sysstat
default: 0 upgraded, 15 newly installed, 0 to remove and 0 not upgraded.
default: Need to get 36.9 MB of archives.
default: After this operation, 133 MB of additional disk space will be used.
...
# Вывод довольно длинный. Но тут видно что происходит тоже самое,
# если бы мы устанавливали PostgreSQL в Ubuntu
Запуск скрипта произойдет и при выполнении команды vagrant up
. Это сделано для удобства разворачивания проекта с нуля. Фактически, мы можем реализовать полную настройку всего окружения одной командой. Так мы получаем автоматизацию настройки проекта внутри виртуальной машины.
Самостоятельная работа
- Автоматизируйте настройку окружения, которую выполняли ранее руками. Проверьте, что на новой виртуальной машине установка всего необходимого выполняется успешно, а окружение идентично.
- Запушьте результат на Github
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.