Это старая версия документа!
Стандартная система веб-разработчика представляет из себя его личную машину с установленным пакетом, типа 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