Весенние скидки до 30 000 ₽
На все профессии до 31 марта
Главная | Все статьи | Код

Рабочее окружение

Время чтения статьи ~5 минут

Настройка рабочего окружения — не такое простое занятие, как может показаться на первый взгляд. Обычно начинающие разработчики (и не только) устанавливают проект и его зависимости прямо на ту систему, где они работают. Этот подход обладает рядом недостатков.

Часто бывает, что разработчик работает не на одном компьютере. Более того, иногда разработчики работают на разных компьютерах с разными операционными системами. Все это приводит к тому, что сам процесс разворачивания окружения всегда разный и отличается от боевой среды. Что приводит к багам, которые возникают либо только локально, либо только на продакшене. Засоряется система. Практически невозможно вернуть систему в первоначальное состояние, чтобы пересетапить проект. Придется устанавливать с нуля основную систему.

Если идет работа с разными проектами, то могут возникать конфликты между окружениями (несовместимые версии, попытка использовать одни и те же порты). Более того, часть сервисов всегда стартует автоматически (базы данных, веб-сервера), и они просто нагружают систему тогда, когда не нужно. Идеальное рабочее окружение соответствует боевой среде (той, куда вы деплоитесь), это не всегда возможно, но на то оно и идеальное.

Подписывайтесь на канал Кирилла Мокевнина в Telegram — чтобы узнать больше о программировании и профессиональном пути разработчика

Первое, чего необходимо добиться, это изоляция окружения от всего, что не связано с самим проектом. Решается это виртуализацией. Стандартный подход на рабочих машинах - это использование программной виртуализации, при которой специальное программное обеспечение создает и запускает гостевую операционную систему внутри хост-системы, например, Virtualbox. Выглядит этот как обычная программа, то есть отдельное окно, внутри которого запущена полноценная операционная система.

Это настолько распространенный вариант и задача, что появился на свет такой инструмент как Vagrant. По сути, vagrant - это утилита командной строки, которая упрощает управление виртуальными машинами для разработки. То есть сама она не занимается виртуализацией, а требует наличия в системе одного из поддерживаемых средств виртуализации. К ним относятся VirtualBox, Parallels Desktop, VMware Workstation, Docker и даже облачные провайдеры, такие как Amazon EC2. Подход, который предлагает Vagrant, это "виртуальная машина на проект", что правильно, потому что у каждого проекта свое окружение.

Очень важно то, что в отличие от просто виртуализации, когда вы запускаете операционную систему, как программу, и полностью работаете внутри нее, вагрант подразумевает только консольный доступ к виртуальной машине. Сама разработка при этом происходит на хост машине. По сути, вагрант используется как способ "запустить код в изолированном окружении", а не как способ разработки. По этой причине боксы, которые используются внутри вагранта, не имеют графического интерфейса.

Кроме этого вагрант из коробки предоставляет множество полезных функций, которые вам пришлось бы руками настраивать, используя виртуализацию напрямую. Из ключевых это:

Единый реестр боксов. Вам нужно только указать правильный, а вагрант сам его ставит, настраивает и запускает. Автоматический шаринг директории запуска (обычно это директория с проектом) с виртуальной машиной, то есть код автоматически синхронизируется между хост ОС и гостевой ОС; Легкая настройка проброса портов. Например, вы стартуете сервер внутри вагранта (виртуальной машины), а доступ к нему имеете снаружи.

Provision - это механизм интеграции с различными системами управления конфигурации. Позволяет вам настраивать вагрант посредством, например, ansible. Гибкая и удобная настройка сети. Возможность запускать множество машин под единым управлением. Важно, что вся конфигурация вагранта это файл, который находится под контролем версий внутри проекта. Это означает, что сама настройка пишется один раз и повторно используется всеми членами команды без необходимости повторения всех действий руками каждым.

Чтобы начать работу с Vagrant, сначала необходимо скачать и установить одну из систем виртуализации, например, VirtualBox. Дальше нужно установить сам Vagrant. Установщик можно найти на этой странице https://www.vagrantup.com/downloads.html.

Далее, зайдите в тот проект, для которого вы будете создавать рабочее окружение и выполните там команду:

$ vagrant init ubuntu/trusty64

Эта команда создаст файл Vagrantfile в директории запуска. Vagrantfile это ruby-скрипт, в котором описывается конфигурация Вагранта. Внутри множество комментариев показывающих то, как можно конфигурировать Вагрант и виртуальную машину. Единственная активированная конфигурация - это указанный box, который будет использоваться. В нашем случае это ubuntu/trusty64.

Следующая команда запускает виртуальную машину и проводит базовую конфигурацию.

$ vagrant up

Теперь ваша виртуальная машина запущена и готова к использованию. Чтобы подключиться, наберите:

$ vagrant ssh

После выполнения этой команды мы оказываемся внутри виртуальной машины с установленной на нее Ubuntu. Вагрант предусмотрительно подключил вашу директорию с проектом к виртуальной машине. Найти ее можно в директории /vagrant внутри виртуальной машины. Все изменения, которые вы делаете изнутри наружу и наоборот, синхронизируются.

Еще одной крайне полезной функцией вагранта является проброс портов. Пример:

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

Теперь все, что запущено на гостевой операционной системе на порту 80, доступно на хост системе на порту 8080. Можно добавить сколько угодно таких пробросов.

Кроме этого, у вагранта есть полезная функциональность под названием Provisioning. Она позволяет интегрироваться с большим количеством систем для управления конфигурацией. Для настройки операционной системы с помощью Ansible достаточно выполнить следующие шаги:

Написать плейбук. Включить provisioning.

config.vm.provision "ansible_local" do |ansible|
 ansible.playbook = "playbook.yml" // Путь относительно директории с проектом
end

Выполнить снаружи команду vagrant provision.

Аватар пользователя Kirill Mokevnin
Kirill Mokevnin 03 октября 2016
6
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 марта
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 28 марта
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 28 марта
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 28 марта
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 28 марта
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 28 марта
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 марта
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 28 марта
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 марта
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 28 марта
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время