Принимайте участие в зарплатном опросе! Уже собрано почти 8 000 анкет.
×Закрыть

Работа над несколькими проектами на одной машине

Всем привет!

У меня следующая ситуация: я занимаюсь саппортом различных проектов, для запуска которых требуется различное ПО. Пока что их два:

Первый: PHP 5.6 + MySQL 5.5 + Node.js 0.10.24 + Sphinx 2.1.3
Второй: PHP 7.1 + MySQL 5.7 + Node.js 6.11.0

Сейчас работаю под Windows и для их запуска пользуюсь WAMP OpenServer. Но уже на данном этапе мне неудобно постоянно менять конфигурацию модулей сервера при выполнении задач на разных проектах.

А в будущем ещё планируются проекты на C# ASP.Net...

В общем, резко стал вопрос — как всё это дело организовывать, желательно, чтобы у каждого проекта было своё независимое окружение, которое при желании можно будет старт/стоп. И желательно, чтобы это делалось простой console командой или нажатием на кнопку.

Ну, и чтобы всего этого зоопарка технологий у меня не было на локальной машине.

Пока что у меня следующие варианты:

1) Oracle VirtualBox + отдельные виртуалки с Ubuntu без графической оболочки под каждый проект. Т.е. на виртуалке будет развёрнут веб-сервер, который будет запускать проект. Файлы проекта будут на основной машине, а на виртуалке доступ к ним будет через шаред каталог. Браузер, IDE и Version Control будут на основной машине (плюсы — просто и удобно, минусы — затратно по ресурсам)

2) Docker + контейнеры под каждый проект (начал реализовывать: не получилось автоматически настроить создание БД и пользователя в Dockerfile, максимум, что удалось — в Dockerfile прописать установку нужного софта. Запуск серсисов, создание БД и индексов Sphinx приходится делать внутри контейнера и настраивать VOLUME’s для сохранения изменений после остановки контейнера. Всё это показалось мне жутко неудобно... Хотя, может, я просто плохо разобрался с Docker. Хотя, покопавшись в Интернете, встретил мнения людей, что Docker — это вообще технология не для удобства локальной разработки, а для производительности в проде. В общем, я вообще сомневаюсь, стоит ли мне его использовать для своих задач. Но из плюсов — суперская производительность по сравнению с виртуалкой).

3) Vagrant (о нём вообще только слышал, сам не работал)

Посему хотелось бы услышать мнение авторитетных и более опытных товарищей, которые сталкивались с похожей ситуацией и было бы интересно узнать, какие инструменты вы использовали, чтобы определиться с выбором (возможно, их даже нет в моём списке).

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

кубернетес, докер, через minikube — раньше под virtualbox, сейчас настроил напрямую в локальный докер (менее секурно, зато шустро)
сейчас крутится около 5 проектов с разными версиями — 5.6, 7.0, 7.2

Решил попробовать — yii2 на vagrant не завелся. Убил несколько часов только на это, видимо мне пока удобнее локальный сервер держать.

А чё такое все работает...https://www.youtube.com/watch?v=22Mwunvw9HQ
там правда вьетнамцы какие то можно сделать как тут www.youtube.com/watch?v=jVykSBbcSUs

Docker — это вообще технология не для удобства локальной разработки, а для производительности в проде

в Docker ранее даже возможности сохранения данных не было, то есть изначально — ориентация продукта явно не на прод
(тут достаточно оценить распространенность Docker у делелоперских компаний и кастомеров)
производительность уже развернутых приложений в проде — вообще практически не зависит от характера используемой виртуализации (VM, контейнеры, ...)
и преимущество контейнеров в меньшем потреблении объемов RAM/HDD тоже уже не так очевидно из-за тотального использования технологий дедупликации и компрессии

Как хорошо, когда есть python и virtualenv

У меня тоже вопрос: надо виртуализировать рабочие места для удаленных сотрудников. На текущий момент пишу скрипты на ansible и отлаживаю на Vagrant+VirtualBox. Никак не могу решить куда выкачивать исходники и где запускать ide, типа Idea, Eclipse. на хостк или на самой виртуалке. У кого какой опыт?

Насколько удаленных? Есть, очень класный, опыт использования PXE+TFTP+Терминальный сервак. Я так подозреваю, что сюда можно прикрутить VPN и маштабировать, таким образом мой вариант.

Vagrant, Docker, www.parallels.com if you can ~~steal~~ afford it

Поставить линукс второй осью или полноценной большой виртуалкой с гуями, а для проектов использовать докер. И да, «философия» докера — один сервис на один контейнер, поэтому «по феншую» использовать docker-compose и стараться разбрасывать по контейнерам всё — отдельно контейнер для пхп, отдельно для базы и т.д. Мануалы конечно покурить нужно чтобы настроить, ну а как иначе.

Docker — это вообще технология не для удобства локальной разработки

Ну не знаю, поддерживаю проект на php 5.5 с кучей разнообразной фигни, и таки удобство вижу: один раз написал конфигурацию, и теперь в случае переустановки системы чтобы поднять проект достаточно поставить докер, сказать sudo docker-compose up и либо пить чай (если проект запускается на этой машине в первый раз) или сразу работать (если контейнеры уже собраны).

Согласен с этим комментарием полностью.
Так сложилось что по работе необходимо использовать Vagrant. Так вот когда приходится запускать 2 проекта одновременно, ноут аж «поскрипывать» начинает. VirtualBox очень требователен к железу.

Для своих проектов использую докер и не нарадуюсь. «Блэкджек» в одном контейнере, «шлюхи» в другом. Если мне вдруг в каком-то проекте понадобились «шлюхи», во они уже готовенькие. Бери и юзай. Одновременно можно запустить на порядок больше проектов чем под виртуалбоксом. Ну и естественно Docker Compose рулит. (но правда это все под Linux)

А вот для самообразования советую попробовать и первое, и второе. В работе однозначно пригодится.

имхо проще всего юзать стандартный hyper-v в windows 10 + будет возможность параллельно изучать тот же докер на виндоус. virtualbox\vmware+docker на одной оси не будут работать.

virtualbox\vmware+docker на одной оси не будут работать

Хм, это какая-то новость. Может быть на винде и не будут, но на линуксе вполне работают. А хайпер-ви тормознутый, если гость не винда.

docker на винде использует hyper-v изоляцию, а при включенной hyper-v роли — другие технологии виртуализации не работают.

тормознутый то с велосипедных времен наверное, с 10й версией разницы нет никакой + в хайпер-в намного больше фич чем в virtual-box, те же снапшоты, кластеринг и сетевая часть более гибкие. ну и главное что это build in технология для хостовой машины, т.е. какие то там сторонние фаерволы на работу не повлияют.

тормознутый то с велосипедных времен наверное, с 10й версией разницы нет никакой

На 10ю ставил, по ощущениям заметно хуже чем vmware. Хотя, я ставил с гуями, может если серверную ось то и нормально.

я синтетикой проверял — все идентично, кое где виртуалка на гипер-в шустрее (сравнивал в основном дисковые операции). или ты имеешь ввиду проброс консоли через менеджер виртуалок? она да — намного тормузнутее, но кто ж ее то использует? )) ssh\rdp есть.

Вообще-то разобраться с Docker’ом однозначно стоит. Это сейчас must-have. Сам по себе Docker очень прост, сложны лишь средства оркестрации вокруг него. В общем, если не лезть сразу в Kubernetes, то можно на досуге поиграться с контейнерами, получить полезный опыт и понять, зачем оно такое надо.

А в данном случае, конечно же, я бы рекомендовал Vagrant, можно даже без правильным образом сделанного provisioning’а.

сложны лишь средства оркестрации вокруг него

так это самая главная часть же )

Хотя, может, я просто плохо разобрался с Docker. Хотя, покопавшись в Интернете, встретил мнения людей, что Docker — это вообще технология не для удобства локальной разработки, а для производительности в проде. В общем, я вообще сомневаюсь, стоит ли мне его использовать для своих задач. Но из плюсов — суперская производительность по сравнению с виртуалкой).

А еще народ жалуеться что плохая слава о пехопешниках.

Выучи докер, будь мужиком, *леять!

Выучи докер

што, на память?! 🙀

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

Спасибо за совет, но мне такой подход также кажется не совсем удобный. OpenServer, как по мне, это классная штука, когда нужно быстро стартануть новый проект и неохота заниматься ручной настройкой виртуальных хостов и установкой банального *AMP стека. Ну, и для саппорта готовых CMS решений вполне годится. В моём случае речь идёт о долгосрочной поддержке проектов с нестандартным технологическим стеком, поэтому OpenServer мне стало не хватать, т.к. в некоторых случаях требуется тонкая настройка, что при использовании этого ПО вынуждает писать всякие костыли. Да и проблему глобального Sphinx, который нужен лишь для одного проекта, OpenServer не решает. И с C# в будущем он мне точно не поможет)

докер на го запили и всех делов...

если есть время разбираться с докером — то докер-compose, иначе сделать пару вируталок. Я больше за виртуалки — их очень удобно клонировать. Докер удобно если нада воссоздать конфиг типа два сервера монго в шардинге плюс какой нибудь балансер на фронтэнде, compose позволяет прописать конфиги всего окружения и поднимать его одной командой.

