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

По многочисленным просьбам общественности, выкладываю инструкцию по настройке сервера под управлением ОС Debian.
Статья будет построена по модульному типу т.е. будет базовая часть, которую необходимо выполнить на 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 -y
/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


На этом позвольте закончить.

25 комментариев

avatar
Спасибо очень хорошая статья
avatar
Пожалуйста, пользуйтесь.
avatar
Подскажи пожалуйста, какие репозитории для Nginx и php-fpm на Ubuntu Server 11.10.
avatar
можно посмотреть на launchpad.net/nginx или на nginx.org, а вот на счет php-fpm придется немного поискать
avatar
А чем хуже spawn-fcgi от Lighttpd?
Просто интересна разница между PHP-FPM и spawn-fcgi.
Если я правильно понимаю, то PHP-FPM уже идет вместе с пакетом PHP?
avatar
Нет, это разные реализации, для обработки PHP.
Которые были написаны разными людьми. Считается, что PHP-FPM, более производителен…
avatar
Ну, а сам что предпочитаешь? :)
avatar
Может кому-то будет полезно:
Вместо /etc/init.d/php-fpm restart надо писать /etc/init.d/php5-fpm restart
avatar
Спасибо, исправил.
avatar
Это опять я :)
Все установил, все ок. Отдельные html страницы показывает, но установить движок livestreet не удалось. При переходе на главную(example.org) выдает ошибку Access denied, тоже самое и с index.php. 403 Forbidden появляется при переходе на /install.

Проблема как я понимаю в конфигах nginx, правильно ли я понимаю? ))
avatar
Думаю что не правильно-Проблема в правах доступа…
avatar
Вы правы! Исправил и, наконец, все заработало :)
avatar
Аминь :)
avatar
Вопрос по поводу xcache. Установил, настроил, работает. Но — не могу найти админку xcache. Не подскажешь, где лежит? Гугл не смог помочь:)
avatar
А что нам говорит документация, по данному вопросу?!
avatar
Ничего хорошего не нашел…
avatar
Посмотрите внимательнее, по запросу xcache admin
gnu.su/print.php?news.848
xcache.lighttpd.net/wiki/InstallAdministration
avatar
В том то и дело, у меня нет папки с админкой xcache.
avatar
Честно говоря, не готов ответить, нужно садиться и разбираться
avatar
wget http://xcache.lighttpd.net/pub/Releases/2.0.1-rc3/xcache-2.0.1-rc3.tar.bz2
tar -xjvf xcache-2.*
cd xcache-2.*
phpize
./configure --enable-xcache
make && make install



nano /etc/php5/fpm/conf.d/xcache.ini
http://pastebin.com/WcZ0RT1X

Создаем себе пароль для входа в админку

<?php
echo md5("password");
?>


xcache.admin.user = "mOo"
xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99"
avatar
Админку скопировать из разархивированного фаила(папка admin) в папку веб сервера
avatar
Давайте представим что никто не понял что это вы такое «забульбенили».
Вы хоть объясните, что хотели получить-то?
avatar
Я ничего не хотел получить) Ответил на комментарий выше howitmake.ru/blog/debian/62.html#comment468
Админка есть если из исходников собрать xcache вот я и описал как.
avatar
Вот вы лучше, в виде отдельной статьи оформите, будет намного понятнее и полезнее
Есть что добавить? Регистрируйся и оставляй комментарии!