Халик Алешин
Поднимаем сервер для локальных сетей, малых офисов и фирм на одном дыхании...
Сегодня тема такая: разворачиваем сервер на базе ос Linux (Open Suse) за пол дня, "из коробки". Такое бывает, когда работаешь в маленькой фирме, где ты и администратор, и программист, и дизайнер, в общем, все в одном. И каким-то прекрасным ранним утром, когда ты сидишь и спокойно пьешь кофе, директору обязательно придет в голову светлая идея: "Пора вести нормальный учет товара/средств/клиентов" или еще что-нибудь в этом духе. Поверьте моему опыту, она ему обязательно придет. Поскольку более компетентного специалиста чем вы в фирме нет, вам приходится писать эту базу данных. Но на этом трудности не кончатся, ведь базы данных фирм должны быть хорошо защищены, всегда доступны, работать без перебоев, так как временно отключенная база приносит убыток фирме. Поэтому лучше всего держать их на личном сервере фирмы. Но это не единственная ппричина. Приплюсуем к этому:
Данные всегда доступны с высокой скоростью.
Кроме сотрудников фирмы никто не имеет доступ к данным, так как сервер не имеет доступа в Интернет.
Полный контроль над сервером и данными.
Быстрое реагирование на сбой сервера/оборудования.
И многое другое. Но вот развернуть такой сервер не так-то просто, особенно если в фирме все компьютеры "не мощные" и под Windows сервер ставить просто нереально, так как он не будет реагировать с нужной скоростью. Все также помнят, что Windows очень нестабильная система (по сравнению с Linux), под Windows очень много троянских программ и вирусов (более 140 тысяч, а для Linux около 30), и переустанавливать систему каждый месяц из-за вирусов или просто из-за того, что ей "расхотелось" работать - это просто нереально. Поэтому выбор падает на Linux: эта операционная система не требовательна к ресурсам, может работать много месяцев подряд без перезагрузки, основные враги таких серверов - уборщицы.
Но не только для личных нужд фирм собираются такие сервера, на них можно зарабатывать неплохие деньги, предоставляя различные услуги типа web-хостинг, файловый сервер, почта, прокси, рассылка писем, базы данных, кластеры и т.д. Да и рядовые пользователи ставят у себя не мощные сервера, например, ради какой-нибудь любимой сетевой игры.
Сегодня мы соберем такой сервер, подберем железо, установим все нужные пакеты и настроим сервер и все нужные приложения. Мы установим связку Apache + PHP + MySQL + Phpmyadmin + ProFTPd.
Apache + PHP + MySQL - для размещения сайта на сервере
Phpmyadmin - для управления базами данных
MySQL - для размещения баз данных
ProFTPd - для размещения файлового хранилища
Apache - HTTP-сервер, свободный web-сервер. С апреля 1996 г. это самый популярный HTTP-сервер в Интернете; он работает на половине всех web-серверов. Основными достоинствами Apache считаются надежность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Поддерживает IPv6 (
http://www.httpd.apache.org/).
PHP - язык программирования, созданный для генерации HTML-страниц на web - сервере и работы с базами данных. В области программирования для Сети, PHP - один из популярнейших скриптовых, благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP (
http://www.php.net/).
MySQL - решение для малых и средних приложений. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удаленные клиенты (
http://www.mysql.com/).
Phpmyadmin - web-приложение с открытым кодом, написанное на языке PHP и представляющее собой web-интерфейс для администрирования баз данных MySQL. phpMyAdmin позволяет через браузер осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у web-разработчиков, так как позволяет управлять СУБД MySQL без непосредственного ввода SQL команд, предоставляя дружественный интерфейс (
http://www.phpmyadmin.net/).
ProFTPd - FTP сервер с открытым исходным кодом, предназначенный обмена файлами в компьютерных сетях. FTP позволяет подключаться к серверу, просматривать содержимое каталогов и загружать файлы с сервера или на сервер; кроме того, возможен режим передачи файлов между серверами (
http://www.proftpd.org).
Что же нам дают эти пакеты? Наш сервер будет работать на двух интерфейсах (две сетевые карты), внешний интерфейс (в сети Интернет) и внутренний режим (локальная сеть). Они отличаются только параметрами доступа (FireWall), на внешнем интерфейсе у нас будет web-сервер (HTTP 80) и ftp-сервер (FTP 21). А на внутреннем интерфейсе разрешены все службы (mysql, ftp, web, ssh...).
Железо
Параметры железа - смотря как интенсивно будет использоваться сервер, чем больше запросов к нему, тем выше нужна производительность. У меня сеть из восьми компьютеров и один сервер, собран он на старом железе, но работает стабильно:
CPU (процессор) - Celeron, 1700 МГц 128 Кб кэша
RAM (оперативная память) - DDR I 512 Мб
LAN (сеть) - Ethernet 10/100 Мб
Блок питания - 450 Вт
Так как сервер должен работать постоянно (месяц, три, пять, год), для охлаждения системы понадобится мощная винтеляция. Даже самые мощные сервера под Linux/FreeBSD, хорошо отлаженные и настроенные, очень чувствительны к жаре, без охлаждения будут работать весьма нестабильно. Поэтому я рекомендую поставить 3 кулера 120 мм.
Примерная стоимость:
CPU - 250 руб.
RAM - 400-500 руб.
Сеть (невстроенная) - 150 руб.
Материнская плата (встроено видео) - 400 руб.
Видеокарта (почти ненужный элемент, требуемый объем 8-16 Мб) - 200 руб.
Блок питания - 400 руб.
Винчестеры - из расчета 1600-1800 руб. за 250 Гб.
Кулеры - 360 руб.
Итого: примерно 4000-5000 руб.
Если новое такое оборудование (процессор, материнскую плату, видеокарту) в магазинах не найти, собираемся и едем на местный радиорынок. Машину можно собрать и мощнее, предела совершенству нет. Можно и на Xeon собрать, но зачем столько мощности для локальной сети или офиса?
Итак, железо готово. Перейдем непосредственно к установке сервера. Здесь есть две возможности. Первая, так называемая "из коробки", то есть все сервера уже собраны и готовы к работе, осталось их сконфигурировать. Вторая, собрать самому из исходных кодов (сорцов) и также сконфигурировать. Сначала пройдемся по первому методу, а потом разберем второй.
Выбор операционной системы
Тут стоит сложный выбор: Windows или Linux.
Бесспорно, покажется, что проще и быстрей установить и настроить сервер под Windows. Да, это так... Но если подумать о слабой его защищенности и нестабильности, об ошибках BSOD (синий экран смерти), вирусах, дырках... Оставим эту тему, вернемся к ней позже.
Намного трудней собрать сервер на Linux, но он будет намного стабильней, быстродее, с высоким UpTime (время работы от пуска системы до завершения), на хорошо настроенных системах оно достигает нескольких лет.
Мой выбор пал на SUSE Linux Enterprice Server 10 (
http://www.opensuse.org), так как он проще в конфигурировании и все нужные пакеты в нем имеются, потребуется скачать только несколько дополнительных пакетов.
Собственно установка
Итак, установка... Проходит она в графическом режиме на русском языке, кратко пробегусь по отдельным пунктам.
Разбиение диска. В моем случаи диск 160 Гб разбиваем, причем не будем делить на системные, темпы и домашние каталоги пользователей.
/ 154 Гб
Swap (2xRAM) = 1024 Мб
Linux сам предлагает разбиение, если диск пуст, он создаст 2 раздела, root (/) и файл подкачки (swap). Если на диске имеются разделы Windows (NTFS), то он уменьшит их и присоединит к своей файловой системы.
Приложения... Не буду объяснять, что за что отвечает, просто скажу, что должно быть установлено вами, остальное стоит по умолчанию: perl, iptables, bind, nmap, mc, make, apache (все пакты), php (все пакты), mysql (все пакты). Занимает это примерно 2 Гб. Но эта цифра потом увеличится.
Уровень выполнения по умолчанию. По умолчанию стоит 5: Полный многопользовательский с сетью и графическом режимом. Нам это не подходит, так как графической оболочкой никто пользоваться не будет, а ценные ресурсы она будет кушать, причем много. Поэтому ставим 3: Полный многопользовательский с сетью.
После этого запускается процесс установки, на различных компьютерах скорость различна, на моем сервере около часа ставилась, на более мощном - пол часа. Все зависит от мощности процессора и объема оперативной памяти.
Имя хоста - обычно это localhost и домен.
Пароль администратора, пароль на пользователя root должен быть минимум из 8 символов, буквы верхнего и нижнего регистра, цифры, специальные символы.
Сеть, так как у нас два сетевых интерфейса (у меня только внутренний) ставим каждому из них свой IP адрес. Маршрутизацию не трогаем. Помним, что маршрутизация как воздух, никто не замечает, пока не испортишь. Порт SSH открыт.
Сервер готов к работе, отключим монитор, клавиатуру, мышь, оставим три провода, два от сети и один - питание, не забываем о бесперебойном питании.
Итак, все основные настройки операционной системы готовы, займемся настройками приложений. Для этого есть специальный клиент SSH под Windows - putty.
Настройка клиента, host name - адрес или IP вашего сервера (внутренний интерфейс).
Залогинились и начинаем работать.
Первым делом ставим FTP-сервер. ProFTPd, качаем с официального сайта последнюю версию. Создаем в корне папку src, куда будем складывать пакеты. Можно через файловый менеджер (команда mc), но мы будем все делать без него. Единственная проблема при его использовании - если закачка файлов производилась с Windows-машин, то из названий русских файлов вырезаются буквы "ыьэюя". Дело в том, что ProFTPd пропускает весь свой трафик через Telnet, который воспринимает символы с кодами 251-255 как управляющие последовательности и вырезает их. Но не стоит отчаиваться - все лечится небольшим вмешательством в файл src/netio.c. Просто удалим из него строки:
switch (mode) {
case IAC:
[[ часть кода пропущена ]]
mode = cp;
continue;
}
break;
}
После этого можно смело компилировать:
Ставим патч
# /src/proftpd-1.3.1rc3 # ./configure && make && make install
Конфигурируем и устанавливаем. Файл запуска установился в /usr/local/sbin/proftpd. Запусти его и проверь в ftp-клиенте адрес
ftp://localhost/. Если каталог открылся, значит, установка прошла успешно. К сожалению, для ProFTPD разработчики не позаботились выложить готовый скрипт для init.d. Для запуска сервера создадим скрипт /etc/init.d/proftpd и сделаем его исполняемым, ссылка на сам файл - в конце статьи.
Делаем исполняемым:
chmod a+x /etc/init.d/proftpd
Запуск /etc/init.d/proftpd start
Остановка /etc/init.d/proftpd stop
Перезагрузка /etc/init.d/proftpd restart
Перед соединением с сервером нужно разрешить доступ к нему:
# yast
Пользователи и безопасность > Брандмауэр (FireWall)
Интерфейсы, выбираем Внутренний > Изменить > Зона интерфейса "Внутренняя зона".
Теперь идем в /usr/local/etc/proftpd.conf и полностью удаляем секцию . Таким образом мы перекроем кислород всем анонимным пользователям.
Перезапускаем proftpd:
# service proftpd restart
MySQL
Конфигурация заключается только в правильном распознавании русских символов и установке кодировки по умолчанию cp1251, редактируем файл /etc/my.cnf
# mc -e /etc/my.cnf
В раздел [mysqld] необходимо добавить следующее:
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake
В раздел [mysqldump] достаточно добавить только
default-character-set=cp1251
Перезапускаем сервер mysql:
#service mysql re
PHP
С PHP проделаем то же самое:
# mc -e /etc/php5/apache2/php.ini
Раскомментируем строку:
default_charset = "cp1251"
Теперь нам нужно, чтобы все службы запускались сами на runlevel 3:
#yast
Система > Системные службы (RunLevel)
Переходим в режим эксперта, нам нужно чтобы автоматически запускались apache, mysql, proftpd. Выбираем нужные приложения и ставим галку на 3 пункте (runlevel). Теперь при запуске/перезапуске сервера службы будут запускаться сами.
Далее тестируем apache. Вбейте в браузер ваш IP (в моем случае 192.168.1.1). Если все верно, то вы увидите надпись "It works!", если этого не произошло, проверьте, запушен ли apache. Если нет, то запускаем:
# service apache2 start
Проверим PHP. Для этого создадим страницу index.php с содержанием:
phpinfo();
?>
Ставим phpmyadmin:
# tar -xf phpMyAdmin-2.10.0.2-all-languages.tar.gz
# cd phpMyAdmin-2.10.0.2-all-languages
# mc
Копируем все файл из /src/phpMyAdmin-2.10.0.2-all-languages в /srv/www/htdocs/phpmyadmin
Копируем файл config.sample.inc.php в config.inc.php (тот, что лежит в /srv/www/htdocs/phpmyadmin), раскомментируем в нем строки controluser и controlpass, впишем туда пользователя root и его пароль, добавим в blowfish_secret любую строку из произвольных символов (она используется для идентификации cookie).
В auth_type вписываем HTTP (тип, используемый для авторизации пользователей). И не забываем запускать mysql:
# service mysql start
Перед соединением с сервером нужно разрешить доступ к нему:
# yast
Пользователи и безопасность > Брандмауэр (FireWall)
Allowed Service > Внешняя зона, добавляем HTTP и FTP
Ну вот и все, наш сервер готов к работе!
Вместо заключения
Для дополнительного конфигурирования можно установить пакет Webmin. Это программный комплекс, который позволяет администрировать *unix-подобную операционную систему, не работая с командной строке и не запоминая ни одной команды. Все управление сервером происходит через web-интерфейс.
Webmin состоит из простого web-сервера и небольшого количества скриптов, которые собственно и осуществляют связь между командами администратора через web-интерфейс и их исполнением на уровне операционной системы и прикладных программ.
# tar -xf webmin-1.400.tar.gz
# sh webmin-1.400/setup.sh
Дальше идут стандартные вопросы, папки. Порты оставляем по умолчанию.
Файлы для сервера вы можете скачать здесь: