Настраиваем сервер для LiveStreet. Часть VI. PHP.

Предыдущие части:

Итак, лезем упоминавшийся в третей части конфигурационный файл /etс/apt/sources.list:
vim /etс/apt/sources.list

и раcкомментируем там dotdeb.org (две последние строки). После чего обновляемся:
apt-get update

Устанавливаем php, и всё что с ним связано следующими командами:
apt-get install php5-cli php5-common php5-suhosin php5-mcrypt php5-mysql php5-gd php5-dev php-pear php5-curl php5-memcache

apt-get install php5-fpm

После чего опять комментируем dotdeb.org в /etс/apt/sources.list и опять обновляемся:
apt-get update


Правим конфигурационный файл /etc/php5/fpm/php.ini. Примерно в строке 430 должно стать так:
expose_php = Off
и, примерно в строке 1060:
mail.add_x_header = Off
И несколько важностей по совету ewden :
строка ~385:
disable_functions = exec, system, passthru, shell_exec, popen
сторка ~645:
error_log = /var/log/php_errors.log
сторка ~1430:
session.save_path = "/var/lib/php5"

Замечание для продвинутых: Можно в этом же конфигурационном файле задать значение для Return-Path в заголовке отсылаемых писем:
sendmail_path = /usr/sbin/sendmail -t -i -fnoreply@superls.ru
Но, внимание, в зависимости от того какой используется MTA, возможно, потребуются дополнительная настройка trusted user y MTA (www-data должен быть trusted user-ом MTA). Иначе в эти же заголовки писем будут никому не нужные предупреждения помещаться вида «X-Authentication-Warning»


Замечание: Если планируем использовать отложенную рассылку сообщений (LiveStreet умеет), что неизбежно по достижении хоть сколько-нибудь заметного количества зарегистрированных пользователей, то настройки касающиеся электронной почты(mail.add_x_header, sendmail_path и т.п.) нужно повторить в конфигурационном файле /etc/php5/cli/php.ini.

В конфигурационном файле /etc/php5/fpm/pool.d/www.conf, ищем и правим следующие строки:
listen = /var/run/php5-fpm.socket

pm.max_children = 25

pm.start_servers = 4

pm.min_spare_servers = 2

pm.max_spare_servers = 10

pm.max_requests = 500
Внимание, что-то из этих строк может быть изначально закомментировано, что-то просто иметь другие значения. В случае VPS, я настоятельно рекомендую не ставить большие значения. Детальное описание опций можно почитать тут: www.php.net/manual/ru/install.fpm.configuration.php

Ре-стартуем это счастье:
/etc/init.d/php5-fpm restart


Ставим mod-fastcgi для Apache:
apt-get install libapache2-mod-fastcgi

Лезем в конифигурационный файл /etc/apache2/mods-available/fastcgi.conf он должен стать таким:
<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  FastCgiIpcDir /var/lib/apache2/fastcgi
  FastCGIExternalServer /usr/sbin/php-fpm -socket /var/run/php5-fpm.socket -idle-timeout 30
</IfModule>

Важное замечание: Последний параметр -idle-timeout имеет выше значение по умолчанию. Это тайм-аут в секундах на выполнение любого запроса. В нормальной режиме — этого за глаза, но для медленных машин и VPS я советую увеличить это значение. Можно даже раза в 4. По крайне мере одна операция — инициализация базы данный во время установки LiveStreet на не очень быстром сервере может занимать более 30 секунд. Я лично сталкивался.

Рестартуем Apache:
/etc/init.d/apache2 restart


Создаём тестовый файл /var/www/superls.ru/public/info.php следующего содержания:
<?php
phpinfo();
?>


Предполагается, что наш сайт всё еще прописан в /etc/hosts (мы делали это в конце прошлой части). Запускаем lynx, жмем кнопку G набиваем адрес (с http:// ): superls.ru:8080/info.php и смотрим на php-простыню. Убеждаемся что там есть упоминание: Server API FPM/FastCGI.

Продолжение в следующей части:
Часть VII. NGINX.
Качественная и недорогая контекстная реклама.

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

avatar
Я тут мимо пробегаю. И снова с вопросами. :)
А как-же логирование ошибок, allow_url_fopen, allow_url_include, disable_functions, open_basedir, session.save_path который в дебиане ну уж надо поправить.
avatar
Вопрос не понял :) у php-fpm есть стандартный лог в /var/log/ его вроде как хватает. Apache и nginx свои тоже будут писать. Что имеете ввиду? Насчет остальных опций — сам не трогал. Пишите что считаете нужным подправить — протестирую и поменяю.
avatar
Логирование ошибок — в скриптах, вместо того, чтобы из показывать (Отключаем display_errors в php.ini, а так-же в index.php). И можно не беспокоиться за так называемые уязвимости раскрытия путей, которые тут переодически бывают. Дабы знать, что у нас происходят ошибки на сайте, можно добавить анализаторы логов.
allow_url_fopen Не даёт работать с удалёнными файлами. По умолчанию оно выключено.
disable_functions — Отключение заведомо не нужных (вредных) функций.
Например так:
disable_functions = exec, system, passthru, shell_exec, popen

open_basedir — В паре словах, ограничивает дерево каталогов, куда php имеет доступ. В инете много примеров.
session.save_path — дотдебовский пхп все файлы сессий кидал в /tmp, скрипт очистки этих файлов работает по умолчанию на /var/lib/php5.
Соотвественно в php.ini это тоже стоит учесть и поправить.
avatar
Наслышан про p=exec cat /etc/passwd
Как всегда отличное и важное дополнение
avatar
exec иногда нужен, когда часть кода зашифрована с помощью ioncube
Возможно, в некоторых плагинах LS, которые используют ioncube, тоже нужен будет exec
avatar
Насчёт логов ошибок — error_log = /var/log/php_errors.log
log_errors = on
В php-fpm кстати не мение полезная штука есть — slowlog.
avatar
Рестартуем Apache:
No apache MPM package installed
avatar
упс, я пропустил 1 раздел)
avatar
Не пойму что за хрень. Вчера поставил все по вашему мануалы со 2 по эту часть, линксом так же заходил как тут описано было Server API FPM/FastCGI. Так как приостанавливать работу сайта было нежелательно поменял с 8080 порта на 80 пока нету статьи про nginx. Сейчас захожу в phpinfo



Или это из за того что порт сменил? До этого у меня стоял голый апач, тоже был апаче хэндлер, потом решил полностью переустановить ОС и ПО.
avatar
Честно сказать, теряюсь в догадках :) По этому описанию устанавливается php-fpm и php-cli но не устанавливается php-mod. Если вы ничего не пере устанавливали, а только открыли порт то должно работать php-fpm. Что меняли в точности?
avatar
Внес в топик несколько дополнений: некоторые рекомендации из комментариев ewden , и замечание про /etc/php5/cli/php.ini
avatar
А вот у меня вопрос: postfix не будем вешать? У меня допустим не только LS… Можно дописать в принципе об этом…
avatar
Настройка почтового сервера, на мой взгляд, сложнейшая тема. Самая сложная во всей этой кухне. Но. Во-первых для не большого сервера не факт что нужная. Бесплатные публичные варианты можно использовать от Гугла или Яндекс. Во-вторых лично я postfix не ставил и врать о том как это делать не хочу. А о том что именно использовал я у нас на сервере — не хочу тоже описывать, ибо незачем учить людей дурным решениям :)
avatar
Еще один вопрос. Я установил FastCGI и хочу изменить для него параметр PHP_FCGI_CHILDREN. Вопрос: где его указывать? В php.ini указывал — не хавает =(
avatar
/etc/php5/fpm/pool.d/www.conf
pm.max_children
avatar
Странно, там стоит 5, а Xcache все равно утверждает, что у меня <1 =(
avatar
Заметил на одной машине — не используется fpm, вместо него работает cgi… А fpm вообще похоже не задействован…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.