Пошаговое руководство по установке LAMP-сервера
Sergey Jaremchuk feat. Andrey Matveev
GNU/Linux имеет много преимуществ, но именно возможность мгновенного преобразования бюджетного компа в полнофункциональный Web-сервер позволила этой операционке ворваться в домашние сети и на корпоративный рынок. Если ты планируешь развернуть web-сервис на базе архитектуры LAMP в интранет/интернет, эта статья — для тебя.
Содержание:
- Установка Ubuntu Server Edition
- Настройка сервера
- Установка мускула, апача и PHP
- Настройка виртуальных хостов
- Заключение
- Врезка
- Боковые выносы
Установка Ubuntu Server Edition
За аббревиатурой LAMP скрывается конфигурация Linux, Apache, MySQL, PHP/Perl/Python (плюс сюда часто добавляют и Ruby On Rails). В статье остановим свой выбор на Ubuntu Server Edition 8.04.1 LTS. Почему именно он? Причин несколько. Во-первых, Ubuntu — один из самых дружелюбных дистрибутивов, начинающему администратору с ним будет легче разобраться. Во-вторых, быстрота развертывания: весь процесс займет примерно 30 минут вместе с установкой сервера. В-третьих, ядро Ubuntu Server Edition (версии 2.6.24) специально оптимизировано для работы на сервере за счет использования Tickless (этот режим приводит к уменьшению энергопотребления и тепловыделения), No Preemption (время отклика для интерактивных задач не уменьшается), Deadline I/O (планировщик, минимизирующий задержки ввода/вывода и обеспечивающий поведение, близкое к реальному времени), PAE (поддержка аппаратной технологии, с помощью которой программы на 32-разрядных серверах с процессорами IA-32 могут адресовать физическую память свыше 4 Гб), 100Hz (таймерное прерывание). Кроме того, поддержка LTS-версии заявлена на 5 лет (до апреля 2013), а значит, все это время разработчики обязуются выпускать обновления. Такой увеличенный период технической поддержки полностью отвечает требованиям современного бизнеса.
Большая часть сказанного будет действительна для Debian и некоторых других дистрибутивов, использующих APT. Сервер будем ставить в такой конфигурации:
- Apache 2 — веб-сервер;
- MySQL 5 — сервер баз данных;
- PHP5 — PHP CGI.
Процесс установки системы происходит в псевдографической среде, и трудностей обычно не вызывает, поэтому по этапам пробежимся поверхностно. Чтобы все сообщения системы выводились на русском языке, в загрузочном меню нажимаем <F2>. После выбора региона и установки раскладки клавиатуры будет произведена автоматическая настройка сети с помощью DHCP. Если такого сервера нет, выбираем пункт «Настроить сеть вручную» и последовательно вводим параметры: IP-адрес, маску подсети, IP-адрес шлюза, адреса DNS-серверов (через пробел), имя компьютера и домена. Далее выбираем в списке часовой пояс, и наступает самый важный этап – разметка диска. Мастер предлагает четыре варианта: автоматическая разметка, LVM (обычный и шифрованный) и ручной труд. Каждый имеет свои плюсы и минусы, если есть сомнения, здесь же доступна справка, которая поможет определиться с выбором. При автоматической разметке скрипт создает swap-раздел, равный 1.5 объема ОЗУ (с конца диска), все остальное место форматируется как ext3 и монтируется как корневой раздел. Новичкам такая схема вполне подойдет. При ручной разметке для размещения журналов событий, файлов БД и данных веб-сервера лучше создать отдельные разделы /var/log, /var/mysql и /var/www, отформатированные в ReiserFS. Данная файловая система обеспечивает улучшенную производительность при работе с большим количеством маленьких файлов. Кстати, в Ubuntu есть одна особенность: каталог /var/run обязательно должен быть расположен в корневой файловой системе, иначе некоторые сервисы просто не смогут загрузиться. Если планируется разрешить пользователям создавать публичные веб-папки (об этом чуть ниже), тогда имеет смысл назначить раздел для /home. Под корень достаточно отвести 3-4 Гб. Если затрудняешься определить, сколько требуется места под каждый раздел, тогда стоит присмотреться к менеджеру логических томов LVM.
После установки базовой системы создаем учетную запись пользователя, который будет одновременно и суперпользователем (через sudo). Мастер установки предлагает 7 готовых конфигураций сервера: DNS, LAMP, Mail, OpenSSH, PostgreSQL, Print и Samba. После выбора любого варианта на выходе получаем готовое решение. Новички могут воспользоваться таким предложением. Но чтобы полностью контролировать процесс, лучше все компоненты установить самостоятельно. Тем более в репозитарии дистрибутива, как правило, находятся пакеты посвежее, и при обновлении дистрибутива все равно эти файлы придется качать. Если дальнейшую настройку планируется производить удаленно, ставим только «OpenSSH server». Остальные действия скрипт произведет уже без нашего участия. Спустя некоторое время получим сообщение о том, что установка сервера успешно завершена.
Один из сетевых интерфейсов уже настроен во время установки. Если сервер имеет несколько сетевых карт, их необходимо сконфигурировать вручную. Открываем файл /etc/network/interfaces и правим:
$ sudo nano -w /etc/network/interfaces auto lo iface lo inet loopback # Интерфейс eth0 настраивается автоматически посредством DHCP auto eth0 iface eth0 inet dhcp # Параметры eth1 указываем самостоятельно auto eth1 iface eth1 inet static address 192.168.0.200 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
Перезапускаем сеть:
$ sudo /etc/init.d/networking restart
Теперь в /etc/hosts прописываем соответствие имени узла и IP-адреса. Например:
$ sudo nano /etc/hosts 192.168.0.200 web.server.com web
Аналогично добавляем записи и для остальных узлов (в том числе и виртуальных), с которыми будем «общаться».
После установки системы в /etc/hostname должно быть прописано имя узла. Если вывод команды «hostname» не соответствует должному, редактируем этот файл.
Установку пакетов будем производить из сетевого репозитария, поэтому в файле /etc/apt/sources.list строка «deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080701)]/ hardy main restricted» должна быть закомментирована. Т.к. мы не планируем ничего самостоятельно компилировать, то комментируем и строки, начинающиеся с «deb-src«. Остальное оставляем, как есть.
В некоторых случаях AppArmor (программный инструмент упреждающей защиты, основанный на политиках безопасности, подробности смотри в статье «Бронированный тукс», опубликованной в X_08_2007) слишком рьяно выполняет свои обязанности. Например, при установке ispCP (см. статью «Незаменимый помощник хостера» в X_10_2008), AppArmor напрочь блокировал работу сервисов. При построении защищенного Web-сервера можно обойтись и без него. Поэтому если обнаружится какая-то проблема, останавливаем работу профилей безопасности:
$ sudo /etc/init.d/apparmor stop
Если после этого проблема решена, отключаем автозагрузку AppArmor или совсем его удаляем:
$ sudo update-rc.d -f apparmor remove $ sudo apt-get remove apparmor apparmor-utils
Обновляем список пакетов и затем полностью систему:
$ sudo apt-get update $ sudo apt-get upgrade
Если SSH-сервер во время инсталляции системы не устанавливался, делаем это сейчас. Заодно установим пакет «ntp», который обеспечит нам автоматическую синхронизацию времени:
$ sudo apt-get install openssh-server ntp ntpdate
Новичкам для правки файлов и навигации, возможно, удобнее будет использовать файловый менеджер Midnight Commander:
$ sudo apt-get install mc console-cyrillic
Теперь достаточно набрать «mc», и появится окно удобного файлового менеджера, подобного старому доброму нортону. Второй пакет необходим для локализации консоли, иначе сообщения, выводимые на русском, будут не читаемы. В 8.04.1 ссылка для автоматической загрузки console-cyrillic отсутствует, поэтому следует каждый раз запускать его вручную, либо переконфигурировать пакет. Вводим:
$ sudo dpkg-reconfigure console-cyrillic
Скрипт задаст несколько простых вопросов касательно переключателя раскладки, шрифта, кодировки (Unicode) и автоматической установки настроек при старте системы.
Итак, «L» уже готов к работе, остался «AMP».
Установка мускула, апача и PHP
Ставим пакеты для MySQL:
$ sudo apt-get install mysql-server mysql-client
В процессе установки должен появиться запрос на ввод пароля администратора базы данных. Если этого не произошло, устанавливаем пасс самостоятельно:
$ sudo mysqladmin -u root password пароль
Пробуем подключиться к базе данных и получить список таблиц:
$ mysql -u root -p Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 16 Server version: 5.0.51a-3ubuntu5.1 (Ubuntu) mysql> use mysql; mysql> show tables; mysql> quit;
В настройках по умолчанию мускул будет отрабатывать только локальные подключения:
$ cat /etc/mysql/my.cnf | grep bind-address bind-address = 127.0.0.0
Проверяем, прослушивается ли порт 3306/tcp:
$ netstat –ant | grep 3306 tcp 0 0 127.0.0.0:3306 0.0.0.0:* LISTEN
Из соображений безопасности этот порт можно отключить и использовать локальный сокет mysql.sock. Для этого добавим в секцию [mysqld] файла /etc/mysql/my.cnf директиву «skip-networking» и перезапустим сервер:
$ sudo /etc/init.d/mysql restart
Установка веб-сервера Apache довольно проста:
$ sudo apt-get install apache2
Теперь настала очередь PHP5. Не забываем модуль для работы с мускулом:
$ sudo apt-get install php5 libapache2-mod-php5 php5-mysql
Зависимости и остальные компоненты apt-get подхватывает самостоятельно, и в большинстве случаев того, что есть, достаточно. Хотя некоторые модули веб-сервера по умолчанию не подключаются. Список всех доступных модулей можно получить, введя:
$ sudo a2enmod
Как вариант, просто смотрим листинг каталога /etc/apache2/mods-available. Чтобы сделать активным любой из модулей, следует создать символическую ссылку в подкаталог /etc/apache2/mods-enabled (что, собственно, и делает команда a2enmod). Давай посмотрим, что собой представляют файлы, отвечающие за поддержку PHP:
$ cat /etc/apache2/mods-available/php5.conf <IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps </IfModule> $ cat /etc/apache2/mods-available/php5.load LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
Если используется другой дистрибутив, или связка Apache + PHP5 собиралась вручную, обязательно проследи, чтобы в /etc/apache2/httpd.conf (apache2.conf) присутствовали эти строки. Модуль для работы PHP уже активирован:
$ sudo a2enmod php5 This module already enabled.
Для некоторых задач, возможно, потребуются дополнительные модули PHP (полный список пакетов php5-*, доступных в репозитарии, можно получить, введя «sudo apt-cache search php5»):
$ sudo apt-get install php5-gd php5-imagick php5-pspell php5-recode php5-xmlrpc php5-xsl php5-mcrypt php5-memcache php5-curl php-pear php5-imap php5-snmp
Перезапускаем веб-сервер:
$ sudo /etc/init.d/apache2 reload
Набираем в браузере строку http://localhost, в ответ мы должны увидеть надпись «It works!». Чтобы проверить работу PHP, создаем файл test.php и пробуем к нему обратиться:
$ sudo echo '<?phpinfo()?>' > /var/www/test.php $ lynx http://localhost/test.php
В ответ должны получить таблицу с настройками PHP.
Если это не так, следует просмотреть журналы веб-сервера, расположенные в каталоге /var/log/apache2. В них обычно выдаются информативные подсказки.
При первом запуске веб-сервера в консоли выводится сообщение о том, что индеец не может определить доменное имя данного хоста: «apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName». Чтобы его убрать, следует установить значение переменной ServerName в apache2.conf. Хотя в Ubuntu эта настройка вынесена в отдельный файл /etc/apache2/conf.d/fqdn.
$ sudo nano etc/apache2/conf.d/fqdn ServerName web.server.com
Поддержка MySQL в PHP обеспечивается наличием в каталоге /etc/php5/apache2/conf.d файлов mysql.ini и mysqli.ini. Каждый состоит всего из одной строки. В mysql.ini содержится запись «extension=mysql.so«, а в mysqli.ini — «extension=mysqli.so«. Если эти файлы в твоем дистрибутиве отсутствуют — не беда. Просто сними соответствующие комментарии в php.ini:
$ sudo nano /etc/php5/apache2/php.ini
; Максимальный размер загружаемого файла. Вспомни о нем, когда WordPress откажется понимать файл большего размера.
upload_max_filesize = 6M
; Подключение модулей для работы с MySQL
;extension=mysql.so
;extension=mysqli.so
; Безопасный режим запрещает скриптам производить любые действия, которые являются небезопасными для Web-сервера (будь внимателен, не все CMS его любят)
safe_mode=on
; Перечень функций, использование которых запрещено в пользовательских скриптах
disable_functions=system,exec
Вообще параметров в php.ini довольно много, советую уделить некоторое время их изучению.
Веб-сервер Apache разрешает использование нескольких вариантов выделения пользователям места под собственный веб-сайт. Самый простой из них — это подкаталог в корне веб-сервера. Например, создаем каталог /var/www/site1, теперь к нему можно обратиться как http://localhost/site1. Но это не всегда удобно, т.к. каждый сайт обычно имеет свое уникальное доменное имя. Еще один вариант — разрешить пользователям, имеющим учетные записи в системе, самостоятельно создавать веб-ресурсы. Активировать такую функциональность можно при помощи параметра UserDir. Вариантов как обычно несколько, чаще всего под веб-сервис используют подкаталог public_html в домашней директории пользователя. Заносим в apache2.conf строку «UserDir public_html» и подгружаем модуль userdir:
$ sudo a2enmod userdir
Эта команда соответствует добавлению в apache2.conf таких строк:
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so … <IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> </IfModule>
Теперь достаточно любому пользователю создать в своем домашнем каталоге поддиректорию public_html (mkdir -m 755 ~/public_html), как его содержимое будет доступно по адресу http://localhost/~user. Немного поэкспериментировав с UserDir (за детальным описанием и примерами обращайся к (), адрес можно сделать более приятным глазу.
И третий самый популярный вариант — виртуальные хосты. В этом случае все узлы, висящие на одном IP (и одном Apache), будут иметь свое имя, по которому веб-сервер и определит, из какого каталога следует отдавать файл.
Управление виртуальными хостами в Apache организовано аналогично модулям, т.е. в /etc/apache2/sites-available помещаем файл с описанием, а командой a2ensite с названием файла его включаем. Да, конечно, нам под силу описать все узлы в apache2.conf, но это не очень удобно. Просмотрев список ссылок в sites-enabled, можно быстро узнать, сколько сейчас виртуальных серверов активно, и при необходимости легко включить или отключить любой из них.
В sites-available уже находится файл default, который описывает узел по умолчанию. Его можно использовать как шаблон (этот же узел будет отвечать, если к серверу обратиться по IP-адресу, а не по имени):
$ cd /etc/apache2/sites-available $ sudo cp default server.com $ sudo nano server.com NameVirtualHost server.com <VirtualHost server.com>> ServerAdmin webmaster@server.com # Каталог виртуального хоста DocumentRoot /var/www/server.com <Directory /var/www/server.com> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> # Для CGI скриптов ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/server.com/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> # Журналирование событий ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log ServerSignature On </VirtualHost>
Смотрим, с правами какого пользователя работает веб-сервер (в Ubuntu эти данные вынесены в отдельный файл):
$ cat /etc/apache2/envvars export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data
Создаем каталог, в котором будут находиться файлы сервера, устанавливаем его владельцем учетную запись www-data и включаем новый сайт:
$ sudo mkdir /var/www/server.com $ sudo chown www-data:www-data /var/www/server.com $ sudo a2ensite server.com
При необходимости заносим данные об имени компьютера в /etc/hosts, перезапускаем веб-сервер и пробуем зайти на server.com.
В итоге мы получили полностью работоспособный веб-сервер с поддержкой PHP и MySQL, который можно использовать для хостинга, биллинга, форума или при разработке скриптов. Данную схему можно расширять: настроить поддержку SSL и квот, задействовать ModSecurity для защиты веб-приложений как от известных, так и еще неизвестных атак, установить Webalizer или AWStats для сбора и визуализации статистики. Тем, у кого мало опыта работы с MySQL, не помешает веб-интерфейс phpMyAdmin. Не плохо зарекомендовал себя и Webmin, позволяющий управлять всеми компонентами LAMP при помощи локализованного веб-интерфейса.
Врезка: Основные конфигурационные файлы LAMP в Ubuntu
/etc/network/interfaces – настройка сетевых интерфейсов
/etc/hostname – сетевое имя узла
/etc/hosts – соответствие имени и IP (локальный DNS)
/etc/resolv.conf – IP-адреса DNS-серверов
/etc/apt/sources.list – используемые APT репозитарии пакетов
/etc/mysql/my.cnf – настройка MySQL
/etc/apache2 – каталог с конфигурационными файлами веб-сервера
/etc/apache2/apache2.conf – основной файл настройки Apache
/etc/apache2/conf.d/fqdn – имя (ServerName) веб-сервера по дефолту
/etc/apache2/envvars – основные переменные Apache
/etc/apache2/sites-available/default – сайт по-умолчанию
/etc/php5 – файлы настроек PHP5
DVD
-
На прилагаемом к журналу диске ты найдешь весь софт, упоминаемый в данной статье, а также видеоролик, где показано, как развернуть архитектуру LAMP.
INFO
-
Ядро Ubuntu Server Edition специально оптимизировано для работы на сервере за счет Tickless, No Preemption, Deadline I/O, PAE, 100Hz.
-
О повышении безопасности веб-сервера читай в статье «Возьми индейца под защиту», опубликованной в Х_10_2007.
WWW
-
Основные параметры и модули Apache расписаны в документации веб-сервера .
-
Скачать Ubuntu 8.04.1 LTS Server Edition можно по ссылке на странице .
-
Диски Ubuntu высылаются по почте всем желающим, для заказа зарегистрируйся на странице .
Статья опубликована в декабрьском номере журнала «Xakep» за 2008 год.
Leave a Reply





