Гид по технологиям

Сборка и установка PHP 5.6.36 (PHP‑FPM и FastCGI) на Debian Wheezy

• 6 min read • DevOps • Обновлено 27 Nov 2025
PHP 5.6.36 на Debian: PHP‑FPM и FastCGI
PHP 5.6.36 на Debian: PHP‑FPM и FastCGI

Version 1.0
Authors: Till Brehm , Falko Timme
Follow howtoforge on Twitter

Введение

ISPConfig 3 поддерживает несколько версий PHP на одном сервере и позволяет выбрать оптимальную версию для сайта. Эта возможность работает с PHP‑FPM и FastCGI. В руководстве показано, как собрать PHP 5.6.36 как в варианте PHP‑FPM, так и в варианте FastCGI на Debian Wheezy. Сборки включают Zend OPcache и APCu.

Краткое определение: PHP‑FPM — менеджер процессов FastCGI для PHP. FastCGI — интерфейс между веб‑сервером и интерпретатором PHP.

Важно: PHP‑FPM можно использовать с Apache и nginx. FastCGI доступен только для Apache. В PHP 5.6 PHP‑FPM и FastCGI взаимоисключают некоторые опции, поэтому приведены два способа сборки. При желании можно собрать PHP дважды — с –enable-fpm и с –enable-cgi, но тогда используйте разные директории, например /opt/php-5.6.36 и /opt/phpfcgi-5.6.36.

Примечание: ioncube loader для PHP 5.6 в момент написания недоступен, поэтому шаг по нему опущен.

Подготовка к сборке

Создайте директории и скачайте исходники:

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

Установите зависимости для сборки PHP:

apt-get install build-essential
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev

Если вы планируете собирать с поддержкой IMAP, создайте символическую ссылку для библиотеки libc-client.a:

ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

Без этой ссылки ./configure может завершиться ошибкой, сообщающей об отсутствии imap библиотеки.

Сборка PHP 5.6.36 для PHP‑FPM

Сконфигурируйте сборку. Ниже — пример ./configure с популярными опциями; при изменении флагов могут потребоваться дополнительные библиотеки:

./configure --prefix=/opt/php-5.6.36 --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-mysql --with-pdo-mysql --with-mysqli --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‑FPM.

Соберите и установите:

make
make install

Скопируйте конфигурационные файлы:

cp /usr/local/src/php5-build/php-5.6.36/php.ini-production /opt/php-5.6.36/lib/php.ini
cp /opt/php-5.6.36/etc/php-fpm.conf.default /opt/php-5.6.36/etc/php-fpm.conf

