Поиск по сайту:

Как установить 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/