До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Код

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

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

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

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

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

Подписывайтесь на канал Кирилла Мокевнина в 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
7
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября