установка\поддержка php-fpm (php FastCGI process manager)
Overview
Установка php-fpm из портов в FreeBSD
Установка php-fpm из исходников (для FreeBSD и Linux)
Установка php-fpm из пакетов в RHEL5\CentOS5
Альтернативные варианты
Полезные ссылки
changelog
php-fpm - это патч для php, реализующий функциональность FastCGI менеджера процессов.
Данный проект изначально разрабатывался и поддерживался by Andrei Nigmatulin.
Позднее (200609) Андрей перевел проект на лицензию BSD и временно перестал поддерживать проект.
Новый мантейнер - Michael Shadle mike503 at gmail.com
В основном php-fpm ориентирован для использования на высоконагруженных проектах.
О различных фичах php-fpm можно посмотреть сдесь: http://php-fpm.org/What_is_PHP-FPM
Вокруг проекта сложилось сообщество, активно общающюеся в google-groups:
highload-php-ru
highload-php-en
Скачать порты php-fpm для freebsd можно сдесь:
http://php-fpm.org/downloads/freebsd-port/
Следует скачать последний порт для php-fpm, соотвествующий версии php в системе портов.
Ниже приводится пример установки для версии, которая на текущий момент уже является устаревшей, но принципиально процесс не отличается. Будут отличаться только версии php и fpm патча.
Скачиваем, распаковываем в /usr/ports/lang/php5-fpm
wget http://php-fpm.anight.org/downloads/freebsd-port/php-5.2.8-fpm-0.5.10.tar.gz
tar -xvf php-5.2.8-fpm-0.5.10.tar.gz -C /usr/ports/lang/
если до этого был установлен php5 более старой версии чем 5.2.8 (а скорей всего так и было ;), то пхп5 следует обновить.
portupgrade -rR php5
собирать можно как отдельно, так уже и поверху собранного php5.
Опции:
#less /var/db/ports/php5-fpm/options
# This file is auto-generated by 'make config'.
# No user-servicable parts inside!
# Options for php5-fpm-5.2.6_1
_OPTIONS_READ=php5-fpm-5.2.6_1
WITHOUT_CLI=true
WITHOUT_DEBUG=true
WITH_SUHOSIN=true
WITH_MULTIBYTE=true
WITHOUT_IPV6=true
WITH_MAILHEAD=true
WITH_PATHINFO=true
echo php_fpm_enable="YES" >> /etc/rc.conf
cp /usr/local/etc/php-fpm.conf.dist /usr/local/etc/php-fpm.conf
Правим php-fpm.conf для минимально-рабочей конфигурации. Нужно раскоментировать строки от какого пользователя будет запускаться пхп.
Unix user of processes
nobody
Unix group of processes
www
Также нужно выбрать модель конекта к фастцжи серверу. Я предпочитаю конектится через сокет, поэтому:
- 127.0.0.1:9000
+ /tmp/php-fcgi.sock
при этом в nginx:
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php-fcgi.sock;
}
Cтартуем php5-fpm и радуемся жизни ;)
В некоторых случаях бывает более целесообразно установить php-fpm из исходников.
Причины для этого рассмотрены ниже. Также часто бывает, что для текущей версии php просто нету соотвествущего порта.
Либо установка производится на различных OS, где версии php не совпадают, и часто уже их нельзя поменять, т.е. php-fpm ставится дополнительно к уже работающему apache+mod_php.
Когда-то я с горячим стремлением делать все стандартно отгреб немало проблем от скрещивания стандартного хостинга с php-fpm.
Вернее стоял php-fpm, который работал по своему назначению, а также одновременно этот же бинарь использовался и для обычных пользователей, работающих через apache + mod_fastcgi + php.
Собственно грабли начались когда общий php нужно было обновить, а porta для текущей версии php-fpm небыло, писать править порт самому у меня тоже не было времени.
Да да, php это дыра, и за безопасностью приходится постоянно следить и обновлять порты\пакеты.
В итоге я извлек опыт, что стандартизация(установка из портов) это хорошо, но усложнение системы - это гораздо хуже.
После этого я написал небольшой скрипт для автоматизации установки php-fpm и стал ставить php-fpm в отдельное место, чтобы данная установка была независима и не затрагивала другие порты.
Поддерживать таким образом php-fpm стало заметно проще.
собственно скрипт можно стянуть отсюда:
http://paix.org.ua/scripts/install_php5-fpm.sh
Это всеголишь мой скрипт с коленки, никаких проверок он особо не делает и не идеален. Но позволяет по 30 раз не вспоминать как же инсталировать php-fpm. Достаточно прописать текущую версию php и прописать нужную версию патча php-fpm, разумеется если последний существует для данной версии php.
Узнать версию последнего стабильного патча можно отсюда:
http://php-fpm.org/Download
При установке на FreeBSD, с описанным в скрипте набором php-экстеншинов, может понадобиться доставить некоторые пакеты.
Например:
portinstall mcypt
portinstall mhash
В случае установки на RHEL\CentOS linux, следует установить следующие пакеты:
yum install patch gcc pcre-devel zlib-devel bzip2-devel libjpeg-devel freetype-devel \
libpng-devel libxml2-devel libmcrypt-devel openssl-devel curl-devel libmhash-devel mysql-devel
После компилиции в конце вы должны увидеть примерно следующее:
Installing PHP SAPI module: cgi
Installing PHP CGI binary: /usr/local/php5-fpm/bin/
Installing FPM config: /usr/local/php5-fpm/etc/php-fpm.conf
Installing init.d script: /usr/local/php5-fpm/sbin/php-fpm
Installing PHP CLI binary: /usr/local/php5-fpm/bin/
Installing PHP CLI man page: /usr/local/php5-fpm/man/man1/
Installing build environment: /usr/local/php5-fpm/lib/php/build/
Installing header files: /usr/local/php5-fpm/include/php/
Installing helper programs: /usr/local/php5-fpm/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php5-fpm/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php5-fpm/lib/php/
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Archive_Tar - installed: 1.3.2
[PEAR] Structures_Graph- installed: 1.0.2
pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
[PEAR] PEAR - installed: 1.7.2
Wrote PEAR system config file at: /usr/local/php5-fpm/etc/pear.conf
You may want to add: /usr/local/php5-fpm/lib/php to your php.ini include_path
Installing PDO headers: /usr/local/php5-fpm/include/php/ext/pdo/
что говорит о успешной инсталяции php-fpm в /usr/local/php5-fpm/
Как видно, стартовый скрипт и конфиги также расположены в этой директории.
# /usr/local/php5-fpm/sbin/php-fpm
Usage: /usr/local/php5-fpm/sbin/php-fpm {start|stop|quit|restart|reload|logrotate}
Весьма неплохо процесс ручной сборки и наложения патчей, в частности сборки под linux, описан сдесь:
http://ru.wikipedia.org/wiki/Участник:Roxis/Установка_php-fpm_на_Centos/Fedora/Debian
Разумеется, если в наличии есть текущий порт\пакет php-fpm, а также в системе не задейстованы другие php то ставить нужно стандартно из портов\пакетов.
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
и затем CentALT репозиторий:
rpm -Uvh http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm
разумеется, в случае x86_64, нужно будет поставить соотвествующую версию пакета.
Далее настраиваем приоритеты репозитариев:
yum -y install yum-priorities
sed -i '/\[base\]/a priority=1' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/\[updates\]/a priority=1' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/\[addons\]/a priority=2' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/\[extras\]/a priority=2' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/\[centosplus\]/a priority=3' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/\[epel\]/a priority=22' /etc/yum.repos.d/epel.repo
sed -i '/\[CentALT\]/a priority=33' /etc/yum.repos.d/centalt.repo
Настройка исключений (чтобы yum не пытался поставить пакеты php из base):
sed -i '/\[base\]/a exclude=php*' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/\[updates\]/a exclude=php*' /etc/yum.repos.d/CentOS-Base.repo
после этого установка\поддержка php-fpm становится тривиальной:
yum install php-fpm
Также в CentALT репозитарии содержится много довольно интересных пакетов, таких как:
nginx (devel)
clamav
memcached
php-eaccelerator
spawn-fcgi
полный список тут:
http://centos.alt.ru/repository/centos/5/i386/
Есть некоторые хорошие правила:
Чем проще - тем лучше.
Все нужно делать стандартно.
Во многих случаях функциональность fpm и не требуется, а сопуствующие нюансы конфигурирования и поддержки приводят к большим временным потерям.
Например, у вас есть небольшой хостинг, в котором пользователи активно хотят использовать mod_rewrite, .htaccess и тому подобные вещи.
Я очень доволен связкой nginx + apache + mod_php, управлять виртуальными хостами в апаче чрезвычайно просто, для нужных хостов можно прописывать в nginx и отдельные локейшины для отдачи статики.
Во многих случаях может быть проще запускать php в режиме FastCGI через lighttpd spawn scipt
На вышеупомянутом сайте есть соответвующая рубрика:
RPM spawn-fcgi CentOS 5/Fedora 11
Начиная с версии lighttpd – 1.4.23, скрипт spawn-fcgi вынесен в отдельный проект.
Собрать spawn-fcgi можно самому или скачать сдесь: ftp://centos.alt.ru/pub/spawn-fcgi/
В данном случае нам нужно поставить только небольшую программку, которая будет стартовать php в режиме FastCGI.
Плюсы такого подхода в простоте и возможности использования штатных версий php, для которых RHEL (либо другой нормальный дистрибутив) осуществляет поддержку и security backporting.
#---------------------------
changelog:
v0.5 - расширена информация раздела Установка php-fpm из пакетов в RHEL5\CentOS5, описаны подключение репозитариев CentALT (0709)
v0.4 - переработал статью с целью обобщения, приведения в актуальное состояние, различные изменения, связанные с изменением меинтейнера и лицензии (0709)
v0.3 - добавлена информация про смену меинтейнера и выпуск порта для 5.2.10 (0609)
v0.2 - переписал статью на html, добавлена секция про source installing, альтернативные варианты (0609)
v0.1 - статья на старом сайте (1008)
Home