Инструменты пользователя

Инструменты сайта


freebsd:dev

Это старая версия документа!


О проекте

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

У меня на сервере самый большой размер имеет раздел /home. Поэтому, берем файл примеров настройки ezjail и копируем его в конфигурационный файл

cd /usr/local/etc
cp ezjail.conf.sample ezjail.conf

В нем берем строку

ezjail_jaildir=/usr/jails

И приводим к виду

ezjail_jaildir=/home/jails

Сохраняем файл и устанавливаем мир для джейлов, для этого используем команду

ezjail-admin create

Он лезет в интернет и качает оттуда сборку FreeBSD под текущую систему. В принципе, можно было бы воспользоваться исходниками FreeBSD, если бы Вы их поставили, но так гораздо быстрее. Пока оно все ставиться, можно пойти и налить себе чайку/сходить покурить.

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

Настройка bind

Вся эта система работает в офисе, компьютеры которого используют локальный 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
freebsd/dev.1295609903.txt.gz · Последнее изменение: 2011/01/21 14:38 — linko22@gmail.com