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

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

Дано

Есть два разработчика — 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/ без необходимости что-либо настраивать.

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

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

Ну и как обычно — вопросы, советы, критика — все приветствуется.