Спасибо за совет. Я тоже сейчас больше к виртуалкам склоняюсь. Docker — штука полезная, это я уже оценил. Но, поскольку, я буду его использовать только локально (наши админы не юзают его в проде, т.к. не владеют им) и больше никто в компании с Docker особо не дружит, то смысла в трате времени на знакомство с синтаксисом Docker нет. Возьму-ка я лучше VB+Vagrant — хоть не будет проблем с установкой ОСи, из бокса быстрее поднимется.

Вагрант — это те же виртуалки и жрет теже ресурсы. Единственная польза, что весь софт и конфигурация настраивается не руками, а конфигами (puphpet, chef, etc). Чтобы нормально юзать вагрант нужно вникать не меньше чем в докер и ресы жрет как полноценная виртуалка.

Докер же хоть и не нужен конкретно сейчас в твоей компании, но это инвестиция в свое будущее, строчка в резюме в конце концов.

puppet и chef — отдельные вещи, которые к вагранту никак не относятся. Их также можно накатывать на голый виртуалбокс

Я для подобных целей использовал Vagrant. Это по сути VirtualBox + автоматизация большинства шагов. Vagrantfile описывает какую VM поднимать и как ее инициализировать, какие папки шарить, какие порты пробрасывать. Первый запуск может занять некоторое время, но последующие перезапуски это просто перезапуск virtualbox. Можно делать несколько VM для эмуляции распределенного deployment’а. Если начальную инициализацию прописать в Vagrantfile скриптом или как Ansible playbook, то окружение поднимается одной командой vagrant up.

Docker слишком низкоуровнево. Философия докера: один начальный процесс на контейнер, это значит что либо придется ставить какой-нибудь supervisor, который будет стартовать нужные сервисы в одном контейнере, либо использовать composer или аналоги, который будет поднимать каждый сервис в своем контейнере, заботиться о сохранности данных между перезапусками контейнеров. Для окружения разработчика это IMHO имеет смысл только если такая же модель используется и в production.

Огромное спасибо. В комментарии выше написал о своих симпатиях к VB+Vagrant, а после прочтения Вашего сообщения ещё больше в них убедился)

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

Есть правда нюанс — например вы поднимаете компоузом 2 контейнера: база + апи\веб и вам важно чтобы база успела стартануть, а только потом апи — то в этом случае нужны дополнительные усилия в докер файле чтобы один контейнер ждал другого ..... ИЛИ апи имеет пул соединений который достаточно умный чтобы повторять попытки подключения если база не отвечает (ну и конечно можно настроить таймауты, количество повторных попыток и т.д.) + можно настроить параметры HEALTHCHECK самого контейнера в докер файле и политику рестарта — тоже вариант

У нас докер с кюбернетс юзается — полет нормальный

Сохранность данных между перезапусками и с виртуалками надо будет обеспечивать. Ну или не обеспечивать и в докере :) А запускать можно одной командой docker-compose up

В своё время внедрил докер на проекте именно для удобства локальной разработки и тестирования, потом на сервере для QA (под каждую ветку свой поддомен), а потом и на продакшен перенесли. Сейчас проект, где вагрант используется для локальной — уровень один, если надо что-то менять. Грубо, хоть в докерфайле, хоть в вагранте надо писать apt install ..., пробрасывать порты и т. п.

Справедливо только насчёт оркестратора или супервизора, с другой стороны, виртуалки больше ресурсов жрут в целом.

Философия докера: один начальный процесс на контейнер

 Ну эта «философия» вытекает из простого факта — таким образом докер демон понимает что контейнер жив и работает и его не надо перезапускать (если вы используете эти опции) + к тому же этот начальный процесс должен правильно принимать сигналы (e.g. KILL, HUP etc.) и в случае необходимости пробрасывать их своим дочерним процессам (чтоб не получить зомби). Такой подход правильный с точки зрения прод систем (в линуксе же у вас и так один главный процесс «PID 1» который и является корнем дерева процессов).
Заботиться о сохранности данных просто — 1) делаете docker volume и монтируете туда те пути которые нужно ... все будет жить пока не убьете явной командой и можно прицеплять к разным контейнерам одновременно 2) можно смонтировать пути хоста на пути контейнера и все будет жить на хосте ....

Но можно жить и с вагрантом — только это ест много ресурсов и времени поболее если не осилить Chef | Ansible etc.

