Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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


Самостоятельная работа

  1. Автоматизируйте настройку окружения, которую выполняли ранее руками. Проверьте, что на новой виртуальной машине установка всего необходимого выполняется успешно, а окружение идентично.
  2. Запушьте результат на Github

Дополнительные материалы

  1. Настройка окружения в Vagrant
  2. Идемпотентность в shell-скриптах

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»