понедельник, 1 июня 2009 г.

Установка LAMP (Linux Apache+MySQL+PHP)

Все команды выполнялись от прав root'a.

Решил настроить LAMP под Debian'ом.

LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения, широко используемый во Всемирной паутине. LAMP назван по первым буквам входящих в его состав компонентов:
* Linux — операционная система GNU/Linux;
* Apache – веб-сервер;
* MySQL — СУБД;
* PHP — язык программирования, используемый для создания веб-приложений.
Акроним LAMP может использоваться для обозначения:

1.Инфраструктуры веб-сервера
2.Парадигмы программирования
3.Пакета программ
Хотя изначально эти программные продукты не разрабатывались специально для работы друг с другом, такая связка стала весьма популярной, в первую очередь из-за своей низкой стоимости (все её составляющие являются открытыми и могут быть бесплатно загружены из Интернета). Набор LAMP входит в состав большинства дистрибутивов GNU/Linux и предоставляется многими хостинговыми компаниями. (Взято с http:/ /ru.wikipedia.org).

1. Устанавливаю apache и php - 'apt-get install apache2 php5 libapache2-mod-php5 php5-gd' если кто пожелает использовать php4, ставит командой - 'apt-get install apache2 php4 libapache2-mod-php4 php4-gd'.

Конфигурационные файлы Apache находятся по пути '/etc/apache2/apache2.conf', а папка веб-сайта по умолчанию - '/var/www'.

2. Проверяю корректность установленного php, для чего создаю файл test.php в папке /var/www - 'touch /var/www/test.php'. Затем радактирую созданный файл — 'nano /var/www/test.php' до следующего вида:

Просматриваю в браузере — 'http:\ \ip_setevoi_LAN\test.php' или http:\ \localhost\test.php', скрипт должен выдать подробную информацию о настройках php.

3. Настраиваю Apache,для чего редактирую файл — 'nano /etc/apache2/sites-enabled/000-default' В начале файла добавляю опции ServerAdmin и ServerName, а также нахожу опцию AllowOverride и измению её с значения None на All. Закомментировал RedirectMatch. Т.е. Получилось следующее:
NameVirtualHost *
ServerAdmin admin@server.ex
ServerName "www.server.ex"
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# RedirectMatch ^/$ /apache2-default/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

Далее исправляю кодировку по-умолчанию с UTF-8 на Windows-1251 — 'nano /etc/apache2/conf.d':
AddDefaultCharset Windows-1251.

4. А вот теперь довожу конфигурацию Apache «напильником» до ума, «обрезая» настройки по самое не хочу — 'nano /etc/apache2/apache2.conf':
KeepAlive on
KeepAliveTimeout 5
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxClients 20
MaxRequestsPerChild 10000

Настройки достаточны для локальной сети из 30 машин исключительно для просмотра статистики. Если кому-то понадобятся другие настройки надеюсь приведенная ниже информация позволит лучше разобраться в настройках.

MaxClients

Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет поддерживать сервер. Apache не будет порождать больше процессов/потоков чем MaxClients. Значение MaxClient не долно быть слишком маленьким (иначе много клиентов останутся необслуженными), но и не стоит устанавливать слишком большое количество - лучше не обслужить часть клиентов чем исчерпать все ресурсы, залезть в своп и умереть под нагрузкой. Хорошим может быть значение MaxClients = количество памяти выделенное под веб-сервер / максимальный размер порожденного процесса или потока. Для статических файлов apache использует около 2-3 Мб на процесс, для динамики (php, cgi) - зависит от скрипта, но обычно около 16-32 Мб.Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

MinSpareServers, MaxSpareServers, и StartServers

Т.к. создание потока, и особенно процесса - дорогая операция, apache создает их заранее. Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум). Если значение MinSpareServers слишком маленькое и неожиданно приходит много запросов, apache вынужден будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers слишком велико, apache будет сильно нагружать систему этими процессами, даже если количество клиентов минимально.
Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более 4 процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом. Это - сигнал того что MinSpareServers слишком мало.

