Как установить PHP 7 как PHP-FPM и FastCGI для ISPConfig 3 на Debian 8 (Джесси)
Окончательная версия PHP 7 уже доступна для загрузки на Github и зеркала PHP. PHP7 — это язык программирования PHP следующего поколения. Согласно примечаниям к выпуску, он в 2 раза быстрее, чем PHP 5.6, и в 14 раз быстрее, чем PHP 5.0. Новая версия PHP не на 100% совместима с PHP 5.x, поскольку некоторые устаревшие API были удалены, поэтому рекомендуется начать тестирование веб-сайтов на совместимость с этой новой версией. Это можно сделать легко и без ущерба для всех сайтов на вашем сервере, используя функцию нескольких версий PHP в ISPConfig 3. Версию PHP можно выбрать в настройках веб-сайта ISPConfig 3 для каждого сайта отдельно. Эта функция работает с PHP-FPM и FastCGI. В этом руководстве показано, как собрать новый PHP 7 в виде версии PHP-FPM и FastCGI на сервере Debian Jessie. Эти сборки PHP 7 включают Zend OPcache. -box-3-0;var ffid=1;var alS=1002%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins=document.createElement(ins);ins. id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive=true;}
1 Предварительное примечание
Я установлю PHP 7, который в настоящее время находится в бета-версии на момент написания этой статьи. Обратите внимание, что PHP-FPM можно использовать как на серверах Apache, так и на серверах Nginx, а FastCGI доступен только для серверов Apache.
В старых версиях PHP PHP-FPM и FastCGI были взаимоисключающими, поэтому бинарные файлы FPM и FastCGI приходилось собирать отдельно. В PHP 7 можно создать один двоичный файл, поддерживающий режимы FPM и FCGI.
2. Скомпилируйте PHP 7 с помощью PHP-FPM и Fastcgi.
Загрузите и извлеките PHP 7 из Github:
mkdir -p /opt/php-7.0.32
mkdir /usr/local/src/php7-build
cd /usr/local/src/php7-build
wget http://de2.php.net/get/php-7.0.32.tar.bz2/from/this/mirror -O php-7.0.32.tar.bz2
tar jxf php-7.0.32.tar.bz2
cd php-7.0.32/
Установите необходимые компоненты для сборки PHP 7 и редактор nano, который я буду использовать для редактирования файлов конфигурации:
apt-get install build-essential nano
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
(Последняя команда нужна, если вы собираете PHP с --with-imap, иначе ./configure остановится со следующей ошибкой:
checking for crypt in -lcrypt... yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
:/usr/local/src/php5-build/php-7.0.32#
)
Настройте и соберите PHP 7.0.0 следующим образом (вы можете настроить команду ./configure под свои нужды, взгляните на
./configure --help
просмотреть все доступные варианты; если вы используете другую команду ./configure, возможно, потребуются дополнительные библиотеки, иначе процесс сборки завершится ошибкой):
./configure --prefix=/opt/php-7.0.32 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm
Последний переключатель (--enable-fpm) гарантирует, что эта версия PHP будет работать с PHP-FPM.
make
make install
Скопируйте php.ini и php-fpm.conf в нужные места:
cp /usr/local/src/php7-build/php-7.0.32/php.ini-production /opt/php-7.0.32/lib/php.ini
cp /opt/php-7.0.32/etc/php-fpm.conf.default /opt/php-7.0.32/etc/php-fpm.conf
cp /opt/php-7.0.32/etc/php-fpm.d/www.conf.default /opt/php-7.0.32/etc/php-fpm.d/www.conf
Откройте /opt/php-7.0.32/etc/php-fpm.conf и настройте следующий параметр (удалите ; перед строкой pid):
nano /opt/php-7.0.32/etc/php-fpm.conf
[...] pid = run/php-fpm.pid [...]
Затем откройте /opt/php-7.0.32/etc/php-fpm.d/www.conf и настройте строку прослушивания, вы должны использовать неиспользуемый порт (например, 8999; порт 9000 может использоваться PHP-FPM Debian по умолчанию). уже):
nano /opt/php-7.0.32/etc/php-fpm.d/www.conf
[...] listen = 127.0.0.1:8999 [...]
3 Создайте сценарий инициализации и файл модуля systemd
Debian поддерживает Systemd, а также традиционные сценарии инициализации. Сначала я создам сценарий инициализации для службы php-fpm, а затем создам модуль systemd.
Сначала создайте сценарий инициализации для PHP-FPM:
nano /etc/init.d/php-7.0.32-fpm
#! /bin/sh ### BEGIN INIT INFO # Provides: php-7.0.32-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-7.0.32-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-7.0.32/sbin/php-fpm php_fpm_CONF=/opt/php-7.0.32/etc/php-fpm.conf php_fpm_PID=/opt/php-7.0.32/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac
Сделайте скрипт инициализации исполняемым и создайте ссылки для запуска системы:
chmod 755 /etc/init.d/php-7.0.32-fpm
insserv php-7.0.32-fpm
А теперь создайте файл модуля systemd
nano /lib/systemd/system/php-7.0.32-fpm.service
со следующим содержанием:
[Unit]
Description=The PHP 7 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/opt/php-7.0.32/var/run/php-fpm.pid
ExecStart=/opt/php-7.0.32/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.32/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
Включите службу и перезагрузите systemd:
systemctl enable php-7.0.32-fpm.service
systemctl daemon-reload
Наконец, запустите PHP-FPM.
Для систем с традиционной системой инициализации запустите:
/etc/init.d/php-7.0.32-fpm start
Результат должен быть:
/etc/init.d/php-7.0.32-fpm start
Starting php-fpm done
На серверах, использующих systemd, используйте вместо этого эту команду:
systemctl start php-7.0.32-fpm.service
Чтобы включить Zend OPcache, откройте /opt/php-7.0.32/lib/php.ini...
nano /opt/php-7.0.32/lib/php.ini
... и добавьте в конце следующую строку:
[...] zend_extension=opcache.so
Расширение Memcache и APCu пока нельзя установить на PHP 7, поэтому я пока пропущу их установку. Я обновлю руководство позже, когда расширения pecl будут совместимы с PHP 7.
Протестируйте версию PHP:
cd /opt/php-7.0.32/bin
./php --version
Вывод должен быть похож на этот снимок экрана.
Обратите внимание. Снимок экрана относится к PHP 7.0.0, руководство постоянно обновляется для новых версий PHP 7, но мы не делаем каждый раз новые снимки экрана, поэтому версия PHP 7, которую вы увидите на своем сервере наверное новее. Текущая версия этого руководства предназначена для php-7.0.32.
4 Включите PHP 7 в ISPConfig
В ISPConfig 3 вы можете настроить новую версию PHP в разделе «Система» > «Дополнительные версии PHP». На вкладке «Имя» вы просто вводите имя для версии PHP (например, PHP 7.0.0) — эта версия PHP будет указана под этим именем в настройках веб-сайта в ISPConfig:
Перейдите на вкладку FastCGI Settings и заполните поля следующим образом:
Path to the PHP FastCGI binary: /opt/php-7.0.32/bin/php-cgi
Path to the php.ini directory: /opt/php-7.0.32/lib
Затем перейдите на вкладку «Настройки PHP-FPM» и заполните поля следующим образом:
Path to the PHP-FPM init script: php-7.0.32-fpm
Path to the php.ini directory: /opt/php-7.0.32/lib
Path to the PHP-FPM pool directory: /opt/php-7.0.32/etc/php-fpm.d
5 ссылки
- PHP: http://www.php.net/
- ISPConfig: http://www.ispconfig.org/
- Debian: http://www.debian.org/