Я проходил оба пути — и много виртуалок вагрантом + Chef (проект требовал поднять 5 серваков для теста) ... и докер (это мой текущий инструмент + в проде) — докер эффективнее (в моих случаях), но в определенный момент требует углубиться в разные нюансы, особенно для прода .... хотя для не хай лоад проектов не сильно то его надо тюнить.

Напиши скрипт для быстрой замены ОпенСерверу конфигов, с перезагрузкой.
Как вариант — пусти через Nginx, и подними там конфиги вручную.

Лично я бы в этой ситуации не церемонился, и перевёл проект на PHP7 — даже если бы мне отдельно за это не доплатили (что вряд ли). Элементарно шугани владельца какой-то уязвимостью, тем более что навреняка там не голая пэха, а с фреймворком, который развивается именно на PHP7.

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

Короче, тебе это в любом случае предстоит. Так что не тяни кота за проблемный хьюстон.

Решение малой кровью — переведи проект на совместимость с PHP7, даже если он останется на PHP5.6, и спокойно развивай на своей машине под 7й пэхой. Сомневаюсь что там адски нагруженный сервер со сколь-либо вменяемой круглосуточной прибыльностью, такой что оправдана перестраховка риска с затратой время-денег.

Средний и большой проект не переведеш с 5-ой пихи на 7-ую — малой кровью. Там нужно переписывать, и причем дохрена, а денег и времени на это как обычно нет. Имхо, самый простой и быстрый вариант это Vagrant.

Средний и большой проект не оставляют одному человеку. И как раз в случае среднего проекта достаточно просто вступить в заговор со всеми причастными — если только проект не в стадии упадка с внутренними интригами. А что делать с большими слонами — не знает никто, они все уникальны, со своими тараканами.

Средний и большой проект не оставляют одному человеку.

Ничего ты не знаешь, Джон Сноу

Меня, месяц назад, приглашали на багфикс проекта который обслуживает несколько десятков тысяч пользователей, в один момент времени, (объем БД ~500 000 000 записей), функционала до чёрта. И написал этого монстра один человек.

Чё не пошёл? Приличный челлендж, работы багфиксов с рефакторингом думаю на пару лет минимум.

Я конечно понимаю, что написать проект на 500 миллионов записей — любой дятел может, но факт что с десятком тысяч юзеров одномоментно — его бы увели на PHP 5 со всеми вытекающими дырами фреймворков.

А если написал 1 человек — это ж не значит что его ведёт один человек. Иначе бы тебя не пригласили. Разумеется, из любого правила возможны исключения, но они лишь подтверждают правила.

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

Хотя по нынешним меркам, да ежели с фрактальными индексами — лепота будет даже по оперативе. Если проект действительно крутой по контенту, то грех не зайти раз приглашают. Другой вопрос что вести такие проекты в одиночку страшновато, надо иметь админа-безопасника, может даже несколько.

Проект по планированию\мониторингу роботы персонала в режиме реального времени. Клиенты — несколько тысяч компаний. Насчёт поработать Вы очень правильно сказали ’багфикс\рефакторинг\новие фичи, на несколько лет’ - даже для команды. Но за несколько лет с таким кодом — сильно просядет качество собственного. Да, и от современных технологий отстанеш. Поэтому и отказался.

Docker — это вообще технология не для удобства локальной разработки

Да, вы правильно поняли, докер в вашей ситуации будет только вредить

Спасибо. Это я уже и сам понял после прочтения отзывов людей, которые с Docker работают «как положено», а не на моём ламерском уровне)))

И в чём вред будет выражаться?

Посмотри вот на эти скрипты для автоматизации докера. Использую их уже много лет github.com/dvapelnik/efig. Под windows docker запускается в виде отдельной виртуальной машины, что не совсем удобно.

Спасибо за ссылку. Уверен, что другим пользователям она будет полезна, но не мне) Для себя уже решил использовать Vagrant.

Хоча я тільки краєм вуха чув про Docker з контейнерами та Vargant, але здається вони призначаються для перенесення різних конфігурацій між різними машинами. Тобто якщо ви будете локально працювати з різним конфігураційним оточенням, і ваша задача полягатиме у відтворенні та дослідженні проблем, про які говорять користувачі, то для цього мабуть вистачить і VirtualBox’а.

Не зовсім зрозуміло чому ви говорите про затратність ресурсів у випадку з VirtualBox. Невже для служби підтримки не можуть поставити машину з необхідними ресурсами?

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

Смотрите в сторону docker-compose и(или) docker в swarm mode. Может kubernetes, но, имхо, только для локальной разработки его использовать — из пушки по воробьям.

