0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><em>Vagrant - продукт компании HashiCorp, специализирующейся на инструментах для автоматизации разработки и эксплуатации. Он позволяет создавать и конфигурировать легковесные, повторяемые и переносимые окружения для разработки.</em></p>
1
<p><em>Vagrant - продукт компании HashiCorp, специализирующейся на инструментах для автоматизации разработки и эксплуатации. Он позволяет создавать и конфигурировать легковесные, повторяемые и переносимые окружения для разработки.</em></p>
2
<p>Первая задача любого разработчика на новом проекте - развернуть окружение. Как правило, она сводится к следующим шагам:</p>
2
<p>Первая задача любого разработчика на новом проекте - развернуть окружение. Как правило, она сводится к следующим шагам:</p>
3
<ol><li>Клонировать репозиторий с проектом.</li>
3
<ol><li>Клонировать репозиторий с проектом.</li>
4
<li>Поставить необходимые пакеты для работы (например, библиотеку для xml).</li>
4
<li>Поставить необходимые пакеты для работы (например, библиотеку для xml).</li>
5
<li>Установить дополнительные программы, такие как базу данных.</li>
5
<li>Установить дополнительные программы, такие как базу данных.</li>
6
<li>Правильно настроить конфигурационные параметры.</li>
6
<li>Правильно настроить конфигурационные параметры.</li>
7
</ol><p>Без автоматизации подобный процесс может занимать как часы, так и целые дни, в зависимости от сложности проекта. Причем, для каждого человека в команде. Для каждой смены рабочей машины или после переустановки системы. Проблема усугубляется тем, что чем больше разработчиков на проекте, тем более разнообразные машины они используют, включая разные операционные системы. В подобном случае процесс настройки гарантированно будет разным, что является еще одним источником проблем. Весь процесс настройки должен быть где-то описан, но, как правило, эти описания быстро устаревают и их мало кто хочет поддерживать, а любые попытки поддерживать актуальность в конце концов угасают.</p>
7
</ol><p>Без автоматизации подобный процесс может занимать как часы, так и целые дни, в зависимости от сложности проекта. Причем, для каждого человека в команде. Для каждой смены рабочей машины или после переустановки системы. Проблема усугубляется тем, что чем больше разработчиков на проекте, тем более разнообразные машины они используют, включая разные операционные системы. В подобном случае процесс настройки гарантированно будет разным, что является еще одним источником проблем. Весь процесс настройки должен быть где-то описан, но, как правило, эти описания быстро устаревают и их мало кто хочет поддерживать, а любые попытки поддерживать актуальность в конце концов угасают.</p>
8
<p>После добавления пары таких проектов операционная система становится сильно захламленной. Даже если вы не работаете над проектом, после включения компьютера начнут стартовать сервисы, которые требуются только для разработки.</p>
8
<p>После добавления пары таких проектов операционная система становится сильно захламленной. Даже если вы не работаете над проектом, после включения компьютера начнут стартовать сервисы, которые требуются только для разработки.</p>
9
<p>Еще одна проблема - изменения. Практически любая перенастройка установленной конфигурации потребует ручного вмешательства, доустановки пакетов, программ или изменения конфигов.</p>
9
<p>Еще одна проблема - изменения. Практически любая перенастройка установленной конфигурации потребует ручного вмешательства, доустановки пакетов, программ или изменения конфигов.</p>
10
<p>И последнее: нередко требуется возможность развернуть проект и для не программистов, например верстальщиков или тестировщиков. Наличие даже хорошо описанного процесса установки мало им поможет.</p>
10
<p>И последнее: нередко требуется возможность развернуть проект и для не программистов, например верстальщиков или тестировщиков. Наличие даже хорошо описанного процесса установки мало им поможет.</p>
11
<p>Теперь можно попробовать сформулировать требования к идеальному окружению:</p>
11
<p>Теперь можно попробовать сформулировать требования к идеальному окружению:</p>
12
<ol><li>Изолированность. Таким образом избегаются возможные конфликты с другими окружениями (например, основной системой) и основная система остается чистой.</li>
12
<ol><li>Изолированность. Таким образом избегаются возможные конфликты с другими окружениями (например, основной системой) и основная система остается чистой.</li>
13
<li>Повторяемость. Пересоздать рабочую среду можно за считанные минуты набрав буквально одну команду. Любое изменение распространяется сразу для всех.</li>
13
<li>Повторяемость. Пересоздать рабочую среду можно за считанные минуты набрав буквально одну команду. Любое изменение распространяется сразу для всех.</li>
14
<li>Переносимость. Окружение разворачивается под любой системой одним универсальным способом.</li>
14
<li>Переносимость. Окружение разворачивается под любой системой одним универсальным способом.</li>
15
</ol><p>Vagrant создан для решения именно этих задач. Во многом его работа опирается на виртуализацию, для которой, по умолчанию, используется продукт<a>VirtualBox</a>.</p>
15
</ol><p>Vagrant создан для решения именно этих задач. Во многом его работа опирается на виртуализацию, для которой, по умолчанию, используется продукт<a>VirtualBox</a>.</p>
16
<p>Но в отличие от обычной работы с виртуальной машиной, когда внутри нее стоит система с графической оболочкой, Vagrant создает виртуальную машину доступную только в терминальном режиме (через командную строку), при этом сама разработка продолжается на хост-машине, а вот запуск кода на выполнение происходит внутри машины. Другими словами, редактор ставится на вашу основную систему и код лежит также в ней. Vagrant прозрачно прокидывает код внутрь машины и позволяет его запускать.</p>
16
<p>Но в отличие от обычной работы с виртуальной машиной, когда внутри нее стоит система с графической оболочкой, Vagrant создает виртуальную машину доступную только в терминальном режиме (через командную строку), при этом сама разработка продолжается на хост-машине, а вот запуск кода на выполнение происходит внутри машины. Другими словами, редактор ставится на вашу основную систему и код лежит также в ней. Vagrant прозрачно прокидывает код внутрь машины и позволяет его запускать.</p>
17
<h2>Подготовка к работе</h2>
17
<h2>Подготовка к работе</h2>
18
<p>Использование Vagrant подразумевает некоторую настройку операционной системы и наличие определенных знаний:</p>
18
<p>Использование Vagrant подразумевает некоторую настройку операционной системы и наличие определенных знаний:</p>
19
<ul><li>Нужно знать, что такое виртуализация и как работать с виртуальными машинами</li>
19
<ul><li>Нужно знать, что такое виртуализация и как работать с виртуальными машинами</li>
20
<li>Командная строка - единственный способ взаимодействия с вагрантом. Если ваша операционная система Windows, то вам необходимо<a>настроить</a>её.</li>
20
<li>Командная строка - единственный способ взаимодействия с вагрантом. Если ваша операционная система Windows, то вам необходимо<a>настроить</a>её.</li>
21
<li>Базовое знание сетей, понятие порта.</li>
21
<li>Базовое знание сетей, понятие порта.</li>
22
<li>На вашем компьютере должно быть хотя бы 4 гигабайта оперативной памяти, хотя даже с таким объемом, работать проблематично. Минимально комфортный уровень - 8 гигабайт.</li>
22
<li>На вашем компьютере должно быть хотя бы 4 гигабайта оперативной памяти, хотя даже с таким объемом, работать проблематично. Минимально комфортный уровень - 8 гигабайт.</li>
23
</ul><h2>Установка</h2>
23
</ul><h2>Установка</h2>
24
<p>Первым делом необходимо поставить систему виртуализации, например VirtualBox. Скачать его под вашу операционную систему можно<a>здесь</a>.</p>
24
<p>Первым делом необходимо поставить систему виртуализации, например VirtualBox. Скачать его под вашу операционную систему можно<a>здесь</a>.</p>
25
<p>Затем скачайте установщик Vagrant под вашу операционную систему на странице<a>Download</a>.</p>
25
<p>Затем скачайте установщик Vagrant под вашу операционную систему на странице<a>Download</a>.</p>
26
<p>Откройте терминал и убедитесь что Vagrant работает:</p>
26
<p>Откройте терминал и убедитесь что Vagrant работает:</p>
27
<h2>Инициализация</h2>
27
<h2>Инициализация</h2>
28
<p>Дизайн Vagrant предполагает, что мы создаем отдельную конфигурацию на каждый проект (а соответственно и виртуальную машину), а не одну на все. Инициализация выполняется в папке соответствующего проекта:</p>
28
<p>Дизайн Vagrant предполагает, что мы создаем отдельную конфигурацию на каждый проект (а соответственно и виртуальную машину), а не одну на все. Инициализация выполняется в папке соответствующего проекта:</p>
29
<p>В результате выполнения этой команды Vagrant создаст файл Vagrantfile. Внутри файла описана конфигурация виртуальной машины на языке Ruby. Не страшно, если вы не знакомы с ним, содержимое файла интуитивно понятно, а документация Vagrant достаточно подробна.</p>
29
<p>В результате выполнения этой команды Vagrant создаст файл Vagrantfile. Внутри файла описана конфигурация виртуальной машины на языке Ruby. Не страшно, если вы не знакомы с ним, содержимое файла интуитивно понятно, а документация Vagrant достаточно подробна.</p>
30
<p>Кроме создания файла, вагрант скачает на вашу машину образ (image) операционной системы, хранящийся под именем ubuntu/xenial64. В данном случае речь идет про Ubuntu 16.04. Vagrant поддерживает каталог образов, созданных специально под работу с ним. При необходимости можно выбрать другой, посмотрев его имя в<a>каталоге</a>. Если открыть файл Vagrantfile, то можно увидеть что имя образа прописано внутри конфигурации:</p>
30
<p>Кроме создания файла, вагрант скачает на вашу машину образ (image) операционной системы, хранящийся под именем ubuntu/xenial64. В данном случае речь идет про Ubuntu 16.04. Vagrant поддерживает каталог образов, созданных специально под работу с ним. При необходимости можно выбрать другой, посмотрев его имя в<a>каталоге</a>. Если открыть файл Vagrantfile, то можно увидеть что имя образа прописано внутри конфигурации:</p>
31
<h2>Запуск</h2>
31
<h2>Запуск</h2>
32
<p>Старт выполняется командой vagrant up. Она создает виртуальную машину и запускает ее. Если машина уже была создана (предыдущими запусками), то произойдет только старт.</p>
32
<p>Старт выполняется командой vagrant up. Она создает виртуальную машину и запускает ее. Если машина уже была создана (предыдущими запусками), то произойдет только старт.</p>
33
<p>В этот момент уже можно начинать работать с кодом, лежащим в той же папке, что и Vagrantfile. Все изменения автоматически оказываются внутри запущенной виртуальной машины.</p>
33
<p>В этот момент уже можно начинать работать с кодом, лежащим в той же папке, что и Vagrantfile. Все изменения автоматически оказываются внутри запущенной виртуальной машины.</p>
34
<h2>Подключение</h2>
34
<h2>Подключение</h2>
35
<p>Для входа внутрь используется команда vagrant ssh. После выполнения терминал подключается к машине в домашнюю директорию пользователя по умолчанию. Традиционно в вагранте это пользователь с именем vagrant. Теперь необходимо выполнить переход в папку /vagrant. Именно в ней окажется код проекта.</p>
35
<p>Для входа внутрь используется команда vagrant ssh. После выполнения терминал подключается к машине в домашнюю директорию пользователя по умолчанию. Традиционно в вагранте это пользователь с именем vagrant. Теперь необходимо выполнить переход в папку /vagrant. Именно в ней окажется код проекта.</p>
36
<p>Дальше можно действовать по старинке. Поставить все необходимые пакеты и зависимости, а затем запустить проект. Если это веб-сайт, то он запустится на определенном порту. По умолчанию все, что стартует внутри виртуальной машины, доступно только внутри. Для возможности обращаться к сайту с хост машины (через ваш любимый браузер), необходимо прокинуть соответствующий порт наружу. Об этом достаточно подробно рассказано в<a>документации</a>. Предположим, что внутри Vagrant сайт стартует на порту 8080, и вы хотите обращаться к нему снаружи. Для этого достаточно добавить в конфигурацию:</p>
36
<p>Дальше можно действовать по старинке. Поставить все необходимые пакеты и зависимости, а затем запустить проект. Если это веб-сайт, то он запустится на определенном порту. По умолчанию все, что стартует внутри виртуальной машины, доступно только внутри. Для возможности обращаться к сайту с хост машины (через ваш любимый браузер), необходимо прокинуть соответствующий порт наружу. Об этом достаточно подробно рассказано в<a>документации</a>. Предположим, что внутри Vagrant сайт стартует на порту 8080, и вы хотите обращаться к нему снаружи. Для этого достаточно добавить в конфигурацию:</p>
37
<p>Изменения применяются после перезагрузки машины. Для этого достаточно выполнить команду vagrant reload.</p>
37
<p>Изменения применяются после перезагрузки машины. Для этого достаточно выполнить команду vagrant reload.</p>
38
<h2>Остановка</h2>
38
<h2>Остановка</h2>
39
<p>В конце работы не забудьте выполнить vagrant halt, иначе машина останется запущенной и будет потреблять ресурсы. Если вы решили, что пора полностью все удалить и поставить заново, воспользуйтесь командой vagrant destroy.</p>
39
<p>В конце работы не забудьте выполнить vagrant halt, иначе машина останется запущенной и будет потреблять ресурсы. Если вы решили, что пора полностью все удалить и поставить заново, воспользуйтесь командой vagrant destroy.</p>