Откройте /opt/php-5.6.36/etc/php-fpm.conf и отредактируйте основные параметры. В listen укажите свободный порт, например 127.0.0.1:8999 (порт 9000 может быть занят). В конец файла добавьте include=/opt/php-5.6.36/etc/pool.d/*.conf:

vi /opt/php-5.6.36/etc/php-fpm.conf
[...]
pid = run/php-fpm.pid
[...]
user = www-data
group = www-data
[...]
listen = 127.0.0.1:8999
[...]
include=/opt/php-5.6.36/etc/pool.d/*.conf

Создайте директорию пулов и init‑скрипт:

mkdir /opt/php-5.6.36/etc/pool.d

Создайте файл /etc/init.d/php-5.6.36-fpm со следующим содержимым:

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

Запустите сервис:

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

Если пулов ещё нет в /opt/php-5.6.36/etc/pool.d, при запуске появится предупреждение об отсутствии конфигураций пулов — его можно игнорировать.

Для включения Zend OPcache откройте /opt/php-5.6.36/lib/php.ini и добавьте в конец:

zend_extension=opcache.so

Установка APCu, memcache и memcached через PECL

Установите PEAR/PECL и обновите каналы:

apt-get -y install php-pear
cd /opt/php-5.6.36/etc
pecl -C ./pear.conf update-channels

Установите APCu:

pecl -C ./pear.conf install channel://pecl.php.net/apcu-4.0.6

Примите значения по умолчанию. Затем откройте /opt/php-5.6.36/lib/php.ini и добавьте:

extension=apcu.so
apc.enabled=1
apc.shm_size=128M
apc.ttl=0
apc.gc_ttl=600
apc.enable_cli=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
;apc.mmap_file_mask=/dev/zero
;apc.shm_segments = 5

Установите memcache:

pecl -C ./pear.conf install memcache

И подключите его в php.ini:

extension=memcache.so

После внесения изменений перезапустите или перезагрузите PHP‑FPM:

/etc/init.d/php-5.6.36-fpm reload

Интеграция в ISPConfig

В ISPConfig (начиная с версии 3.0.5) новую версию PHP задают в System > Additional PHP Versions. На вкладке Name укажите имя версии (например PHP 5.6.36) — оно будет отображаться при выборе версии для сайта в настройках веб‑сайта.

Настройка дополнительной версии PHP в ISPConfig — вкладка «Имя»

Перейдите на вкладку PHP‑FPM Settings и заполните поля, а вкладку FastCGI можно оставить пустой для сборки PHP‑FPM:

Настройки PHP-FPM в ISPConfig

Сборка PHP 5.6.36 для FastCGI

Если вы хотите собрать PHP как CGI (FastCGI) вместо FPM, при конфигурации используйте флаг –enable-cgi и не включайте –enable-fpm. Пример:

./configure --prefix=/opt/phpfcgi-5.6.36 [другие опции] --enable-cgi

Соберите и установите аналогично. Для FastCGI обычно настраивают spawn‑mechanism в Apache (mod_fcgid) и указывают путь к php‑cgi. Учтите, что при такой сборке OPcache и поведение некоторых модулей могут отличаться.

Когда этот подход не подходит

  • Если вам важна оперативная поддержка безопасности и обновлений, предпочтительнее использовать пакетные репозитории дистрибутива или Sury PHP PPA.
  • Если вы не уверены в сборке из исходников — риск человеческой ошибки выше, и требуется больше времени на сопровождение.
  • На системах с нестандартной архитектурой или древним glibc сборка может требовать дополнительной доработки.

Альтернативные подходы

  • Использовать официальные пакеты дистрибутива или сторонние репозитории (например, Ondřej Surý для Debian/Ubuntu).
  • Использовать контейнеризацию (Docker) — каждый сайт в собственном контейнере с нужной версией PHP.
  • Использовать готовые сборки PHP через инструмент phpenv или phpbrew для локальной изоляции версий.

Ментальные модели и архитектура

  • Разделение версий: храните каждую сборку в отдельной префиксной директории (/opt/php-). Это упрощает откат и обновление.
  • Интерфейс между веб‑сервером и PHP: nginx→php‑fpm по unix‑сокету или TCP, Apache→php‑fpm по TCP/unix или через модуль FastCGI.
  • Минимизация привилегий: процессы PHP должны работать от непривилегированного пользователя (www‑data).

Чеклист администратора (роль: системный администратор)

  • Созданы отдельные префиксы для каждой сборки PHP (/opt/php-…)
  • Установлены все необходимые зависимости для ./configure
  • Проверен listen‑порт в php-fpm.conf на конфликт
  • Настроены и проверены pool.d/*.conf для пула приложений
  • Сделан init‑скрипт или systemd‑юнит и добавлен в автозагрузку
  • Подключены требуемые расширения в php.ini (opcache, apcu, memcache)
  • Перезагружен и протестирован php‑fpm
  • Настроена интеграция в ISPConfig и проверен выбор версии для сайта

Набор часто используемых команд (cheat sheet)

  • Сборка и установка:
./configure --prefix=/opt/php-5.6.36 [опции] --enable-fpm
make && make install
  • Копирование php.ini:
cp php-5.6.36/php.ini-production /opt/php-5.6.36/lib/php.ini
  • Запуск/перезагрузка:
/etc/init.d/php-5.6.36-fpm start
/etc/init.d/php-5.6.36-fpm reload
  • Установка PECL‑расширения:
pecl -C ./pear.conf install apcu

Критерии приёмки

  • PHP‑FPM успешно запускается и отвечает на запросы (telnet 127.0.0.1 8999 или curl к локальному прокси).
  • Zend OPcache загружен (phpinfo() показывает opcache).
  • APCu и memcache видны в phpinfo().
  • В ISPConfig новая версия отображается и может быть выбрана для сайта.

Советы по безопасности и сопровождению

  • Запускайте сборку и тесты в изолированной среде до выполнения на продакшене.
  • Ограничьте доступ к /opt/php-*/bin и конфигам правами.
  • Поддерживайте резервные копии конфигураций, особенно php.ini и pool.d/*.conf.

Совместимость и миграция

  • При обновлении версии PHP проверяйте совместимость расширений.
  • Для миграции сайтов сначала настройте новую версию рядом со старой, затем переключайте сайты по одному и тестируйте.

Короткая методология развертывания

  1. Подготовьте окружение и зависимости.
  2. Соберите PHP с нужными опциями в отдельный префикс.
  3. Настройте php.ini и php‑fpm.conf, включая listen и pool.d.
  4. Установите и подключите расширения через pecl/pecl.
  5. Интегрируйте в ISPConfig и протестируйте сайт.

Заключение

Сборка PHP 5.6.36 из исходников даёт гибкость и контроль над опциями и расширениями. Это полезно, когда требуются специфические конфигурации или старые версии, отсутствующие в репозиториях. Однако для простоты поддержки и безопасности рекомендуется рассмотреть пакетные репозитории или контейнеризацию для долгосрочных проектов.

Важно: храните отдельные сборки в отдельных префиксах и документируйте процесс — это упростит откат и обновление.

Сводка:

  • Сборка выполняется в отдельный префикс (/opt/php-5.6.36).
  • Для PHP‑FPM используйте –enable-fpm и настраивайте listen в php-fpm.conf.
  • Подключите opcache и APCu через php.ini и pecl.
  • Интеграция в ISPConfig происходит через System > Additional PHP Versions.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро