Vagrant

Теория: Настройка окружения

Помимо унификации и изоляции окружения, 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. Это сделано для удобства разворачивания проекта с нуля. Фактически, мы можем реализовать полную настройку всего окружения одной командой. Так мы получаем автоматизацию настройки проекта внутри виртуальной машины.

Рекомендуемые программы