Как стать автором
Обновить

Как организовать рабочие копии множества проектов для множества разработчиков на одном сервере разработки

Время на прочтение2 мин
Количество просмотров1.5K
Зачем вообще работать на сервере разработки, ведь каждый разработчик может поднять свою рабочую копию на своей локальной машине?
Во-первых, это возможно далеко не всегда — бывают случаи, когда то или иное ПО необходимое для работы проекта отказывается работать или просто не существует для ОС используемой на машине разработчика, во-вторых — версии и настройки установленного ПО придется контролировать и команда будет постоянно сталкиваться с проблемами типа «А у меня на машине работает», в то же время разработчикам придется самостоятельно устанавливать все необходимое для проекта ПО на свою машину, в-третьих — работа проекта зачастую значительно привязана к базе данных и разработчикам придется таскать дамп базы каждый раз, когда в ней будут производиться значимые для работы проекта изменения, в-четвертых — будет сложно показать клиенту наработки из такой рабочей копии.

Работать на одном и том же сервере разработки проще, так как на этом сервере уже поставлено и настроено все необходимое ПО и поднята одна копия БД проекта.

Дано

Есть два разработчика — ivan и vasja, которые работают над двумя веб-проектами project1 и project2.
Необходимо в рамках сервера разработки организовать 4 рабочих копии, которые из браузера будут доступны по следующим адресам:
http://project1.ivan.devdomain/
http://project2.ivan.devdomain/
http://project1.vasja.devdomain/
http://project2.vasja.devdomain/
где devdomain — реальный домен, например mycompanydev.ru
Разумеется каждый из этих доменов будет содержать отдельную рабочую копию проекта, что позволит разработчикам работать независимо друг от друга при этом оставаться на одном и том же сервере разработки и работать с одной и той же базой данных.

Реализация на linux сервере с использованием nginx

Я буду рассматривать только nginx, так как просто не знаю как сделать тоже самое на другом веб-сервере, возможно в комментариях кто-нибудь подскажет как сделать то же самое для Apache.
Что нам нужно:
  1. Реальный домен — для простоты и для того, чтобы наработки можно было показать клиенту с любой рабочей копии. Допустим в нашем случае это mycompanydev.ru, в DNS этого домена нужно отдать всю зону *.mycompanydev.ru на IP нашего сервера разработки.
  2. Домашние директории для каждого разработчика на сервере разработки, допустим они лежат у нас в /home/, вот так: /home/vasja/, /home/kolja/, /home/ivan/ и так далее. Разумеется у разработчиков эти директории должны быть примонтированы как сетевые диски.
  3. Рабочие копии проектов лежат в домашних директориях разработчиков — /home/ivan/project1.mycompanydev.ru/ или /home/vasja/project2.mycompanydev.ru/
  4. Осталось настроить nginx
    server {
            listen your.server.ip.addr:80;
    
            server_name .mycompanydev.ru;
    
            if ($host ~ "^([^\.]+)\.([^\.]+)\.mycompanydev\.ru$" ) {
                set $lroot /home/$2/$1.mycompanydev.ru;
            }
    
            root $lroot;
    
            # далее $lroot можно использовать например для fastcgi_param SCRIPT_FILENAME
    }

Теперь новый проект может быть добавлен простым созданием папки в рабочей директории разработчика, например вот так /home/vasja/superproject.mycompanydev.ru и сразу же будет доступен из браузера по адресу http://superproject.vasja.mycompaydev.ru/ без необходимости что-либо настраивать.

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

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

Ну и как обычно — вопросы, советы, критика — все приветствуется.
Теги:
Хабы:
Всего голосов 46: ↑32 и ↓14+18
Комментарии57

Публикации

Истории

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург