Во главе угла стоят «Vagrant» (для управления виртуализацией) и «Scotchbox» (бокс для Vagrant — образ с ubuntu и предустановленным ПО, подготовленный ребятами из scotch.io).
В первую очередь, публикация рассчитана на тех, кто настраивает cвое рабочее окружение под Windows, слышал про Vagrant, но пока так и не попробовал его в бою. Надеюсь, этот простой пример поможет сэкономить немного времени при знакомстве с виртуализацией на основе Vagrant.
Из коробки на борту «Scotchbox» имеется Apache, PHP, MySQL, NPM, Git, Grunt, Gulp, Bower, Yeoman, Ruby, Memcached, Composer и другой инструментарий web-разработчика, если чего-то будет не хватать, можно легко доустановить самому и после этого создать свой собственный образ.
По ссылке https://box.scotch.io можно ознакомиться с подробной инструкцией по установке и запуску виртуальной машины с рабочим окружением «Scotchbox», а также списком того, что будет установлено. На этом можно было бы и закончить — мол, смотрите инструкцию, но мы еще немного автоматизируем создание виртуальных хостов для apache (путем расширения конфигурации Vagrant) и я вкратце опишу, что там происходит.
Для удобства создал репозиторий с примером vagrant-конфигурации, которую мы будем использовать.
Итак, последовательность действий:
- Установите «Vagrant» и «Virtual Box», если они еще не установлены.
- Склонируйте репозиторий:
(или скачайте архив и разархивируйте его вручную, если вы на чистой машине без git)git clone https://github.com/WebDevArchive/webdev-env.git
- Перейдите в папку «webdev-env», где лежит «Vagrantfile» и выполните команду:
vagrant up
Первый запуск может занять много времени — будет скачиваться образ, при последующих запусках этого шага не будет, образ будет цепляться из кеша. Далее запустится виртуальная машина.
Дождавшись ее загрузки, пропишем в файле «hosts» (в windows) строку
192.168.33.33 webdev.local
и перейдем по локальному адресу http://webdev.localЕсли все прошло, как предполагалось, то увидим страницу с текстом «webdev.local», загруженную из нашей виртуальной машины и можем сразу же приступить непосредственно к разработке.
Рассмотрим пример добавления своего хоста на примере «habrahabr.ru».
- В папке «www» создаем папку «habrahabr.ru» и в ней файл «index.html» с любым содержимым.
- В папке «www» создаем файл «habrahabr.ru.conf» c таким содержимым:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName habrahabr.ru ServerAlias www.habrahabr.ru DocumentRoot /var/www/habrahabr.ru ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- В файле «hosts» в windows добавляем
192.168.33.33 habrahabr.ru
- Перезапустим виртуальную машину:
vagrant destroy vagrant up
- Теперь при переходе на http://habrahabr.ru, будет грузится сайт с нашего хоста на виртуалке.
Пробежимся по конфигурации (Vagrantfile)
config.vm.network "private_network", ip: "192.168.33.33"
Здесь мы задаем для нашей виртуальной машины внутренний IP 192.168.33.33По этому адресу мы можем подключаться по SSH, имя пользователя и пароль по умолчанию — vagrant
config.vm.synced_folder "www", "/var/www", :mount_options => ["dmode=777","fmode=666"]
Синхронизация рабочей директории «www» в windows и «/var/www» в ubuntu (с выставленными правами доступа).Синхронизация подразумевает под собой возможность иметь доступ к файлам в папке «www», как из основной ОС, так и из гостевой. Т.е. общий файловый ресурс — например, мы можем редактировать файлы в любом удобном редакторе или IDE под windows, и эти изменения будут доступны для сборки проекта под виртуальной машиной.
Таким образом, код и структура проекта отделены от самой виртуальной машины и будут пробрасываться туда каждый раз при ее запуске.
Тут стоит отметить, что есть некоторые проблемы при использовании watch'еров (например, при использовании gulp) — не выстреливает событие, запускающее пересборку проекта при изменении содержимого файлов, если эти изменения были сделаны не из той же ОС, в которой были запущены watch'еры.
Т.к. я работаю с «webpack» у которого имеется «poll» (т.е. опрос изменений), то мне это сильно не мешает, но, если кто-то знает, как можно решить этот момент, буду рад прочитать в комментариях и добавить в публикацию.
config.vm.network "forwarded_port", guest: 8008, host: 8008
Так делается проброс портов (на примере порта 8008 — я использую его для webpack-dev-server, о чем в будущем планирую написать).config.vm.provision "shell", path: "vm.provision.sh"
Выполнение команд из файла vm.provision.sh сразу же после загрузки виртуальной машины.
Там все просто — добавляем/регистрируем хосты, устанавливаем mc и делаем любые другие нужные нам действия:
# Добавляем виртуальные хосты из папки «www»:
for vhFile in /var/www/*.conf
do
# копируем конфигурационные файлы хостов в специально предназначенную для этого папку apache
sudo cp /var/www/*.conf /etc/apache2/sites-available/ -R
vhConf=${vhFile##*/}
# регистрируем хосты
sudo a2ensite ${vhConf}
vhost=${vhConf%.*}
# Добавляем запись в /etc/hosts
sudo sed -i "2i${vmip} ${vhost}" /etc/hosts
done
# выставляем права и перезапускаем apache
sudo chmod -R 755 /var/www
sudo service apache2 restart
# Устанавливаем mc:
sudo apt-get --assume-yes install mc
# Если потребуется обновить node/npm:
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
Создание своего образа
Для того, чтобы сохранить свой бокс (например, если вы установили и сконфигурировали много ПО и хотите зафиксировать состояние), нужно выполнить команду:
vagrant package --base my-virtual-machine
Удобно, чтобы больше не заморачиваться с настройкой или когда есть необходимость передать другим разработчикам специфическое рабочее окружение для вашего проекта.
Вот, собственно, вкратце все основное и изложено.
Играйтесь с конфигурацией, изучайте более тонкие возможности Vagrant.
Хорошей разработки!
Комментарии (57)
E_STRICT
13.07.2015 08:15+13Разработчик должен иметь собственное уникальное, окружение.
Унификация рабочего окружения всех разработчиков в команде одна из основных причин использования Vagrant.alaska332
13.07.2015 08:29-17Разработчик — не бухгалтер, зачем унифицировать рабочее место?
Что это даст компании? Повысит уровень креатива?curt
13.07.2015 08:50+7Зачем разработчику свое собственное, уникальное окружение? И у каждого будет совсем собственное и совсем уникальное.
Унифицируют окружение выполнения вашего продукта, а не все рабочее место.
Vagrant + Scotchbox уницфицируют окружение выполнения, в частности, того что доступно из коробки, версии и настройки Apache, PHP, MySQL, etc. А остальное будет унифицировать после доработки напильником.
Унификация окружения выполнения необходима, чтобы избежать багов связанных с разнородностью окружений продакшна, стейджинга, разработки и уменьшает возню связанную с сетапом окружения для нового разработчика, например. Чтобы ни какого лишнего креатива.alaska332
13.07.2015 09:03-7Мы говорим о рабочем месте из топика.
Не надо отвлекаться на продукты, иначе выходит, что все продукты в мире работают на 3-х технологиях.
В чем смысл этой виртуальной машины с апачем, php и mysql? Все это ставиться одной командой из репозитория.
Где эта самая унификация?
Вот приходит человек в компанию и ему выдают этот образ с предустановленым mysql, под видом какого-то рабочего места. Не смешно самому?
Про людей, которые не могут поставить mysql или апач я уже сказал выше.
alaska332
13.07.2015 09:09-4Я, например, апачем не пользуюсь уже много лет.
Надо написать «ребятам из скотчбокс», чтобы поменяли на nginx, а то самому ставить придется, а это уже не комильфо.curt
13.07.2015 09:52+4Я, например, апачем не пользуюсь уже много лет.
Это из области «держите нас в курсе».
Мы отвлекаемся на продукты, потому что, что каждый продукт может работать на своем специфичном окружении.
Кроме вас, этим могут пользоваться многие другие. Чтобы сделать вариацию на тему nginx вы вольны для своих нужд и нужд своей команды собрать виртуалку с nginx, а не писать ребятам из scotchbox, раз уж вы все это умеете устанавливать из репозитория :)
В топике идет речь о рабочем окружении разработки, это не IDE и не .vimrc, а то, на какой конфигурации запускается проект, это как минимум ясно из контекста топика. Вы же начали придираться к словам.
В чем унификация!? Все разработчики запускают код в идентичных условиях, о чем я писал выше.
Например, в команде 15 разработчиков, наступает момент, когда обновляется mysql + php, плюс еще что-то добавляется (ну, например, понадобился Redis). И вы, вместо того, чтобы обновлять и настраивать софт на 15 компах, выполняя команды по обновлению и установке из репозитория. Можете один раз у себя все это настроить, опубликовать образ виртуалки и сообщить команде мол: «Все обновляем виртуальную машину, там уже все сделано».
Ни кто не утверждает, что skotchbox это единственно верный вариант окружения, вариантов масса, а вы накинулись из-за того, что это не подходит лично вам. Это не продуктивно.
Если skotchbox не для вас, вы можете просто проходить мимо.alaska332
13.07.2015 10:05-11К чему это завуалированное хамство?
Вы воспринимаете мое, в общем-то, субъективное мнение относительно подхода к организации процессов, как личное оскорбление? Взбешены? Сжали кулачки?
Для софта лучше, если он будет запускаться под различными окружениями. Больше отловите багов. Но к делу это не относится.
Поставьте еще пару минусов толпой, пусть это вас утешит.
Прошу вас мне не отвечать.curt
13.07.2015 10:31+1Это, возможно, потому, что вы наблюдаете третий уровень деградации у разработчиков которые
«такой хренью от ребят из scotchbox.io пользуется».
Я, думаю, как и многие, нахожу это продуктивным.
Больше отвечать не буду.alaska332
13.07.2015 11:19-5Сразу трудно было не ответить?
1. Это и есть деградация. От того, что девелопер научится сам ставить редис из исходников — он только умнее станет, и поэтому, наверное, станет опасен для вас и захочет покинуть ваше уютное болото (шутка).
2. Как относятся ваши пространные рассуждения об упаковке проекта в виртуальную машину к теме статьи и проблеме, которая в ней затронута? Зачем вы мне рассказываете о ваших местных проблемах, и как вы с ними боретесь? О боже, как же это удобно, шарить виртуальную машину. Наконец-то найдена панацея. Теперь любой дебил сможет писать код для нашей компании, ведь ему не надо будет ставить редис самому. Подскажу, есть еще более эффективное решение — терминальный сервер. Попробуете?
3. На счет — «держите нас в курсе». Я вам вроде ничего не должен, с какого х… мне держать вас в курсе чего-то? И кого это «вас»? Хотя я тоже очень люблю веселый штампованый юмор.Flcn
04.08.2015 09:08+2Батенька, да у вас бомбит!
" он только умнее станет,"
ну и если вместо отдела бухгалтерии он будет финансами заниматься тоже умнее станет и если вместо дизайнера макеты рисовать, дак может этим и заниматься?
Если человек делает JS на проекте, зачем ему базы то ставить и php настривать?
bestxp
13.07.2015 11:02А никто не сталкивался с проблемой медленного исполнения кода в вагранте и как с этим боролся? Вроде как проблема возникает из-за прикрепленной папки в виртуальную машину, но вот как победить не могу разобраться
VasilioRuzanni
13.07.2015 11:14Ну, это известная проблема, в частности, если используется (дефолтный) VirtualBox и его механизм расшаривания папок. VMware работает заметно быстрее, но вообще проблема решается использованием NFS (правда, только если на хост-машине не Windows).
E_STRICT
13.07.2015 11:45NFS решает проблему только частично. Как вариант держать файловою систему внутри виртуальной машины. toster.ru/q/217009
Sky4eg
13.07.2015 11:26+1На мой взгляд решение от puphpet.com более гибкое. В 2015 году перешел именно на связку VBox + puphpet + vagrant с хранением проектов и диска вм в дропбоксе. Удобно, гибко, доступно. Единственная проблема — забываю vagrant suspend и компьютер зависает на выключении. Не получается повесить на shutdown выполнение скрипта
someoneisusingmyusualnick
13.07.2015 15:04Поддерживаю puphpet.com. Отличная тула и решает все описанные в посте задачи, вероятно даже и быстрее — генератором конфига на их сайте в пару кликов.
А про приостановку вагранта — использую VMWare, никаких проблем с выключением компьютера не замечено.
pandas
13.07.2015 12:04+6Скотчбокс хорош для реально быстрого деплоя среды окружения разработки, чтобы быстро начать. Причём не важно на какой ОС разработчик сидит. Это удобно когда нужно сделать что-то быстро, например на хакатоне, или быстро прототипировать.
А вообще, лично для себя, лучше докера пока решений не вижу. Мгновенная работа сервисов, относительно «чистая» основная ОС без лишних пакетов, мгновенная работа приложений (в отличие от более длинных пробросов файлов в виртуалку, и т.д. в вагранте).
Опять же, всё зависит от стэка. Докер позволяет конфигурить вообще как угодно среду исполнения. Хочешь — django, хочешь lamp, хочешь rails, хочешь нода. Еще Ansible и скрипты автоматического деплоя на DO или AWS — так вообще ракета-космос ))
А вот утверждать что скотчбокс это плохо и нубство — это большая глупость. Любая технология хорошо, а если она еще правильно применяется — это еще лучше! Для каждой задачи есть свой набор инструментов, и безусловно здорово, что ребята из скотча придумали такую сборку. Только с обзором этой сборки опоздали немного, это было очень актуально где-то год назад. Сейчас докер )forewar
13.07.2015 20:20+1Именно этот комментарий должен идти к этой статье первым, а не странные обсуждения «зачем мне ехать на лифте, если я умею подниматься по лестнице» :)
Сейчас докер, да.
Alexc5c5c5
13.07.2015 19:50-3Под винду, для быстрого старта denwer удобен
dr1v3
14.07.2015 21:11О, напомнили.
Регистрация требуется в связи с будущим выходом Денвера-4.
На моей памяти лет 5 уже висит дисклеймер. Ну и пусть дальше висит :)
Prologos
13.07.2015 23:43+4Отличная работа, чего тут разводить споры — автоматизация она всегда нужна. Респект автору, и побольше здоровья и сил, чтобы продолжать.
Artima
14.07.2015 12:55При установке в Windows 8 может возникнуть проблема: Problem Windows 8.1 incompatible character encodings: IBM866 and ASCII-8BIT
Artima
14.07.2015 14:58Теперь при переходе на habrahabr.ru, будет грузится сайт с нашего хоста на виртуалке.
Не будет. Изначально ip другой и будет работать только — 192.168.33.10
Ну и проблемка еще с SSH может возникнуть…
Как раз решил поставить попробовать и схватил эти грабли.Artima
14.07.2015 15:37А, прошу прощения, такой IP установлен, если устанавливать по инструкции Scotch.io напрямую. В топике все верно.
Я пытался установить все по официальной инструкции, так как не заработало то, что из топика. Похоже проблема с синхронизацией папок. Мда, а выглядело все интересно.
alaska332
Разработчика, который такой хренью от ребят из scotchbox.io пользуется — на работу брать нельзя.
Это уже 3-й уровень деградации.
franzose
Почему?
alaska332
Разработчик должен иметь собственное уникальное, окружение.
Которое он должен уметь конфигурировать.
Это как .vimrc.
Человек, который пользуется этим — начинающий программер, врядли от него будет много пользы. Придется всему учить год.
cryptograf
Вы еще скажите, что приложения на сервера нужно вручную деплоить :)
alaska332
При чем тут это?
Последний раз напишу:
Каждый девелопер проходит путь от LAMP до собственного уникального и удобного окружения, в котором он самостоятельно размещает проекты, над которыми работает.
Я предпочитаю работать с людьми, которые этот путь уже прошли.
E_STRICT
alaska332
Стоит, потому, что именно стандартное окружение здесь и предлагается.
Не свое оптимальное, а общее, на базе скотчбокс, закатанное в виртуальную машину.
Каждый разработчик должен собрать это окружение самостоятельно и сделать образ в той виртуальной среде, к которой он привык.
А лучше всего, чтобы он имел свой ноутбук с развернутой средой разработки.
О чем тут спорить?
hell0w0rd
О том, что разработчик может вести параллельно несколько проектов, с разными версиями нужного софта.
Более того новый разработчик как можно меньше должен думать о настройке окружения для проекта, а больше о самом проекте.
vma
Люди, которые знают свою область снизу до верху, особенно в IT, весьма редки. Вам бы снизить планку требовательности, иначе рискуете остаться в одиночестве.
alaska332
Установка и настройка рабочей среды — базовый уровень. Не может человек быть вообще эффективным в чем-то, не владея необходимыми инструментами. Вы же не возьмете на работу плотника, который только молотком умеет, а пилой нет. А может и возьмете, только пилить за него другой будет.
vma
Ох уж эти аналогии, мощный козырь в спорах, но эта аналогия не правильная.
Если из области плотников, то Ваша позиция примерно такая:
«Нельзя же брать на работу плотника, если он не может сам себе мастерскую построить».
Мне кажется можно. Хотя я бы выбрал бы того, который может сам себе мастерскую построить, если бы смог предложить ему достойную ЗП :)
cryptograf
Тогда и я напишу :)
Твое окружение — это твое окружение. Рабочая среда есть другое.
Вот я пришел на большой проект, мне нужно поставить определенную версию java, прописать тыщи переменных в PATH, поставить тулзы для фронт-энда, еще кучу всякой ерунды. Можно конечно сделать мануал и добрые пол-дня несчастный джуниор будет все это устанавливать, и еще может вас дергать при неудачах. А еще очень часто такие штуки забывают апдейтить.
Вагрант и уже готовый образ создадут энв как раз плюнуть.
А редакторы и прочие инструменты для себя вот тут уже простор для фантазии открыт :)
alaska332
Если вы JAVA программер — значит вы знаете все основные тулзы, которые используются в JAVA мире. Все это уже установлено и настроено на вашем ноутбуке вами. И вы умеете этим пользоваться.
Это и есть ваше рабочее окружение. Оно настроено вами, на основании вашего опыта и предпочтений. Включая любимый редактор, и т.д. Вы меняете его самостоятельно, получая новые знания. Наличие этого окружения позволяет вам работать быстро и эффективно.
Приходя в новый проект — вы размещаете этот проект в своем окружении. Проектная документация начинается с мануала по размещению. Да, любой новый член команды в любом случае тратит несколько дней на адаптацию. Если процесс развертывания слишком сложен — его следует упростить, это проблема дизайна. И она будет вылазить всегда и везде, не только у новых разработчиков.
То, о чем говорится в статье — ерунда. Виртуальная машина с предустановленными апачем и майскл ничего не решит. Кроме того — это преподносится как что-то новое. Пиарят какой-то скотчбокс, в котором зачем-то есть руби и пхп, но нет питона и перл. Почему именно такая конфигурация? В чем проблема сделать такой-же образ самому? Если уж на то пошло — лучше выдавать докер с проектом внутри.
anycolor
Что вы предлагаете делать если вы пилите два проекта, к примеру? Один как хобби, с другой версией той же джавы, например?
franzose
Если есть возможность сэкономить несколько дней и дать возможность коллегам не наступать на одни и те же грабли, то уж лучше сэкономить. Дедлайны не резиновые.
shoorick
(Даже не глядя внутрь) Если там Убунту — в ней перл уже точно есть. Может, и питон заодно найдётся.
alaska332
Он там точно есть, если «ребята из скотчбокс» его поставили из репозитория.
Так же я могу набрать «apt-get install apache2» без проблем.
Вопрос был — чем обусловлен такой выбор софта и почему он считается универсальным.
movl
Уметь что-то делать самостоятельно и использовать готовое, не противоположные вещи. Часто ли Вы что-то собираете из сорцов, когда есть бинарники, полностью удовлетворяющие вашим требованиям, но созданные не Вами? Или пишете код для решения популярной задачи, которая до Вас была решена уже тысячу раз? Готовое обычно можно использовать быстро, просто и эффективно, эти сборки от ребят из scotch box не исключение. Не говоря уж про то, что некоторым разработчикам вообще не обязательно знать что, да как там работает.
marapper
Преимущества боксов и докеров в том, что окружение максимально приближено к реальным и разработчик не задумывается, ту ли версию ПО он поставил, надо ли обновлять php/mysql или нет.
forewar
А еще каждый разработчик должен иметь самописный уникальный фреймворк. Который только он должен уметь конфигурировать.
Каждый должен ездить на собственном велосипеде, собранном из запчастей через слезы и страдания. Человек, который едет на покупном — начинающий велосипедист. Такого придется учить собирать велосипеды год.
alaska332
Да хватит этого бреда.
Сколько вам лет?
E_STRICT
alaska332
Второе ваше предложение не понял.
Какой еще дисклеймер? Advanced topic? И что это должно значить?
Я выразил свою точку зрения, подкрепленную многолетним опытом работы в крупных дев. коллективах.
Это ваше дело, как организовать процесс разработки максимально эффективно.
Хотите — садите всех на скотчбокс.
serf
Несколько консольных команды никакой сложности не представляют, дисклеймер видимо для домохозяек о которых как раз пишет alaska332
E_STRICT
У вас большой опыт создания собственных вагрант боксов? Можете поделиться? Я думал что «несколько коснсольных команд» это для того что бы запаковать уже подготовленный образ. В доках описана куча специальных требований к образу, которые должны быть соблюдены. Не думаю что это какая то супер сложная процедура, но на первый взгляд это очень далеко от уровня домохозяек.
serf
Любой опытный линукс пользователь выполнит эти требования.
Что касается меня, я сейчас не работаю в команде, мне пофиг на вагранты и докеры всякие.
alaska332
Можно сделать вывод, что создание вагрант бокса — венец карьеры для большинства людей.
Инженерная документация с дисклеймером «Advanced» — это деградация. Это как «Осторожно, горячий суп», чтоб не убили себя. Таких инженеров надо «мочить в сортирах» (с) Вова П.
Весь этот топик отлично демонстрирует уровень современного массового IT.
10 лет назад были шутки про пхпшников, которые не знают как работает компьютер. Сейчас все стало только хуже.
ring
Одинаковые dev, stage / qa и prod окружения очень важны. Решает проблемы вида «а у меня все работает, can't reproduce», это только то, что лежит на самой поверхности, глубже — более сложные вещи типа минимальных различий версий MySQL. При чем тут умение собрать окружение?