MaxRequestsPerChild

Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда (ну кроме случаев остановки сервера или краха этого процесса/потока). Рекомендую установить MaxRequestsPerChild равное какому-нибудь достаточно большому числу (несколько тысяч). Это не создаст излишней нагрузки, связаной с тем что apache будет вынужден создавать новые дочерние процессы, в то же время это поможет избавиться от проблем с утечкой памяти в дочерних процессах (что очень возможно например если вы используете нестабильную версию php).

KeepAlive и KeepAliveTimeout

KeepAlive позволяет делать несколько запросов в одном TCP-подключении. Это особенно полезно для html-страниц с большим количеством изображений. Если KeepAlive установлен в Off, то для самой страницы и для каждого изображения будет создано отдельное подключение (которое нужно будет обработать master-процессу), что плохо и для сервера и для клиента. Так что для подобных случаев рекомендуется устанавливать KeepAlive в On. Для других применений (например для download-сервера) KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет KeepAliveTimeout секунд нового запроса. Для того чтобы процессы не висели слишком долго в бесполезном ожидании, устанавливайте KeepAliveTimeout достаточно малым, около 5-10 секунд обычно достаточно.

5. Перезапускаю Apache - '/etc/init.d/apache2 force-reload'

6. Устанавливаю MySQL - 'apt-get install mysql-server mysql-client php5-mysql' или 'apt-get install mysql-server mysql-client php4-mysql' для php4.

7. По умолчанию mysql создает пользователя root без пароля. Установил пароль для пользователя root.
server:/# mysql
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('пароль') WHERE user='root';
mysql> FLUSH PRIVILEGES;

8. Устанавливаю phpMyAdmin - 'apt-get install phpmyadmin', который ставится в папку - '/etc/phpmyadmin'.

phpMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL. phpMyAdmin позволяет через браузер осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у веб-разработчиков, так как позволяет управлять СУБД MySQL без непосредственного ввода SQL команд, предоставляя дружественный интерфейс. (Взято с http:/ /ru.wikipedia.org).

У меня в дистрибутиве Lenny phpMyAdmin сам подключился модулем к Apache. Возможно в дистрибутиве Etch придется подключить его руками, для чего надо редактировать файл 'nano /etc/apache2/apache2.conf', дописав в конце конфига:
Include /etc/phpmyadmin/apache.conf

9. Перезапускаю Apache - '/etc/init.d/apache2 restart'.
Доступ к настроенному phpMyAdmin можно осуществить набрав в браузере 'http:/ /localhost/phpmyadmin' с сервера.

PS. У меня на работе отсутствует статический IP для входа на сервер с Interneta, а пользователи выходят в интернет через Squid, т.е. Если кто-то из пользователей захочет войти в LAMP набрав IP сервера, его запрос будет отправлен по 80 портому в Squid который в свою очередь вернет ответ что хост не найден. Пришлось поправить настройки Apache, заставив его обрабатывать запросы по порту 8080, и создать виртуальный хост.

Отрадактировал файл 'nano /etc/apache2/httpd.conf' прописав в нем:
Listen 8080
т.е. указал чтоы Apache слушал порт 8080.

Я создал файл с настройками виртуального хоста 'touch /etc/apache2/sites-enabled/@statistica.conf' следующего содержания — 'nano /etc/apache2/sites-enabled/@statistica.conf':

DocumentRoot /var/www/
ServerName server.ex
AllowOverride All
Order allow,deny
allow from all
192.168.0.1 — адрес сетвой карты смотрящей в локальнуюсеть, и присваиваю ему имя — server.ex.

Далее включаю обработку виртуального хоста в Apache – 'nano /etc/apache2/apache2.conf' добавив:
Include /etc/apache2/sites-enabled/

Теперь чтобы из локальной сети попасть на созданный хост нужно набрать в браузере 'http:/ /192.168.0.1:8080' или 'http:/ /server.ex:8080'.

PSPS. Все манипуляции описанные в PS. производились в дистрибутиве Lenny.