Как установить PHP 7.1.16 как PHP-FPM и FastCGI для ISPConfig 3.1 на Debian 8 (Джесси)
Это руководство существует для этих версий ОС
- Debian 8 (Джесси)
На этой странице
- 1 Предварительное примечание
- 2. Скомпилируйте PHP 7.1 с помощью PHP-FPM и Fastcgi.
- 3. Создайте сценарий инициализации и файл модуля systemd.
- 3.1 Создание сценария запуска init.d
- 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.bz2cd 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 done3.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.d7 ссылок
- PHP: http://www.php.net/
- ISPConfig: http://www.ispconfig.org/
- Debian: http://www.debian.org/