Все статьи раздела «Системное администрирование»

Установка web-сервера

Подробное описание сборки и настройки собственного web-сервера для разработки и тестирования сайтов и онлайн-сервисов. Эти сведения будут полезны и при создании внешнего сервера.

Введение

Изначально эта статья задумывалась, как руководство по созданию локального сервера для отладки и тестирования сайтов, чтобы потом переносить их на готовую машину. Однако этот материал будет полезен и тем, кто собирается разместить "настоящий" Web-сервер в Internet. Дело в том, что в последнее время все больше провайдеров предлагают услугу "виртуальный выделенный сервер". Этот сервер представляет собой виртуальную машину, использующую часть памяти и ресурсов процессора реального сервера, имеющую полноценную файловую систему и набор пользователей с соответствующими правами (включая root'а), причем стоимость такой услуги уже вполне сопоставима с виртуальным web-хостингом (от 15-20 долларов в месяц). Помимо очевидной возможности приобрести опыт администрирования Unix-сервера, такой вариант хорош еще и тем, у кого есть много мелких web-проектов (стоимость виртуального web-хостинга обычно зависит от числа независимых web-сайтов). А для тех, чьи сайты требуют специальных настроек и модулей на сервере виртуальный выделенный сервер часто является единственным вариантом хостинга. Итак, далее речь будет идти об установке web-сервера в Internet, а в конце статьи я опишу дополнительные действия по созданию "домашнего" сервера.

Подготовка

Для создания веб-сервера на платформе Linux вам потребуется:

При выборе программ (это вообще всегда следует учитывать, не только для этих программ) следует брать последний стабильный релиз. Кстати, из-за этого номера версий и, соответственно, названия файлов архивов и каталогов у вас скорее всего будут отличаться от приведенных в статье. Вообще, я призываю вас понять общие принципы, а не просто копировать команды, иначе вы не научитесь самостоятельно что-то настраивать.

Установка операционной системы

Полное описание процедуры установки Linux выходит за рамки данной статьи, поэтому приведу лишь общие рекомендации.

Если не жалко трафика на скачивание образов CD с сайта RedHat или есть диски с дистрибутивом, то ставите с них. Уже много версий назад Fedora обзавелась графическим инсталлятором на русском (как и на многих других) языке, поэтому с установкой трудностей не возникнет. Если же хочется сэкономить трафик, скачайте только первый (загрузочный) CD и установите с него минимальную конфигурацию, затем доставите нужные RPM'ы (это такие независимые кусочки дистрибутива в Linux, расшифровывается как RedHat Package Manager – по имени утилиты, которая этими кусочками управляет), скачав недостающее из Internet'а.

Вам потребуется сверх минимальной установки GCC (компилятор языка С), библиотеки LibC, парсеры (утилиты по анализу и переводу текста программы) flex и bison. А вот web-сервер, идущий в составе дистрибутива, ставить не нужно, это Apache 2.0, а мы будем собирать Apache 1.3.

Компиляция и установка библиотек.

Здесь мы условимся считать, что все скачанные архивы с исходными текстами библиотек и других программ лежат в некоем каталоге (например подкаталоге вашего домашнего каталога) и этот каталог текущий перед началом сборки каждого пакета.
Также, если команда начинается со знака "$" то ее можно (и рекомендуется) выполнять от имени обычного (непривилегированного) пользователя, если же со знака "#" то от имени root'а.

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

Сначала собираем JPEG (здесь версия 6b):

$ tar xzf jpegsrc.v6b.tar.gz
$ cd jpeg-6b
$ ./configure
$ make
$ make test
# make install

Разберем выполненные команды построчно:

  1. Вызываем программу архиватора tar и командуем ему распаковать (x) архив, сжатый методом zip (z) из файла (f) jpegsrc.v6b.tar.gz. Ключи, которые не имеют параметров, можно писать слитно (обычно, но не всегда, для Linux), последний ключ (f) имеет параметр (имя архива), поэтому его пишем в конце всех ключей.
  2. Переходим в каталог (команда cd) jpeg-6b. Этот каталог будет создан при распаковке архива
  3. Запускаем команду конфигурации исходных текстов (configure). Эта команда проверит систему на наличие всех необходимых программ (например, компилятора), библиотек и других модулей, необходимых для сборки, а также создаст файлы с информацией, специфичной для вашей системы (например, длину слова процессора или имя компилятора). В частности, команда configure создает файл с инструкциями для утилиты make, которую вызывают в следующих командах.
    Небольшое отступление: Вызов в виде ./ означает что мы хотим запустить программу из текущего каталога (обозначается точкой). Этот формат всегда используется для работы под root'ом, т.к. текущий каталог для него не включен в путь поиска исполняемых файлов (переменная окружения path) по соображениям безопасности (иначе если пользователь положит в свой домашний каталог вредоносную программу и назовет ее, например "cd", а root зайдет в этот каталог и наберет cd для перехода в другой каталог, он вместо этого запустит программу пользователя от своего имени с неограниченными правами).
  4. Вызываем команду make. Эта утилита вкратце делает следующее: проверяет наличие и время модификации заданных файлов (целей), и если эти файлы отсутствуют или старее чем файлы, из которых они получены (исходники), то выполняет заданные команды для сборки целей из исходников. Чтобы описать, что из чего нужно собирать, make читает специальный файл (если имя не указано, то читается фалй с именем makefile), который был собран командой configure. В данном случае make собирает все необходимые бинарные файлы из исходных текстов на языке Си. Если утилита что-то не сможет собрать (ошибка компиляции или какая-нибудь другая), то она об этом сообщит.
  5. Вызываем make с параметром test. Правила в файле makefile написаны так, что для цели с именем test собирается и выполняется набор тестов, которые проверяют, насколько собранная библиотека работоспособна.
  6. Вызываем make с параметром install. Утилита make копирует бинарные файлы, а также заголовки в системные каталоги, где они будут доступны для других библиотек и программ. Поскольку запись в эти каталоги разрешена только привилегированному пользователю, команду выполняем от имени root'а.

Перед выполнением последней команды может потребоваться создание каталог для справочных файлов:

# mkdir -p /usr/local/man/man1

По непонятным мне причинам make install не копирует библиотеки и файлы заголовков, куда положено, поэтому делаем это вручную:

# cp libjpeg.a /usr/local/lib
# cp jpeglib.h jconfig.h jmorecfg.h jerror.h /usr/local/include/

Теперь собираем zlib и libpng. Этот процесс не имеет каких-либо особенностей:

$ tar xzf libpng-1.2.8-config.tar.gz
$ tar xzf zlib-1.2.2.tar.gz
$ mv libpng-1.2.8 libpng
$ mv zlib-1.2.2 zlib
$ cd zlib
$ ./configure
$ make
$ make test
# make install
$ cd ../libpng
$ ./configure
$ make
# make install

Для сборки freetype также не требуется специальных приемов:

$ tar xzf freetype-2.1.10.tar.gz
$ cd freetype-2.1.10
$ ./configure
$ make
# make install

Сборка GD также проста, скрипт должен сам найти все необходимые библиотеки:

$ tar xzf gd-2.0.33.tar.gz
$ cd gd-2.0.33
$ ./configure

После выполнения скрипта проверьте табличку "Configuration summary", там указаны найденные библиотеки. Если возникли проблемы, проверьте содержимое каталогов /usr/local/include и /usr/local/lib, там должно быть что-то похожее на:

$ ls /usr/local/include
 freetype2   jconfig.h  jmorecfg.h  libpng     png.h    zlib.h
 ft2build.h  jerror.h   jpeglib.h   pngconf.h  zconf.h 
$ ls /usr/local/lib
 libfreetype.a   libfreetype.so.6   libpng12.a      libpng12.so.0      
 libpng.la       libpng.so.3.0.0    libfreetype.la  libfreetype.so.6.3.8  
 libpng12.la     libpng12.so.0.0.0  libpng.so       libz.a
 libfreetype.so  libjpeg.a          libpng12.so     libpng.a           
 libpng.so.3

Перед каждой новой попыткой удалите кэш конфигурации:

$ rm -f ./config.status

Если же конфигуратор отработал нормально и нашел все необходимые библиотеки, запускаем знакомую процедуру:

$ make

# make install

Установка серверных программ

Сборка web-сервера Apache

Здесь главное – модули, которые надо указать в параметрах конфигуратора. И не забыть про путь, по которому сервер будет установлен. В нашем случае это /usr/local/apache.

$ tar xzf apache_1.3.33.tar.gz
$ cd apache_1.3.33
$ ./configure --prefix=/usr/local/apache --enable-shared=access  
--enable-shared=actions  --enable-shared=alias  --enable-shared=asis  
--enable-shared=auth  --enable-shared=autoindex  --enable-shared=cgi  
--enable-shared=dir  --enable-shared=env  --enable-shared=imap  
--enable-shared=include  --enable-shared=log_config  --enable-shared=mime  
--enable-shared=negotiation  --enable-shared=setenvif  --enable-shared=status  
--enable-shared=userdir  --enable-module=so  --enable-module=vhost_alias 
--enable-module=rewrite --enable-module=proxy --enable-module=info 
--enable-module=headers --enable-shared=vhost_alias  --enable-shared=rewrite
--enable-shared=proxy --enable-shared=info  --enable-shared=headers

Вызов команды configure – это одна строка, здесь я написал команду в несколько строчек исключительно для удобства чтения. Обратите внимание: модуль so нельзя делать динамическим!

$ make 
# make install

Устанавливаем MySQL

Используем уже собранные пакеты:

rpm -Uhv MySQL-client-4.1.20-0.i386.rpm MySQL-server-4.1.20-0.i386.rpm MySQL-devel-4.1.20-0.i386.rpm

И опять-таки команда в одну строку. Здесь мы запускаем менеджер пакетов (rpm), который должен обновить (U) пакеты из файлов, указанных в командной строке после всех ключей, заодно показав подробный отчет о ходе работы (v) с индикатором прогресса в виде строки решеток (h). RPM – это очень мощный инструмент установки и обновления компонентов системы, поддерживающий механизмы проверки зависимостей между модулями, а также запуск до- и послеустановочных скриптов. Администратор должен хорошо разбираться в принципах работы RPM, советую почитать руководство по RPM Ссылка на внешний сайт, откроется в новом окне и другие материалы, которые можно найти в Сети.

Собираем PHP

Основное, на что нужно обратить внимание – ключи конфигуратора, которые определяют состав подсоединяемых библиотек и пути к ним. Нужно внимательно просмотреть, что напечатал configure после завершения.

$ tar xzf php-4.4.1.tar.gz
$ cd php-4.4.1
$ ./configure --with-mysql=/usr --with-gd=/usr/local --with-apxs=/usr/local/apache/bin/apxs --with-zlib=/usr/local
$ make
# make install

Если поддержка MySQL, ZLib и GD не включилась, при необходимости запустить конфигуратор заново, предварительно удалив файлы config.cache и config.status.

Инсталлятор дописывает в httpd.conf директиву LoadModule и AddModule, но ничего не указывает про обработку нового типа файлов. Делаем это вручную:

# vi /usr/local/apache/conf/httpd.conf

Добавляем строку

AddType application/x-httpd-php .php .phtml

в секцию <IfModule mod_mime.c>, а также имя файла index.php в секцию <IfModule mod_dir.c>, строка с директивой DirectoryIndex. Также копируем конфигурационный файл PHP из дистрибутива на положенное место:

# cp php.ini-recommended /usr/local/lib/php.ini

Тестирование сервера

Запускаем сервер:

# /usr/local/apache/bin/apachectl start

Создаем файл /usr/local/apache/htdocs/test.php следующего содержимого:

<?php
  phpinfo();
?>

Теперь заходим браузером на сервер:

http://server_name/test.php

На загрузившейся странице должна быть выведена конфигурация сервера и PHP. Проверьте, что в разделе gd указана правильная версия модуля "2.0 or higher", а все форматы изображений (GIF read, GIF create, PNG, JPG) поддерживаются. Также проверьте, что указана внешняя поддержка MySQL: "MYSQL_MODULE_TYPE external".

Особенности создания локального сервера

Итак, у вас есть работающий web-сервер (виртуальный или "настоящий железный"), стоящий у провайдера и имеющий постоянное (будем надеяться, высокоскоростное) соединение с Internet. На нем можно размещать не только сайты но и различные программы, требующие постоянного доступа в Сеть (например, почтовые сервисы, игровые сервера и т.п.). Однако при разработке новых сайтов и программ использование такого сервера может оказаться не самым оптимальным решением по ряду причин. Вот некоторые из них: отладка и редактирование сайта на сервере требует постоянного соединения с Сетью и расходует трафик; при отладке программ существует риск повреждения работающих сайтов и служб, что явно нежелательно; существует вероятность того, что неотлаженными программами, установленными на сервере в Сети, могут воспользоваться злоумышленники для "взлома" сервера. Выход один – для отладки сайтов и программ лучше использовать отладочный сервер, стоящий рядом с вами, в идеале – на вашем рабочем компьютере. Далее я рассказываю об одном из способов создания такого сервера.

Создание виртуальной машины

Если на вашей машине уже стоит какая-либо Unix-подобная ОС, эта часть статьи не для вас: вы уже обладаете достаточными знаниями, чтобы настроить все перечисленные выше программы на своей рабочей машине, как, впрочем, и на отдельном сервере. Если же вы, как и я, работаете под ОС Windows, то несмотря на наличие у почти всех программ версий для этой платформы, полноценный сервер создать все равно не получится. Хотя бы из-за того, что при переносе сколь-либо сложного сайта возникнут проблемы с именами файлов и путями в скриптах. Поэтому предлагается создать виртуальный компьютер, например с помощью популярной программы VMWare и установить на него все, что было описано в предыдущих частях статьи.

Создаем виртуальную машину средствами VMWare. При создании указываем тип операционной системы Linux (версия Red Hat Linux) и объем памяти в пределах 32-64 Мб (в зависимости от количества физической памяти). Виртуальных диска я советую создать два: один под корневой раздел и раздел подкачки (swap), другой под каталоги с сайтами. Это лучше по меньшей мере по двум причинам: удобно сделать резервную копию всего раздела, не запуская виртуальную машину, и, если понадобится увеличить размер раздела под сайты (это делается созданием нового виртуального диска), не нужно будет трогать системные файлы.

Тип сетевого интерфейса лучше выбрать host-only. Этим вы обезопасите создаваемую машину от возможности проникновения извне вашего компьютера. В случае host-only создается виртуальная сеть, в которой есть всего два компьютера – ваш реальный и создаваемый сервер. Проверьте, какой IP-адрес система присвоила основному хосту (в настройках виртуальной сети определите, какой адаптер используется для host-only network, а затем в свойствах протокола TCP/IP этого адаптера в "Панели управления"), для создаваемого сервера используйте другой IP-адрес из той же подсети, например, на единицу большее последнее число.

Доступ к файловой системе

Для доступа к виртуальному серверу с основной машины удобно установить SMB-сервер. Это позволит подключить каталоги с сайтами в качестве сетевого диска – что может быть проще для редактирования всех файлов вашими любимыми текстовыми и графическими редакторами. В системе уже есть (или его следует поставить в виде rpm) smb сервис. Для его конфигурации используется файл /etc/samba/smb.conf. Укажите в нем следующие строки (или отредактируйте существующие) в секции [global]:

  security = SHARE
  encrypt passwords = No

Далее, создайте секцию [server] (имя секции соответствует имени сетевого ресурса) со следующим содержимым:

  path = /
  force user = root
  force group = root
  read only = No
  guest ok = Yes

Это означает, что мы хотим сделать доступным всю файловую систему сервера (path), доступ будет осуществляться от имени суперпользователя (force user, force group), запись разрешена, авторизация не требуется (guest ok). Поскольку сервер виден только с локального компьютера, такие настройки вполне оправданы. Впрочем, можно ограничить доступ только к каталогу, где будут размещаться сайты (например, /sites), указав соответствующее значение в параметре path.

Установка ОС и web-сервера

Теперь самое время вернуться к началу статьи и последовательно выполнить все шаги по установке необходимых программ на созданную виртуальную машину. После того, как все будет успешно выполнено, вы получите работающий виртуальный сервер, очень похожий на настоящий. На нем можно эффективно отлаживать сайты и программы, а потом переносить их на внешний сервер. Чтобы этот перенос был максимально прозрачен, рекомендуется создать на виртуальном сервере пользователей, группы и структуру каталогов, относящихся к сайтам, такие же, как на внешнем сервере.

И в заключение один совет. Поскольку вы с большой вероятностью будете использовать name-based virtual servers (виртуальные сервера, различаемые по имени), самый простой путь обеспечить доступ к ним с локальной машины – вписать все используемые имена сайтов в файл c:\winnt\system23\drivers\etc\hosts (для NT/2k/XP, для Win98 поищите файл hosts в каталоге ОС) с указанием IP-адреса вашего сервера. Тогда не возникнет никаких проблем с DNS при работе. Можно даже сделать два файла hosts (один с именами сайтов, другой без) и менять их для локальной работы и для проверки работы DNS.