Это старая версия документа!
Стандартная система веб-разработчика представляет из себя его личную машину с установленным пакетом, типа Denver или appserv, который включает в себя apache+php+mysql, несколько папок с копиями репозиториев для проектов, которое позволяем ему просматривать и тестировать скрипты на своей локальной машине. В этом есть много плюсов, например, если это на ноутбуке, то можно носить с собой и дома работать, но есть и минусы, к примеру, если надо показать кому то свои наработки, что надо приглашать непосредственно к своему рабочему месту, или просить человека настраивать файл hosts, что бы работали виртуальные хосты.
Возникла идея, создать какой нибудь сервер с виртуальными сервисами, для работы с которым на рабочую машину веб-разработчика не надо было бы ничего ставить.
В конечном итоге, было принято решение в качестве ОС использовать FreeBSD, samba, систему jail.
Каждому пользователю выдается jail со своим собственным IP, доступом по ssh, mysql сервером, apache22 настроенным под массовый виртуальный хостинг, с возможность указания дополнительных виртуальных хостов, которые не подходят под шаблон стандартного виртуального хоста, расшареной папкой через samba, куда просто путем добавления каталога и скриптов автоматически появляется поддомен третьего уровня.
Для упрощения, будем использовать вариант с тремя разработчиками.
Для настройки джейлов будем использовать свежеустановленный сервер с FreeBSD. Кто то использует vim или vi, кто то nano, мне удобно пользоваться встроенным редактором в mc.
Вся эта система работает в офисе, компьютеры которого используют локальный DNS-сервер, где прописаны сервера разработчиков для теста. Создаем, к примеру, в офисе зону local. И домены второго уровня, для джейлов разработчиков, например user001.local user002.local user003.local.
Для начала, создаем саму зону .local
У меня на сервере настройки и зоны лежат в каталоге /etc/namedb
Берем стандартный кофиг named.conf и добавляем туда строчку:
include "/etc/namedb/named.zones.conf";
Его содержимое:
zone "local" { type master; file "/etc/namedb/master/local.zone"; }; zone "user001.local" { type master; file "/etc/namedb/master/user001.local.zone"; }; zone "user002.local" { type master; file "/etc/namedb/master/user002.local.zone"; }; zone "user003.local" { type master; file "/etc/namedb/master/user003.local.zone"; };
И, соответственно, сами зоны:
/etc/namedb/master/user001.local.zone:
$ORIGIN . $TTL 86400 ; 1 day user001.local IN SOA ns.user001.local. root.ns.user001.local. ( 2010040806 ; serial 7200 ; refresh (2 hours) 3600 ; retry (1 hour) 1209600 ; expire (2 weeks) 86400 ; minimum (1 day) ) NS ns.user001.local. $ORIGIN user001.local. ns A 10.8.0.1 @ A 10.8.0.201 * A 10.8.0.201
/etc/namedb/master/user002.local.zone:
$ORIGIN . $TTL 86400 ; 1 day user002.local IN SOA ns.user002.local. root.ns.user002.local. ( 2010040806 ; serial 7200 ; refresh (2 hours) 3600 ; retry (1 hour) 1209600 ; expire (2 weeks) 86400 ; minimum (1 day) ) NS ns.user002.local. $ORIGIN user002.local. ns A 10.8.0.1 @ A 10.8.0.202 * A 10.8.0.202
/etc/namedb/master/user001.local.zone:
$ORIGIN . $TTL 86400 ; 1 day user003.local IN SOA ns.user003.local. root.ns.user003.local. ( 2010040806 ; serial 7200 ; refresh (2 hours) 3600 ; retry (1 hour) 1209600 ; expire (2 weeks) 86400 ; minimum (1 day) ) NS ns.user003.local. $ORIGIN user003.local. ns A 10.8.0.1 @ A 10.8.0.203 * A 10.8.0.203
Содержимое файла local.zone
$ORIGIN . $TTL 86400 ; 1 day local IN SOA ns.local. root.ns.local. ( 2010040807 ; serial 7200 ; refresh (2 hours) 3600 ; retry (1 hour) 1209600 ; expire (2 weeks) 86400 ; minimum (1 day) ) NS ns.local. $ORIGIN local. localhost A 127.0.0.1 ns A 10.8.0.1 mail A 10.8.0.1 gw A 10.8.0.1 dev A 10.8.0.5 hq A 10.8.0.200 svn A 10.8.0.230