Главное: контейнеры создавать нужно (читай проще) не под проект, а под сервис. На первом «должно» быть минимум четыре контейнера, на втором три (плюс возможно ещё один в обоих случаях под апач/нжингс) . В докерфайле прописываете именно что установку софта и копирование исходников, а вещи типа инициализации базы создаёте в command или entrypoint, то есть работают они при старте контейнера. Или вообще один раз ручками запустить через docker exec или docker run скрипт миграции.

Единственное, что, не знаю в каком состоянии сейчас находится возможность запуска нативніх линукс-контенейров (сервисы же под линукс?) под виндовс, раньше штатно через docker-machine запускалась под виндой та же виртуалка с линуксом, в которой и работал докер. Но не так давно что-то анонсировали про запуск линукс-контейнеров под виндовс без полноценной виртуалки.

Спасибо большое за отзыв.В нём я как раз увидел то, что хотел:

Главное: контейнеры создавать нужно (читай проще) не под проект, а под сервис.

Следовательно, мой подход был неправильный при использовании докера для разных проектов. А описанный Вами в моём случае неудобен в применении, т.е. Docker сейчас — не мой вариант)

я просто плохо разобрался с Docker

як мінімум під php, mysql, nodejs є готові офіційні образи і навіть якщо треба доставити якийсь софт чи розширення, то є вбудовані інструменти в ці образи. одним словом просто треба було довше погуглити

Знаю о таком. Но как мне стоит всем этим добром пользоваться? Качать кучу образов для каждой версии и потом запускать контейнер на базе нужного стека? Не хотелось бы такого винегрета. А как быть с Node.js 0.10.24, к примеру? Официальный Node.js образ включает версии, начиная с 4...

а вам потрбіне рішення, яке вміщає всі енваріменти в одному інстансі? щоб не було вінігрету. якщо буде багато контейнерів з різними версіями, то можна буде їх комбінувати за потреби, або якщо вам треба протестувати щось на різних версіях, це буде дуже легко зробити.

0.10.24

не буду питати для чого вам ця версія nodejs, але тут треба буде писати Dockerfile самому.

насправді, тут все просто, якщо вам не зручно, ну то треба шукати інше рішення. Спробуйте Vagrant, наприклад :) треба мати щось для порівняння

Да, именно запуск одного проекта на разных образах в Docker мне и неудобен... Можете по поводу Vagrant в двух словах рассказать: для каких задач лучше использовать, в чём преимущества над докером при запуске разных проектов? Я так понял, у Вас есть опыт работы с ним.

в двох словах не вийде) можете в них на гітхабі почитати issues. в загальному запускається довго, перезапускається ще довше, ресурсів багато потребує, постійно проблема з тим як шарити файли між хостом і віртуалкою, кожен з методів має свої мінуси. часто фічі або взагалі не працюють, або працюють не так як очікуєш. переваги хіба в тому, що це дійсно окремий хост зі своєю оською і т.д.

Судя по всему услышанному, лучше всего использовать VirtualBox))) А Вы сами на каком варианте остановились?

нєа, vagrant це просто врапер над віртуалбоксом, так шо з віртуалбоксом буде ще більше геморою. мені подобається Docker, не скажу що рішення ідеальне, але поки найзручніше зчим працював

а что не так с VirtualBox? Поставил ОСь, налепил нужного софта, расшарил каталог с реальной машины — и крути-верти как хочешь. Хочешь — удали, хочешь — останови, хочешь — запусти, если нужно работать. Примерно по такой же схеме с Docker при разработке на локалке и работают, как я понял. Только вместо виртуальных машин — контейнеры. И ресурсов меньше у системы воруется.

vagrant удобен если вы умеете ваши шаги по настройке фиртуалки и установке софта описать используя один из provisioners (я теряюсь как это правильно выразыть не на английском) www.vagrantup.com/...​isioning/basic_usage.html

иначе не сильно много выгоды по сравнению с чистым VirtualBox (мы же помним что вагрант это просто обертка для автоматизации виртуал бокса — такой себе докер файл только для виртуалки)

Docker compose вам в помощь, в нем можно свободно настроить запуск нескольких контейнеров, настроить связь между ними, добавить все volumes итд.

Vagrant это, тот же ВиртуалБокс — по, сути надстройка над ним. Тянете готовый образ (CentOS, Ubuntu смотря что нужно) с ихнего репозитория и доустанавливаете с консоли софт, который Вам нужен. Прописываете конфиги виртуальной машины — там все просто, благо есть куча готовых\примеров. А потом в одну команду, когда Вам нужно, запускаете машину\несколько. Гуглим по фразе ’Vagrant+хабр’ - первые четыре ссылки Вашы. Удачи!

Спасибо. Буду юзать Vagrant — вариант мне нравится)

Подписаться на комментарии