ShvetsGroup archive

Инфраструктура ShvetsGroup: окружения разработки и сервера

· Все статьи

Read in English

iStock_000011296304XSmall.jpg

У каждой серьезной команды разработки со временем возникает надобность в стандартизации окружений разработки. Мы разделяем их на несколько типов:

Офисная инфраструктура

Каждое рабочее место разработчика представляет собой средне-мощную машину (Acer Aspire X3200), задача которой хорошо крутить офисный софт, тяжелые IDE типа Eclipse, Net Beans и прочих. Разработчик может использовать на ней как Windows (в большинстве случаев), так и Linux.

В самом начале нашей работы, каждый разработчик «крутил» локальный веб-сервер у себя на машине самостоятельно. Но со временем, эта ситуация перестала нас устраивать по следующим причинам:

Мы решили все эти проблемы покупкой относительно мощного сервера в офис, на котором установлен и работает веб-сервер и локальные песочницы разработчиков, с которыми они работают по сети.

Расскажу подробнее как это работает:

По своему опыту, данную систему реально сконфигурировать, даже если вы не считаете себя мега-админом и знаете только как ходить по файлам в линуксе. Конечно же, не без помощи Google.

Внешние сервера разработки

Офисная система замечательно решает проблемы in-house команды в ежедневной разработке. Тем не менее, существует еще несколько нерешенных проблем:

Облако Amazon

Данная проблема витала в воздухе пока мы не познакомились с облачными сервисами Amazon EC2. В двух словах, эти сервисы позволяют вам поднимать сервера разных конфигураций с оплатой за то, сколько вы по-факту использовали (например, 3 часа работы сервера + 3 гигабайта сетевого трафика), в различных регионах планеты (США, Европа, Сингапур). Поэтому, главное, что стоит понимать об амазоне — он позволяет в любой день за 5 минут арендовать 20 серверов с 60 гигабайтами памяти каждый на пару часов. С классическими хостингами вы такого не сделаете.

Кроме того, существуют сотни "снимков" готовых сконфигурированных систем, которые вы можете наложить на железо, которое вы только что арендовали. Мало того, вы сможете сами создавать такие снимки и использовать их в дальнейшем (например, если у вас громадное приложение, требующее массу серверов).

Сервера разработки тестирования

В общем случае, сервера тестирования у нас построены по похоже модели с офисным — для сервера существует домен, и с помощью mod_vhost_alias, можно получать доступ к произвольным проектам, и пусть к этим экземплярам будет выглядеть как домен третьего-четвертого уровня (напр. http://superproject.test.shvetsgroup.com/). На уровне конфигурации, разница составляет в том, что «главными» на сервере разработки являются проекты, а не разработчики.

Я много раз видел, как компании давали каждому разработчику рутовый доступ на сервера разработки и репозитории. К чему это может привести знают многие, особенно при привлечении еще не проверенных удаленных работников и команд. Для нас это было и есть особым моментом, поэтому для серверов тестирования/разработки соблюдается строгое разграничение прав доступа к проектам сервера, как извне, так и самими разработчиками. Никто из разработчиков не имеет доступа к "соседним" проектам на севере вообще, а веб-доступ к проектам закрыт http авторизацией (это также защищает от нежелательной индексации тестовой версии проекта поисковиками).

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

Сервер организационного ПО

Еще одна Amazon-машина, на которой хостятся SVN-репозитории, багтрекер и система документации (подробно об этом читайте во второй части).

Локальные машины удаленных разработчиков

Очевидно, мы никак не можем повлиять на железо/ПО, используемое на «той стороне», тем не менее, за все время работы, мы составили некоторый список того, чем должен владеть успешный удаленный разработчик для эффективной работы: