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

Как использовать несколько версий PHP (PHP-FPM и FastCGI) с ISPConfig 3 (Debian Wheezy)

• 6 min read • Серверы • Обновлено 27 Nov 2025
Несколько версий PHP с ISPConfig 3 на Debian
Несколько версий PHP с ISPConfig 3 на Debian

Кратко: руководство по сборке и подключению нескольких версий PHP (на примере PHP 5.3.22 и 5.4.12) как PHP-FPM и FastCGI на Debian Wheezy и последующей регистрации версии в ISPConfig 3.0.5. Описаны сборка из исходников, установка расширений (APC, memcache, memcached, ionCube), создание init-скрипта и добавление версии в ISPConfig.

Важно: приведённые команды требуют root/администраторских прав. Проверяйте порты и пути, чтобы не перезаписывать системный PHP.

Введение

С версии ISPConfig 3.0.5 появилась возможность использовать несколько версий PHP на одном сервере и выбирать оптимальную версию PHP для каждого сайта. Функция работает с PHP-FPM (начиная с PHP 5.3) и FastCGI (всеми версиями PHP 5.x). В этом руководстве показано, как собрать PHP 5.3 и PHP 5.4 в вариантах PHP-FPM и FastCGI на сервере Debian Wheezy. Эти версии PHP можно использовать одновременно с системным PHP, установленным через apt.

Отказ от гарантии: я не даю гарантии, что этот процесс сработает на вашей системе — всегда делайте резервные копии и тестируйте на стенде.

Что будет в руководстве

  • Сборка PHP 5.3.22 с поддержкой PHP-FPM
  • Настройка init-скрипта, запуск и перезагрузка PHP-FPM
  • Установка модулей APC, memcache, memcached и ionCube Loader
  • Добавление новой версии в ISPConfig 3.0.5
  • Альтернативы, возможные проблемы и контрольный список администратора

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

В примерах я собираю PHP 5.3.22 и PHP 5.4.12 — актуальные версии в момент написания оригинала. Я также покажу, как собрать дополнительные расширения: APC, memcache, memcached и ionCube.

Обратите внимание: PHP-FPM можно использовать и с Apache, и с nginx, в то время как FastCGI доступен только для Apache.

PHP-FPM и FastCGI взаимно исключают друг друга в конфигурациях сборки для PHP 5.3/5.4, поэтому в руководстве показаны две стратегии: сборка с –enable-fpm и сборка с –enable-cgi. При необходимости можно скомпилировать PHP дважды, указав разные каталоги установки (например, /opt/php-5.3.22 для PHP-FPM и /opt/phpfcgi-5.3.22 для FastCGI).

2 Сборка PHP 5.3.22 (PHP-FPM)

Скачайте и распакуйте PHP 5.3.22:

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

Установите зависимости для сборки 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

Создайте символьную ссылку, необходимую при сборке с –with-imap:

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

(Последняя команда нужна, если вы собираете PHP с –with-imap, иначе ./configure остановится с ошибкой поиска libc-client.a.)

Сконфигурируйте и соберите PHP 5.3.22. Вы можете вручную корректировать параметры ./configure под ваши требования; при изменении параметров могут потребоваться дополнительные библиотеки.

./configure --prefix=/opt/php-5.3.22 \
--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-fpm

make
make install

Последний ключ –enable-fpm обеспечивает совместимость этой сборки с PHP-FPM.

Скопируйте php.ini и конфигурацию php-fpm в правильные места:

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

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

