HTML Diff
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>