Шило в известном месте всё никак не даёт мне покоя.
И решил я поэкспериментировать с установкой сервера дома.
Итак, дано:
1. Домашний интернет с внешним ip на роутере, канал туда/обратно — 8 мбит, провайдер — QWERTY *
2. Бюджет не больше 10 тысяч рублей — чем меньше, тем лучше. **
3. Жгучее желание экспериментов и чего-нибудь эдакого ***
* К сожалению, мой дом не подключает Корбина, у которой более широкие каналы. Приходится довольствоваться тем, что есть
** Получилось путём более-менее реального подсчёта стоимости комплектующих на среднестатический компьютер
*** Для тех, кто хмыкнет и скажет — «эка невидаль, я такое регулярно делаю» — я не так часто что-то настраиваю, больше пишу под уже настроенное, и для меня это чистой воды развлечение — что-то сделать своими руками=)
Ну, все процедуры тут, под катом.
Сразу хочу сказать, что у меня это работает — так, как есть. Дополнительно с бубном я не плясал — но тут вытяжки из моих гуглений и мануалокурений.
Вероятно, что-то можно настроить более гибко или качественно, и я крайне буду рад советам или решениям=)
Подумал, что надо покупать:
1. Материнская плата
2. Процессор
3. Жёсткий диск
4. Память
5. Корпус
6. Кулер на процессор
Выбрал магазин Oldi, собрал online комплектующих на сумму как раз около 10 тысяч — упирая на Intel. Всю ночь ворочался, думал, и на следующее утро пересобрал заказ, упирая на AMD. Разница в деньгах получилась около двух тысяч, а AMD-конфигурация — более подверженная будущим апгрейдам. Например, на Socket 775 в Oldi не было материнских плат до 2k, позволяющих добить оперативку до 16 гигабайт. В общем, решил попробовать — ибо с AMD давно не имел дела.
Проц — AMD x64 2.4 ггц, жёсткий диск взял один, SATAII на 320 гигабайт (как вариант — куплю ещё один расширю до рейд 1), памяти — Кингстон 800мгц, две планки по 2 гигабайта (поставились в Dual), самый дешевый корпус и кулер Igloo — не блистающий дороговизной, но вполне себе охлаждающий (за несколько дней температура не превысила 60 градусов, судя по sensors).
Торжественно с этим всем приехал домой, собрал, подключил к монитору, подключил клавиатуру, провод от роутера, внешний USB-привод, и через полчаса уже смотрел на свежепоставленный Debian.
Настроил переадресацию портов на роутере:
После чего исполнил три команды:
и улёгся на диван с ноутбуком, продолжая диалог с сервером уже через Putty.
Цели были прозаичны:
1. Bind9
2. Apache2
3. PHP5
4. MySQL 5
5. SVN
6. Trac
Всё это предполагалось сделать на одном недавно купленном домене (предположим, habr.ru), который ещё не был нигде проделегирован.
Учитывая то, что о настройке Bind9 лишь слышал, — сразу полез в мануалы и примеры.
В итоге настройку произвёл по этой инструкции, изменив лишь настройку конкретной зоны для домена.
Кроме того, мне хотелось сразу подключить Google Applications для домена, чтобы не иметь дел с настройкой sendmail — в настройках ниже они легко наблюдаются.
Получилось следующее:
1. Создал папку /etc/bind/sites
2. В настройках /etc/bind/named.conf, в самом конце:
3. В /etc/bind/named.conf.skazkin:
4. В /etc/bind/sites/habr.ru:
На что хватило понимания мануала.
Непонятно было то, что при попытке прописать всё без @-знака, бинд переставал понимать, что от него хотят — ещё раз прорыв гугл, я подозреваю, что это из-за неправильных отступов (*hic*)?
В общем, тут я как-то вот выкрутился — факт остаётся фактом, домен проделегировался. Но об этом немного позже.
Помимо primary-зоны, мне понадобилось создать ещё и Slave. Пошёл на давно купленный VDS с как-то странно установленным дебианом, там прописал:
1. /etc/bind/named.conf
2. Соответственно, в /var/cache/bind/habr.ru всё то же, что и на домашнем сервере:
После чего и дома, и на VDS сделал
От лукапа должен получиться успешный ресолв:
После чего уже при следующих изменениях на домашнем сервере делал только
На VDS отчего-то такого не было, приходилось рестартить демон. Ну, правда, там Bind8.
Через 6 часов, в 23 часа, получив успешную делегацию и успев поужинать, попить чаю и посмотреть телевизор, пошёл настраивать всё прилагающееся.
В дебиане установить апач — легче лёгкого.
В итоге я заполучил с пылу — с жару работающие Apache2, MySQL 5, PHP5 с нужными модулями.
Учитывая то, что MySQL по умолчанию ставится с пустым паролем —
Ну, и настроить виртуальные хосты.
Решаю всё хранить в /home/sites/
Иду в /etc/apache2/sites-availible
Создаю там
И в habr.ru:
Затем — рестарт апача
Оставалось то, о чём я уже писал раньше, но про VDS и настраивая это в первый раз — а именно —
Как обычно —
Трак подтянул за собой свои зависимости, и я приступил.
Я выбрал для себя хранилищем сайта папку /home/sites/habr.ru, посему решил около этого и крутиться:
Начал с SVN, ориентируясь на этот мануал
Опустив строчки про авторизацию и генерацию авторизационных ключей, я сразу полез в Apache
Опять иду в /etc/apache2/sites-availible
В svn.habr.ru:
Опять перезапускаю Апач:
И — по svn.habr.ru — у меня находится репозиторий.
Попил чаю, приступил к Trac.
Трак решил положить в /home/sites/trac
Сначала создать базу и пользователя:
СВН указывается тот, что уже сделали: /home/sites/svn
А когда trac спросил про БД-хранилище, ответил ему:
Подправил руками /home/sites/trac/conf/trac.ini — всякие мелкие параметры, и в секции [trac] указал:
После чего полез в конфиг Apache — создавать хост.
В самом trac.habr.ru:
После чего — рестарт апача
И в итоге мы имеем незапароленные (внимательно с этим, я-то запаролил позже на глобальном уровне — а кто будет настраивать — не забудьте про секьюрность) SVN и Trac по соответствующим адресам:
svn.habr.ru
trac.habr.ru
В итоге у меня есть работающий (в ближайшем будущем на антресолях) сервер, на котором у меня поднят Trac, SVN, Apache2, MySQL, PHP, Bind9 и крутятся несколько сайтов.
А так же я хорошо поразвлекался и принёс пользу не только себе, но и семье — перевесив почту домашних на одном из моих доменов на гугл.апс.
Кроме того, я избавился от необходимости оплачивать медленную VDS (скоро перенесу secondary-зону к другу), теперь я знаю что происходит когда мои сайты недоступны (а не «у нас технические проблемы»), а так же могу делать столько доменов, субдоменов и прочего сколько хочется, а не сколько стоит в лимитах хостерского аккаунта.
А так же, теперь торрент качает без «технических» пауз (когда я с ноутбуком на работе).
Единственный минус всего этого — узкий обратный канал. Но у этого QWERTY, в котором я наблюдаюсь, есть трафиколимитированные «широкие» каналы — так что возможно, в скором будущем я буду им отстёгивать ещё 300 рублей за 100 мбит (если обратный трафик не тарифицируется), и буду проводить эксперименты с второй сетевой картой (чтобы торрент с сервера лил без лимитов по другому проводу)
Вот, как-то так.) Море удовольствия для меня и хорошее настроение на неделю=)
Дополнительно, вопрос к телезрителям: в какой блог лучше перенести для широкой публики — «Я умный», или «Linux для всех», или «Системное администрирование»?=) Учитывая не особо глубокие инструкции по применению?)
UPDATE: Вот только что немношка поседел — сервер перестал отзываться. Я забыл настроить самое главное — статический ip!
Позвонил жене, отдал инструкции о новых перенаправлениях, и — вуаля —
На одну проблему стало меньше=)
Сегодня приду домой и воткну туда Wi-Fi — и обновлю этот пост с учётом Wi-Fi-настройки=)
UPDATE2:
Не проверил работоспособность ProFTPD извне!
Надо открыть /etc/proftpd/proftpd.conf и туда:
И внести соответствующие перенаправления портов на роутере! (для пассивных портов.). У меня их 10 — потому что не ожидается много коннектов
И решил я поэкспериментировать с установкой сервера дома.
Итак, дано:
1. Домашний интернет с внешним ip на роутере, канал туда/обратно — 8 мбит, провайдер — QWERTY *
2. Бюджет не больше 10 тысяч рублей — чем меньше, тем лучше. **
3. Жгучее желание экспериментов и чего-нибудь эдакого ***
* К сожалению, мой дом не подключает Корбина, у которой более широкие каналы. Приходится довольствоваться тем, что есть
** Получилось путём более-менее реального подсчёта стоимости комплектующих на среднестатический компьютер
*** Для тех, кто хмыкнет и скажет — «эка невидаль, я такое регулярно делаю» — я не так часто что-то настраиваю, больше пишу под уже настроенное, и для меня это чистой воды развлечение — что-то сделать своими руками=)
Ну, все процедуры тут, под катом.
Сразу хочу сказать, что у меня это работает — так, как есть. Дополнительно с бубном я не плясал — но тут вытяжки из моих гуглений и мануалокурений.
Вероятно, что-то можно настроить более гибко или качественно, и я крайне буду рад советам или решениям=)
Подумал, что надо покупать:
1. Материнская плата
2. Процессор
3. Жёсткий диск
4. Память
5. Корпус
6. Кулер на процессор
Выбрал магазин Oldi, собрал online комплектующих на сумму как раз около 10 тысяч — упирая на Intel. Всю ночь ворочался, думал, и на следующее утро пересобрал заказ, упирая на AMD. Разница в деньгах получилась около двух тысяч, а AMD-конфигурация — более подверженная будущим апгрейдам. Например, на Socket 775 в Oldi не было материнских плат до 2k, позволяющих добить оперативку до 16 гигабайт. В общем, решил попробовать — ибо с AMD давно не имел дела.
Проц — AMD x64 2.4 ггц, жёсткий диск взял один, SATAII на 320 гигабайт (как вариант — куплю ещё один расширю до рейд 1), памяти — Кингстон 800мгц, две планки по 2 гигабайта (поставились в Dual), самый дешевый корпус и кулер Igloo — не блистающий дороговизной, но вполне себе охлаждающий (за несколько дней температура не превысила 60 градусов, судя по sensors).
Торжественно с этим всем приехал домой, собрал, подключил к монитору, подключил клавиатуру, провод от роутера, внешний USB-привод, и через полчаса уже смотрел на свежепоставленный Debian.
Настроил переадресацию портов на роутере:
53 порт => Bind9
80 порт => Apache
21 порт => FTP
22 порт => SSH
После чего исполнил три команды:
apt-get update
apt-get upgrade
apt-get install ssh
и улёгся на диван с ноутбуком, продолжая диалог с сервером уже через Putty.
Цели были прозаичны:
1. Bind9
2. Apache2
3. PHP5
4. MySQL 5
5. SVN
6. Trac
Всё это предполагалось сделать на одном недавно купленном домене (предположим, habr.ru), который ещё не был нигде проделегирован.
Bind9. Настройка чайника.
Учитывая то, что о настройке Bind9 лишь слышал, — сразу полез в мануалы и примеры.
В итоге настройку произвёл по этой инструкции, изменив лишь настройку конкретной зоны для домена.
Кроме того, мне хотелось сразу подключить Google Applications для домена, чтобы не иметь дел с настройкой sendmail — в настройках ниже они легко наблюдаются.
Получилось следующее:
1. Создал папку /etc/bind/sites
2. В настройках /etc/bind/named.conf, в самом конце:
include "/etc/bind/named.conf.skazkin";
3. В /etc/bind/named.conf.skazkin:
zone "habr.ru" {
type master;
file "/etc/bind/sites/habr.ru";
};
4. В /etc/bind/sites/habr.ru:
$ORIGIN habr.ru.
$TTL 86400 ; 1 day
@ IN SOA habr.ru. master.habr.com. (
2008291104; serial
10800 ; refresh (3 hours)
3600 ; retry (15 minutes)
3600000 ; expire (1 week)
86400 ; minimum (1 day)
)
@ IN NS ns.habr.ru.
@ IN NS ns.vds.ru.
@ IN A 111.222.333.444
@ IN MX 10 ASPMX.L.GOOGLE.COM.
@ IN MX 20 ALT1.ASPMX.L.GOOGLE.COM.
@ IN MX 20 ALT2.ASPMX.L.GOOGLE.COM.
@ IN MX 30 ASPMX2.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX3.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX4.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX5.GOOGLEMAIL.COM.
ns IN A 111.222.333.444
svn IN CNAME habr.ru.
trac IN CNAME habr.ru.
www IN CNAME habr.ru.
На что хватило понимания мануала.
Непонятно было то, что при попытке прописать всё без @-знака, бинд переставал понимать, что от него хотят — ещё раз прорыв гугл, я подозреваю, что это из-за неправильных отступов (*hic*)?
В общем, тут я как-то вот выкрутился — факт остаётся фактом, домен проделегировался. Но об этом немного позже.
Помимо primary-зоны, мне понадобилось создать ещё и Slave. Пошёл на давно купленный VDS с как-то странно установленным дебианом, там прописал:
1. /etc/bind/named.conf
zone "habr.ru" {
type slave;
file "/var/cache/bind/habr.ru";
masters {
111.222.333.444;
};
};
2. Соответственно, в /var/cache/bind/habr.ru всё то же, что и на домашнем сервере:
$ORIGIN habr.ru.
$TTL 86400 ; 1 day
@ IN SOA habr.ru. master.habr.com. (
2008291104; serial
10800 ; refresh (3 hours)
3600 ; retry (15 minutes)
3600000 ; expire (1 week)
86400 ; minimum (1 day)
)
@ IN NS ns.habr.ru.
@ IN NS ns.vds.ru.
@ IN A 111.222.333.444
@ IN MX 10 ASPMX.L.GOOGLE.COM.
@ IN MX 20 ALT1.ASPMX.L.GOOGLE.COM.
@ IN MX 20 ALT2.ASPMX.L.GOOGLE.COM.
@ IN MX 30 ASPMX2.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX3.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX4.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX5.GOOGLEMAIL.COM.
ns IN A 111.222.333.444
svn IN CNAME habr.ru.
trac IN CNAME habr.ru.
www IN CNAME habr.ru.
После чего и дома, и на VDS сделал
/etc/init.d/bind9 restart # на всякий случай - не будет ли ошибок при рестарте
nslookup habr.ru 127.0.0.1
От лукапа должен получиться успешный ресолв:
bash:/etc/bind# nslookup habr.ru 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: habr.ru
Address: 111.222.333.444
После чего уже при следующих изменениях на домашнем сервере делал только
rnds reload
На VDS отчего-то такого не было, приходилось рестартить демон. Ну, правда, там Bind8.
Через 6 часов, в 23 часа, получив успешную делегацию и успев поужинать, попить чаю и посмотреть телевизор, пошёл настраивать всё прилагающееся.
Apache2, PHP, MySQL
В дебиане установить апач — легче лёгкого.
apt-get install apache2
apt-get install mysql-client mysql-server
apt-get install php5 php5-mysql php5-xmlrpc php5-cli php5-gd php5-curl php5-xsl
В итоге я заполучил с пылу — с жару работающие Apache2, MySQL 5, PHP5 с нужными модулями.
Учитывая то, что MySQL по умолчанию ставится с пустым паролем —
mysqladmin -uroot password мегасекурныйпароль
Ну, и настроить виртуальные хосты.
Решаю всё хранить в /home/sites/
mkdir /home/sites
mkdir /home/sites/habr.ru
Иду в /etc/apache2/sites-availible
Создаю там
touch habr.ru
ln -s /etc/apache2/sites-availible/habr.ru /etc/apache2/sites-enabled/habr.ru
И в habr.ru:
<VirtualHost *>
ServerAdmin master@habr.ru
DocumentRoot "/home/sites/habr.ru"
ServerName habr.ru
ServerAlias www.habr.ru
ErrorLog "/var/log/apache2/habr.ru.error.log"
CustomLog "/var/log/apache2/habr.ru.access.log" common
</VirtualHost>
Затем — рестарт апача
/etc/init.d/apache2 restart
Оставалось то, о чём я уже писал раньше, но про VDS и настраивая это в первый раз — а именно —
SVN + TRAC
Как обычно —
apt-get install subversion
apt-get install libapache2-svn
apt-get install trac
Трак подтянул за собой свои зависимости, и я приступил.
Я выбрал для себя хранилищем сайта папку /home/sites/habr.ru, посему решил около этого и крутиться:
Начал с SVN, ориентируясь на этот мануал
mkdir /home/sites/svn
svnadmin create --fs-type fsfs /home/sites/svn
groupadd subversion
adduser svn_user --ingroup subversion
Опустив строчки про авторизацию и генерацию авторизационных ключей, я сразу полез в Apache
Опять иду в /etc/apache2/sites-availible
cd /etc/apache2/sites-availible
touch svn.habr.ru
ln -s /etc/apache2/sites-availible/svn.habr.ru /etc/apache2/sites-enabled/svn.habr.ru
В svn.habr.ru:
<VirtualHost *>
ServerAdmin master@habr.ru
DocumentRoot "/home/sites/svn"
ServerName svn.habr.ru
ErrorLog "/var/log/apache2/svn.habr.ru.error.log"
CustomLog "/var/log/apache2/svn.habr.ru.access.log" common
<Location />
DAV svn
SVNPath /home/sites/svn
</Location>
</VirtualHost>
Опять перезапускаю Апач:
/etc/init.d/apache2 restart
И — по svn.habr.ru — у меня находится репозиторий.
Попил чаю, приступил к Trac.
Трак решил положить в /home/sites/trac
Сначала создать базу и пользователя:
mysqladmin -uroot -p create trac
Выполнить запрос: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON trac.* TO 'trac'@'localhost' IDENTIFIED BY 'tracmegapassword';
mkdir /home/sites/trac
trac-admin initenv /home/sites/trac
СВН указывается тот, что уже сделали: /home/sites/svn
А когда trac спросил про БД-хранилище, ответил ему:
mysql://trac:tracmegapassword@localhost:3306/trac
Подправил руками /home/sites/trac/conf/trac.ini — всякие мелкие параметры, и в секции [trac] указал:
[trac]
...
htdocs_location = /tracdocs/
После чего полез в конфиг Apache — создавать хост.
cd /etc/apache2/sites-availible/
touch trac.habr.ru
ln -s /etc/apache2/sites-availible/trac.habr.ru /etc/apache2/sites-enabled/trac.habr.ru
В самом trac.habr.ru:
<VirtualHost *>
ServerAdmin master@habr.ru
DocumentRoot "/home/sites/trac/htdocs"
ServerName trac.habr.ru
ErrorLog "/var/log/apache2/trac.habr.ru.error.log"
CustomLog "/var/log/apache2/trac.habr.ru.access.log" common
<Location />
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /home/sites/trac
PythonOption TracUriRoot /
</Location>
Alias /tracdocs /usr/share/trac/htdocs
<Location /tracdocs>
SetHandler None
</Location>
</VirtualHost>
После чего — рестарт апача
/etc/init.d/apache2 restart
И в итоге мы имеем незапароленные (внимательно с этим, я-то запаролил позже на глобальном уровне — а кто будет настраивать — не забудьте про секьюрность) SVN и Trac по соответствующим адресам:
svn.habr.ru
trac.habr.ru
В итоге у меня есть работающий (в ближайшем будущем на антресолях) сервер, на котором у меня поднят Trac, SVN, Apache2, MySQL, PHP, Bind9 и крутятся несколько сайтов.
А так же я хорошо поразвлекался и принёс пользу не только себе, но и семье — перевесив почту домашних на одном из моих доменов на гугл.апс.
Кроме того, я избавился от необходимости оплачивать медленную VDS (скоро перенесу secondary-зону к другу), теперь я знаю что происходит когда мои сайты недоступны (а не «у нас технические проблемы»), а так же могу делать столько доменов, субдоменов и прочего сколько хочется, а не сколько стоит в лимитах хостерского аккаунта.
А так же, теперь торрент качает без «технических» пауз (когда я с ноутбуком на работе).
Единственный минус всего этого — узкий обратный канал. Но у этого QWERTY, в котором я наблюдаюсь, есть трафиколимитированные «широкие» каналы — так что возможно, в скором будущем я буду им отстёгивать ещё 300 рублей за 100 мбит (если обратный трафик не тарифицируется), и буду проводить эксперименты с второй сетевой картой (чтобы торрент с сервера лил без лимитов по другому проводу)
Вот, как-то так.) Море удовольствия для меня и хорошее настроение на неделю=)
Дополнительно, вопрос к телезрителям: в какой блог лучше перенести для широкой публики — «Я умный», или «Linux для всех», или «Системное администрирование»?=) Учитывая не особо глубокие инструкции по применению?)
UPDATE: Вот только что немношка поседел — сервер перестал отзываться. Я забыл настроить самое главное — статический ip!
Позвонил жене, отдал инструкции о новых перенаправлениях, и — вуаля —
mcedit /etc/network/interfaces
# удаляю всё, что относится к eth1 и добавляю:
auto eth1
iface eth1 inet static
address 192.168.1.5
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.0.255
gateway 192.168.1.1
#сохраняю, закрываю и потом...
/etc/init.d/networking restart
На одну проблему стало меньше=)
Сегодня приду домой и воткну туда Wi-Fi — и обновлю этот пост с учётом Wi-Fi-настройки=)
UPDATE2:
Не проверил работоспособность ProFTPD извне!
Надо открыть /etc/proftpd/proftpd.conf и туда:
DefaultAddress 111.222.333.444
Port 21
PassivePorts 60000 60010
MasqueradeAddress 111.222.333.444
И внести соответствующие перенаправления портов на роутере! (для пассивных портов.). У меня их 10 — потому что не ожидается много коннектов