Это старая версия документа!
Стандартная система веб-разработчика представляет из себя его личную машину с установленным пакетом, типа Denver или appserv, который включает в себя apache+php+mysql, несколько папок с копиями репозиториев для проектов, которое позволяем ему просматривать и тестировать скрипты на своей локальной машине. В этом есть много плюсов, например, если это на ноутбуке, то можно носить с собой и дома работать, но есть и минусы, к примеру, если надо показать кому то свои наработки, что надо приглашать непосредственно к своему рабочему месту, или просить человека настраивать файл hosts, что бы работали виртуальные хосты.
Возникла идея, создать какой нибудь сервер с виртуальными сервисами, для работы с которым на рабочую машину веб-разработчика не надо было бы ничего ставить.
В конечном итоге, было принято решение в качестве ОС использовать FreeBSD, samba, систему jail.
Каждому пользователю выдается jail со своим собственным IP, доступом по ssh, mysql сервером, apache22 настроенным под массовый виртуальный хостинг, с возможность указания дополнительных виртуальных хостов, которые не подходят под шаблон стандартного виртуального хоста, расшареной папкой через samba, куда просто путем добавления каталога и скриптов автоматически появляется поддомен третьего уровня.
Для упрощения, будем использовать вариант с тремя разработчиками.
Добавляем необходимое нам количество IP адресов на активный интерфейс, по одному на каждый джейл.
ifconfig em0 add alias 10.8.0.200/32 ifconfig em0 add alias 10.8.0.201/32 ifconfig em0 add alias 10.8.0.202/32 ifconfig em0 add alias 10.8.0.203/32
Записываем изменения в файле /etc/rc.conf
ifconfig_em0_alias0="inet 10.8.0.200/32" ifconfig_em0_alias1="inet 10.8.0.201/32" ifconfig_em0_alias2="inet 10.8.0.202/32" ifconfig_em0_alias3="inet 10.8.0.203/32"
Замечу, что адрес сервера 10.8.0.5, но мы так же создадим один дополнительный джейл и повесим его на адрес 10.8.0.200, это будет главный, управляющий джейл. Как, для чего, и зачем - пояснения будут даны позже.
Для настройки джейлов будем использовать свежеустановленный сервер с FreeBSD. Кто то использует vim или vi, кто то nano, мне удобно пользоваться встроенным редактором в mc.
Поставим порт управления джейлами
cd /usr/ports/sysutils/ezjail make install clean
Далее, надо установить мир для джейлов, для этого используем команду
ezjail-admin create
Он лезет в интернет и качает оттуда сборку FreeBSD под текущую систему. В принципе, можно было бы воспользоваться исходниками FreeBSD, если бы Вы их поставили, но так гораздо быстрее. Пока оно все ставиться, можно пойти и налить себе чайку/сходить покурить.
Вся эта система работает в офисе, компьютеры которого используют локальный 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
Содержимое файла /etc/namedb/master/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