vi /opt/php-5.3.22/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.3.22/etc/pool.d/*.conf |

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

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

Создайте init-скрипт для управления службой PHP-FPM:

vi /etc/init.d/php-5.3.22-fpm

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

Сделайте init-скрипт исполняемым и создайте ссылки автозагрузки:

chmod 755 /etc/init.d/php-5.3.22-fpm
insserv php-5.3.22-fpm

Запустите PHP-FPM:

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

Если в /opt/php-5.3.22/etc/pool.d ещё нет пулов, вы увидите предупреждение, которое можно игнорировать:

root@server1:/usr/local/src/php5-build/php-5.3.22# /etc/init.d/php-5.3.22-fpm start
Starting php-fpm [04-Mar-2013 14:58:41] WARNING: Nothing matches the include pattern '/opt/php-5.3.22/etc/pool.d/*.conf' from /opt/php-5.3.22/etc/php-fpm.conf at line 512.
done
root@server1:/usr/local/src/php5-build/php-5.3.22#

Теперь вы можете установить дополнительные модули, такие как APC, memcache, memcached и ionCube.

3 Установка расширений: APC, memcache, memcached, ionCube

APC, memcache и memcached можно установить через PEAR/PECL. Для начала установите и инициализируйте PEAR:

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

Установка APC:

pecl -C ./pear.conf install apc

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

vi /opt/php-5.3.22/lib/php.ini

| [...] extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.user_ttl=600 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 |

Установка memcached (требует libmemcached-dev):

apt-get install libmemcached-dev
pecl -C ./pear.conf install memcached

Добавьте в php.ini:

| [...] extension=memcached.so |

Установка ionCube Loader:

cd /tmp

Скачайте и распакуйте пакет ionCube для вашей архитектуры (x86_64 или x86).

Для x86_64:

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xfvz ioncube_loaders_lin_x86-64.tar.gz

Для x86:

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
tar xfvz ioncube_loaders_lin_x86.tar.gz

Скопируйте загрузчик и правьте php.ini:

cp ioncube/ioncube_loader_lin_5.3.so /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so
vi /opt/php-5.3.22/lib/php.ini

Добавьте строку zend_extension в начало файла (до строки [PHP]):

| zend_extension = /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so [PHP] [...] |

Перезагрузите PHP-FPM:

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

4 Добавление версии PHP в ISPConfig 3.0.5

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

Форма добавления имени версии PHP в ISPConfig

Перейдите на вкладку PHP-FPM Settings (вкладку FastCGI Settings можно оставить пустой) и заполните поля следующим образом:

Настройки PHP-FPM для новой версии в ISPConfig

Примечание: изображения выше показывают пример полей, которые нужно заполнить. Важно указать корректный путь до php-fpm и адрес/порт для соединения (например, 127.0.0.1:8999).

Практические советы и наиболее частые ошибки

Важно:

  • Всегда проверяйте, что порт, который вы указываете в listen, свободен и не конфликтует с системными службами.
  • Перед копированием в production тестируйте сборку и конфигурацию на тестовом сервере.
  • Следите за правами доступа к каталогам /opt и к исполняемым файлам — служба должна запускаться от пользователя www-data (или другого, указанного вами).

Распространённые причины неудачной сборки или запуска:

  • Отсутствие dev-пакетов нужных библиотек (openssl-dev, libxml2-dev и т.д.).
  • Неправильные пути в ./configure (особенно для 64-битных систем — libdir).
  • Конфликт портов или отсутствие прав на запись в var/run.

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

  1. Использовать пакеты из репозиториев (если доступны) или сторонние репозитории (например, dotdeb) — это уменьшит трудоёмкость поддержки, но даст меньше гибкости.

  2. Контейнеризация: запуск разных версий PHP в Docker-контейнерах и связывание их с веб-сервером (nginx) — хорошая изоляция и простота отката, но требует навыков работы с контейнерами.

  3. Использовать system-wide менеджеры версий (phpbrew) — удобны для сборки и тестирования, но потребуют адаптации для интеграции с ISPConfig.

Когда не стоит собирать PHP из исходников:

  • Если у вас ограниченный опыт администрирования и нет тестовой среды.
  • Если вам нужен простой автоподдерживаемый стек с минимальными усилиями по обновлению.

Мини-методология (шаги для повторяемой сборки)

  1. Подготовить чистую тестовую среду (VM или контейнер).
  2. Установить все build-deps через apt-get build-dep php5 и дополнительные dev-пакеты.
  3. Скачать исходники, распаковать, настроить ./configure.
  4. make; make install в префикс /opt/php-<версия>.
  5. Настроить php.ini и php-fpm.conf (указать уникальный listen и создать пул).
  6. Создать init-скрипт, добавить в автозагрузку.
  7. Установить и проверить расширения через pecl/копирование ionCube.
  8. Зарегистрировать версию в ISPConfig и протестировать на реальном сайте.

Контрольный список администратора

  • Есть резервная копия сервера/VM.
  • Подготовлена тестовая среда.
  • Проверены свободные порты (например, 8999).
  • Все необходимые dev-пакеты установлены.
  • PHP собран в /opt/php-<версия> без ошибок.
  • php.ini и php-fpm.conf настроены.
  • init-скрипт работает: start/stop/reload.
  • Установлены необходимые расширения (APC/memcache/ionCube) и активированы в php.ini.
  • Версия добавлена в ISPConfig и сайт успешно использует выбранную версию PHP.

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

  • Процесс сборки завершился без ошибок.
  • PHP-FPM запускается и слушает указанный порт или сокет.
  • phpinfo() отображает корректную версию PHP и загруженные расширения.
  • Сайты в ISPConfig могут переключаться на новую версию PHP и корректно обслуживаются.

Краткий глоссарий

  • PHP-FPM: FastCGI Process Manager для PHP — 관리ваюший пул процессов PHP.
  • FastCGI: механизм запуска PHP как отдельного процесса, интегрируется с Apache через mod_fcgid или mod_fastcgi.
  • PECL/PEAR: менеджеры пакетов для расширений PHP.
  • ionCube: проприетарный загрузчик, необходимый для защищённого PHP-кода.

Когда это не сработает (примеры)

  • На сильно модифицированных дистрибутивах с другой структурой библиотечных директорий (потребуются дополнительные правки).
  • Если целевой сервер использует SELinux с жёсткой политикой, потребуется корректировка правил.
  • При смешении 32/64-битных библиотек могут возникнуть ошибки загрузки модулей.

Резюме

Это руководство показывает подробную процедуру сборки PHP 5.3.22 с поддержкой PHP-FPM, настройки служб и интеграции с ISPConfig 3.0.5, а также установку часто используемых расширений. Для production-систем рекомендуется тестирование в отдельной среде и документирование каждого шага.

Сводка действий:

  • Собрать PHP в отдельный префикс (/opt/php-<версия>).
  • Настроить php-fpm.conf и пул.
  • Создать init-скрипт и добавить автозагрузку.
  • Установить расширения через PECL и ionCube вручную.
  • Добавить версию в ISPConfig и протестировать переключение версий.

Дополнительные ресурсы и практические советы помогут избежать типичных ошибок при сборке и развертывании.

Поделиться: 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 быстро