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

Как установить PHP 7.1.16 как PHP-FPM и FastCGI для ISPConfig 3.1 на Debian 8 (Джесси)


Это руководство существует для этих версий ОС

  • Debian 8 (Джесси)

На этой странице

  1. 1 Предварительное примечание
  2. 2. Скомпилируйте PHP 7.1 с помощью PHP-FPM и Fastcgi.
  3. 3. Создайте сценарий инициализации и файл модуля systemd.
    1. 3.1 Создание сценария запуска init.d
    2. 3.2 Создание скрипта Systemd для PHP 7.1

    Окончательная версия PHP 7.1 доступна для скачивания на Github и зеркала PHP уже сейчас. PHP 7.1 — это язык программирования 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.1 в виде версии PHP-FPM и FastCGI на сервере Debian Jessie. Эта сборка PHP 7.1 включает множество скомпилированных расширений, а также Zend OPcache и Memcached в виде загружаемых модулей.

    1 Предварительное примечание

    Я установлю PHP 7.1, финальная версия которого была выпущена несколько дней назад. Обратите внимание, что PHP-FPM можно использовать как на серверах Apache, так и на Nginx, а FastCGI доступен только для серверов Apache.

    В старых версиях PHP PHP-FPM и FastCGI были взаимоисключающими, поэтому бинарные файлы FPM и FastCGI приходилось собирать отдельно. В PHP 7.1 можно создать один двоичный файл, поддерживающий режимы FPM и FCGI.

    2. Скомпилируйте PHP 7.1 с помощью PHP-FPM и Fastcgi.

    Загрузите и распакуйте PHP 7.1 с Github:

    mkdir -p /opt/php-7.1
    mkdir /usr/local/src/php7-build
    cd /usr/local/src/php7-build
    wget http://de2.php.net/get/php-7.1.16.tar.bz2/from/this/mirror -O php-7.1.16.tar.bz2
    tar jxf php-7.1.16.tar.bz2
    cd php-7.1.16/

    Установите необходимые компоненты для сборки PHP 7.1 и редактор nano, который я буду использовать для редактирования файлов конфигурации:

    apt-get install build-essential nano autoconf
    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.7#

    )

    Настройте и соберите PHP 7.1 следующим образом (вы можете настроить команду ./configure под свои нужды, взгляните на

    ./configure --help

    просмотреть все доступные варианты; если вы используете другую команду ./configure, возможно, потребуются дополнительные библиотеки, иначе процесс сборки завершится ошибкой):

    ./configure --prefix=/opt/php-7.1 --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.1.16/php.ini-production /opt/php-7.1/lib/php.ini
    cp /opt/php-7.1/etc/php-fpm.conf.default /opt/php-7.1/etc/php-fpm.conf
    cp /opt/php-7.1/etc/php-fpm.d/www.conf.default /opt/php-7.1/etc/php-fpm.d/www.conf

    Откройте /opt/php-7.1/etc/php-fpm.conf и настройте следующий параметр (удалите ; перед строкой pid):

    nano /opt/php-7.1/etc/php-fpm.conf
    [...]
    pid = run/php-fpm.pid
    [...]

    Затем откройте /opt/php-7.1/etc/php-fpm.d/www.conf и настройте строку прослушивания, вы должны использовать неиспользуемый порт (например, 8999; порт 9000 может уже использоваться PHP-FPM Debian по умолчанию) :

    nano /opt/php-7.1/etc/php-fpm.d/www.conf
    [...]
    listen = 127.0.0.1:8999
    [...]

    Если вы используете несколько дополнительных версий PHP, обязательно используйте свободный порт, например. 8998, 8997 и так далее для следующих версий.

    3 Создайте сценарий инициализации и файл модуля systemd

    Debian поддерживает Systemd, а также традиционные сценарии инициализации. Большинство современных систем используют Systemd, в этом случае переходите к главе 3.2, для систем с традиционной системой инициализации следуйте главе 3.1, а затем переходите к главе 4. Не устанавливайте оба скрипта, systemd и init.d, в одной и той же системе.

    3.1 Создайте стартовый скрипт init.d

    Сначала я создам сценарий инициализации для службы php-fpm, а затем создам модуль systemd.

    Сначала создайте скрипт инициализации для PHP-FPM:

    nano /etc/init.d/php-7.1-fpm
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          php-7.1-fpm
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts php-7.1-fpm
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO
    php_fpm_BIN=/opt/php-7.1/sbin/php-fpm
    php_fpm_CONF=/opt/php-7.1/etc/php-fpm.conf
    php_fpm_PID=/opt/php-7.1/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.1-fpm
    insserv php-7.1-fpm

    Наконец запустите PHP-FPM:

    /etc/init.d/php-7.1-fpm start

    Результат должен быть:

    /etc/init.d/php-7.1-fpm start
    Starting php-fpm done

    3.2 Создание скрипта Systemd для PHP 7.1

    Теперь создайте файл модуля systemd:

    nano /lib/systemd/system/php-7.1-fpm.service

    со следующим содержанием:

    [Unit]
    Description=The PHP 7.1 FastCGI Process Manager
    After=network.target

    [Service]
    Type=simple
    PIDFile=/opt/php-7.1/var/run/php-fpm.pid
    ExecStart=/opt/php-7.1/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.1/etc/php-fpm.conf
    ExecReload=/bin/kill -USR2 $MAINPID

    [Install]
    WantedBy=multi-user.target

    Включите службу и перезагрузите systemd:

    systemctl enable php-7.1-fpm.service
    systemctl daemon-reload

    Наконец запустите PHP-FPM:

    systemctl start php-7.1-fpm.service

    4 Включить Zend OPcache

    Чтобы включить Zend OPcache, откройте /opt/php-7.1/lib/php.ini...

    nano /opt/php-7.1/lib/php.ini

    ... и добавьте в конце следующую строку:

    [...]
    zend_extension=opcache.so

    Расширение Memcache и APCu пока нельзя установить на PHP 7.1, поэтому я пока пропущу их установку. Я обновлю руководство позже, когда расширения pecl будут совместимы с PHP 7.1.

    Протестируйте версию PHP:

    cd /opt/php-7.1/bin
    ./php --version

    Вывод должен быть похож на этот снимок экрана.

    Обратите внимание: скриншот сделан из PHP 7.1.16, руководство постоянно обновляется для новых версий PHP 7.1, но мы не делаем каждый раз новые скриншоты, поэтому версия PHP 7.1, которую вы увидите на своем сервере, может быть новее. Текущая версия этого руководства предназначена для php-7.1.16.

    5 Включить Memcache (необязательно)

    В этой главе я скомпилирую и включу расширение PHP Memcached.

    Первый шаг — установить пакет libmemcached-dev из Debian.

    apt-get install libmemcached-dev

    Затем создайте каталог, загрузите расширение PHP memcache с Github, распакуйте архив и войдите в каталог, содержащий распакованные файлы.

    mkdir /usr/local/src/php7-build/php-memcache
    cd /usr/local/src/php7-build/php-memcache
    wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
    unzip php7.zip
    cd php-memcached-php7

    Подготовьте исходники, запустив команду phpize из PHP 7.1.

    /opt/php-7.1/bin/phpize

    Настройте и соберите расширение PHP memcache.

    ./configure --with-php-config=/opt/php-7.1/bin/php-config
    make
    make install

    Чтобы включить расширение Memcache, откройте /opt/php-7.1/lib/php.ini...

    nano /opt/php-7.1/lib/php.ini

    ... и добавьте в конце следующую строку:

    [...]
    extension=memcached.so

    2.1 Установите расширение xDebug (необязательно)

    Модуль xDebug – это расширение отладки для PHP. Установка не является обязательной.

    Установите xDebug с помощью этих команд.

    cd /opt/php-7.1/etc
    pecl -C ./pear.conf update-channels
    pecl -C ./pear.conf install xdebug

    Затем отредактируйте файл php.ini с помощью редактора:

    nano /opt/php-7.1/lib/php.ini

    и добавьте в конец файла следующую строку:

    zend_extension=/opt/php-7.1/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

    Наконец, перезапустите демон php-fpm:

    service php-7.1-fpm restart

    7 Включите PHP 7.1 в ISPConfig

    В ISPConfig 3 вы можете настроить новую версию PHP в разделе «Система» > «Дополнительные версии PHP». На вкладке «Имя» вы просто вводите имя для версии PHP (например, PHP 7.1) — эта версия PHP будет указана под этим именем в настройках веб-сайта в ISPConfig:

    Перейдите на вкладку FastCGI Settings и заполните поля следующим образом:

    Path to the PHP FastCGI binary: /opt/php-7.1/bin/php-cgi
    Path to the php.ini directory: /opt/php-7.1/lib

    Затем перейдите на вкладку Настройки PHP-FPM и заполните поля следующим образом:

    Path to the PHP-FPM init script: /etc/init.d/php-7.1-fpm
    Path to the php.ini directory: /opt/php-7.1/lib
    Path to the PHP-FPM pool directory: /opt/php-7.1/etc/php-fpm.d

    7 ссылок

    • PHP: http://www.php.net/
    • ISPConfig: http://www.ispconfig.org/
    • Debian: http://www.debian.org/