четверг, 22 марта 2012 г.

Настройка WEB сервера под управлением ОС Debian (включает: Nginx, php-fpm, MySQL, Xcache, Memcached)

Статья будет построена по модульному типу т.е. будет базовая часть, которую необходимо выполнить на 100% и несколько дополнительных, использовать которые или нет, каждый решает для себя сам , но в случае если они будут пропущены, то на работоспособность это влиять не будет, но будут отсутствовать некоторые, весьма полезные функции. 

Предполагается что ОС установлена.

Установка основных приложений (Nginx,php-fpm,mysql)

Подключаем репозитории Nginx и php-fpm
Переходим в режим суперпользователя (root):
su

Редактируем список репозиториев:
nano /etc/apt/sources.list

Добавляем в него следующие адреса серверов:

deb http://packages.dotdeb.org squeeze all
deb http://ftp.debian.org.ua/debian-dou/ squeeze main

Теперь нам необходимо добавить GPG ключи репозиториев в систему:
wget -q http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add -
wget -q http://ftp.debian.org.ua/debian-dou/archive.key -O- | apt-key add -

Для справки: Почему выбраны именно эти репозитории? 
Ответ: В dotdeb.org лежит пакет PHP-FPM, там еще есть пакет Nginx, но его работа мне не понравилась(глючит). 
ftp.debian.org.ua лежит нормально собранный Nginx.

Обновляем список пакетов и всю систему:
aptitude update && aptitude upgrade

Устанавливаем PHP-FPM
aptitude install php5-cli php5-common php5-mysql php5-suhosin php5-gd php5-fpm php5-cgi php5-fpm php-pear php5-mcrypt -y

Закрываем уязвимости в PHP
В данный момент существует уязвимость, что любой пользователь может загрузить на сервер файл и выполнить его с правами под которыми работает PHP, чтобы это исправить, необходимо отредактировать php.ini
nano /etc/php5/fpm/php.ini

Находим строку:
;cgi.fix_pathinfo = 1

Снимаем с нее комментарий, чтобы выглядело:
cgi.fix_pathinfo = 0

Если этого не сделать, то любой желающий, залив на сервере файл, под видом картинки, может выполнять его как скрипт, со всеми вытекающими последствиями.

Остальные настройки работы PHP-FPM находятся по пути /etc/php5/fpm/pool.d/www.comf которые необходимо изменить в соответствии с наличием системных ресурсов. Описать все варианты довольно сложно и зачастую, необходимо подбирать эксперементальным путем. (хотя рекомендаций в сети хватает, даже на сайтах хостеров)

Устанавливаем Nginx:
aptitude install nginx -y

(На момент написания, там лежала версия Nginx 1.0.10-1)

Создадим первый виртуальны хост, назовем его example.org
nano /etc/nginx/sites-available/example.org

server {
        listen   80;
        root /home/example/www;
      
        access_log  /home/example/logs/nginx.access.log; #расположение логов данного хоста

        server_name example.org www.example.org;

        location / {
                index index.php index.html index.htm;
        }

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

Конфигурационный файл виртуального хоста работоспособен, но если необходимы дополнительные функции, например для обработки PHP-FPM их всегда можно добавить, за одно узнаете, за что отвечает каждая функция.

Создадим символическую ссылку:
ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/

Создаем нового пользователя:
useradd example -b /home/ -m -U

Добавим ему пароль:
passwd example

Создадим необходимые директории: 
mkdir -p -m 755 /home/example/www
mkdir -p -m 754 /home/example/logs

Предоставляем пользователю example права на них:
chown -R example: /home/example/www/
chown -R example: /home/example/logs/

Предоставим Nginx доступ в домашнюю директорию пользователя example, добавив пользователя www-data в группу example
usermod -a -G example www-data

Создадим тестовый файл:
nano /home/example/www/test.php

С содержимым:
<?php
phpinfo();
?>

Теперь, нам необходимо перезагрузить Nginx:
/etc/init.d/nginx restart

Переходим по тестовому адресу httр://example.org/test.php
Получаем то что написано на экране, нас интересует строка Server API ( на скриншоте обведено красным) там указывается, кто у нас обрабатывает скрипты PHP. 
php-fpm настройка

Устанавливаем MySQL
Установим необходимые пакеты:
aptitude install mysql-server mysql-client mysql-common libmysqlclient18

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

Установка Xcache

aptitude install php5-xcache -y

После завершения установки, необходимо перезапутить PHP-FPM
/etc/init.d/php5-fpm restart

Для того чтобы удостовериться в подключении модуля, переходим по адресу httр://example.org/test.php
Находим пункт:
xcahe

Установка Memcached

aptitude install memcached php5-memcached

необходимо перезапутить PHP-FPM
/etc/init.d/php5-fpm restart

Для того чтобы удостовериться в подключении модуля, переходим по адресу httр://example.org/test.php
находим пункт memcached, как на скриншоте ниже:
memcached

Управление приложениями:
/etc/init.d/nginx stop | start| restart
/etc/init.d/php5-fpm stop | start| restart
/etc/init.d/mysql stop | start| restart
/etc/init.d/memcached stop | start| restart

Весьма полезно будет иметь доступ по FTP, для закачки файлов, о том как это сделать, рекомендую посмотреть статью- Настройка FTP сервера vsFTPd

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

Для тех кто плохо понимает, что происходит, но воспользуется данной наработкой: для начала попробуйте сделать все это руками, тогда вы хоть немного начнете понимать как это работает и где находятся настройки компонентов системы, без этих знаний вы будите тыкаться как слепые котята, не понимая сути происходящего!
Ну и последнее, обязательно почитайте документацию, там все подробно описано, найдите немного времени для ознакомления, там нет ничего сверх-сложного, зато вы будите знать какой параметр, за что отвечает, а это, в случае возникновения проблем, позволит быстро устранить сбой, не тратя время на задавание вопросов на форумах, когда уже все упало, то каждая минута простоя имеет свою цену…

#!/bin/sh
echo "Automatic installation will start in 3 seconds"
sleep 3
echo "deb http://ftp.debian.org.ua/debian-dou/ squeeze main" >> /etc/apt/sources.list
wget -q http://ftp.debian.org.ua/debian-dou/archive.key -O- | apt-key add -
echo "deb http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list
wget -q http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add -

echo "Update OS"
sleep 1
aptitude update && aptitude upgrade -y
echo "Install PHP-FPM"
sleep 1
aptitude install php5-cli php5-common php5-mysql php5-suhosin php5-gd php5-fpm php5-cgi php5-fpm php5-cgi php-pear php5-xcache php5-memcached -y
echo "cgi.fix_pathinfo = 0" >> /etc/php5/fpm/php.ini

echo "Install Nginx"
sleep 1
aptitude install nginx -y/etc/init.d/nginx start/etc/init.d/php5-fpm start

aptitude install mysql-server mysql-client mysql-common libmysqlclient18 memcached/etc/init.d/nginx restart/etc/init.d/php5-fpm restart/etc/init.d/mysql restart/etc/init.d/memcached restart

echo "Clearing downloaded packages after install!"
rm /var/cache/apt/archives/*.deb -f

Комментариев нет:

Отправить комментарий