Несколько версий PHP в ISPmanager

Зачастую возникает необходимость обеспечить поддержку сразу нескольких разных версий PHP на одном сервере хостинга, управляемом панелью ISPmanager. У нее такой функции нет, разработчики неоднократно объясняли почему: http://forum.ispsystem.com/ru/showpost.php?p=48511&postcount=2 Поэтому попробуем устранить этот недостаток самостоятельно.
Изначально у нас есть сервер под управлением ОС Linux Debian v7.XX amd64 с установленной ISPmanager Lite v4.XX, где из репозитория Dotdeb инсталлирован PHP v5.4.XX. Задача заключается в том, что бы обеспечить также одновременную поддержку версий 5.2.XX и 5.3.XX. Сразу оговорюсь, что излагаемое ниже решение подходит только для использования PHP в Apache как FastCGI.
Установить одновременно несколько версий PHP посредством пакетного менеджера APT в Debian невозможно. Поэтому нам придется компилировать их из исходных кодов. Для упрощения этой задачи создан набор скриптов phpfarm. Он представлен в двух вариантах. Оригинальный от Christian Weiske: https://github.com/cweiske/phpfarm И доработанный от François Poirotte: https://github.com/fpoirotte/phpfarm Я использовал последний, поскольку считаю, что он имеет несколько существенных улучшений.
Начнем с того, что установим в систему все необходимые утилиты, библиотеки и файлы заголовков, необходимые для компиляции PHP:

apt-get install -y build-essential git libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libxml2-dev libssl-dev libbz2-dev libcurl3-dev libdb5.1-dev libjpeg-dev libpng-dev libXpm-dev libfreetype6-dev libt1-dev libgmp3-dev libc-client-dev libldap2-dev libmcrypt-dev libmhash-dev freetds-dev libz-dev libmysqlclient-dev ncurses-dev libpcre3-dev unixODBC-dev postgresql-server-dev-9.1 libsqlite-dev libaspell-dev libreadline6-dev librecode-dev libsnmp-dev libtidy-dev libxslt-dev libt1-dev libcurl4-openssl-dev libgdbm-dev libqdbm-dev libdb++-dev php-pear libmagickwand-dev libmagickcore-dev subversion
apt-get build-dep -y php5

ln -s /usr/include/qdbm/depot.h /usr/include/depot.h
ln -s /usr/lib/libc-client.a /lib/x86_64-linux-gnu/libc-client.a
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

Копируем репозиторий исходных кодов phpfarm:

git clone https://github.com/fpoirotte/phpfarm.git /usr/local/share/phpfarm/

Перед началом компиляции следует обратить особое внимание на то, какие функциональные возможности PHP будут доступны в результате. Для версии 5.2.XX я рекомендую следующий набор опций сборки, которые следует указать в файле "/usr/local/share/phpfarm/src/custom/options-5.2.sh":

configoptions="\
--with-regex=php \
--disable-rpath \
--disable-static \
--with-pic \
--with-layout=GNU \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--with-bz2 \
--enable-ctype \
--without-db4 \
--with-qdbm=/usr \
--without-gdbm \
--with-cdb \
--with-flatfile \
--with-inifile \
--with-iconv \
--enable-exif \
--enable-ftp \
--with-gettext \
--enable-mbstring \
--with-pcre-regex=/usr \
--enable-shmop \
--enable-sockets \
--enable-wddx \
--with-libxml-dir=/usr \
--with-zlib \
--with-kerberos=/usr \
--with-openssl=/usr \
--enable-soap \
--enable-zip \
--with-mhash=yes \
--with-mysql-sock=/var/run/mysqld/mysqld.sock
--with-mysql=/usr \
--with-mysqli=/usr/bin/mysql_config \
--enable-pdo \
--with-pdo-mysql=/usr \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-exif \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib \
--with-zlib-dir=/usr \
--with-mcrypt=/usr \
--with-mhash \
--with-mime-magic \
--with-xsl=/usr \
--enable-zip \
--enable-cgi \
--with-curl \
--with-gd \
--enable-pcntl \
--enable-mbregex \
--enable-gd-native-ttf \
--enable-dba=shared \
--with-imap \
--with-imap-ssl \
--with-readline=/usr \
--enable-simplexml \
--with-libdir=/lib/x86_64-linux-gnu \
--with-config-file-scan-dir="$instdir"/etc \
--with-pspell"

А для 5.3.XX и 5.4.XX – "/usr/local/share/phpfarm/src/custom/options-5.3.sh" и "/usr/local/share/phpfarm/src/custom/options-5.4.sh" соответственно:

configoptions="\
--with-regex=php \
--disable-rpath \
--disable-static \
--with-pic \
--with-layout=GNU \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--with-bz2 \
--enable-ctype \
--with-db4=/usr \
--with-qdbm=/usr \
--without-gdbm \
--with-cdb \
--with-flatfile \
--with-inifile \
--with-iconv \
--enable-exif \
--enable-ftp \
--with-gettext \
--enable-mbstring \
--with-onig=/usr \
--with-pcre-regex=/usr \
--enable-shmop \
--enable-sockets \
--enable-wddx \
--with-libxml-dir=/usr \
--with-zlib \
--with-kerberos=/usr \
--with-openssl=/usr \
--enable-soap \
--enable-zip \
--with-mhash=yes \
--with-mysql-sock=/var/run/mysqld/mysqld.sock
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--enable-pdo \
--with-pdo-mysql=mysqlnd \
--enable-exif \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib \
--with-zlib-dir=/usr \
--with-mcrypt=/usr \
--with-mhash \
--with-xsl=/usr \
--enable-zip \
--enable-cgi \
--with-curl \
--with-gd \
--enable-pcntl \
--enable-mbregex \
--enable-gd-native-ttf \
--with-libdir=lib64 \
--enable-dba=shared \
--with-imap \
--with-imap-ssl \
--enable-intl \
--with-readline=/usr \
--enable-simplexml \
--with-libdir=/lib/x86_64-linux-gnu \
--with-config-file-scan-dir="$instdir"/etc \
--with-pspell"

PHP v5.2.XX уже давно не поддерживается. Поэтому исходные коды последней доступной на текущий момент версии 5.2.17 я рекомендую брать не из официальных источников, а у проекта https://code.google.com/p/php52-backports/ Он нацелен на устранение недоработок PHP v5.2.XX в первую очередь связанных с уязвимостями, впрочем, создается такое впечатление, что php52-backports уже тоже больше не развивается.

svn checkout https://php52-backports.googlecode.com/svn/trunk/ /usr/local/share/phpfarm/src/php-5.2.17

Специфичную для Debian ошибку https://bugs.php.net/bug.php?id=54736 нам придется устранить самостоятельно:

cd /usr/local/share/phpfarm/src/php-5.2.17
wget --content-disposition "https://bugs.php.net/patch-display.php?bug_id=54736&patch=debian_patches_disable_SSLv2_for_openssl_1_0_0.patch&revision=1305414559&download=1"
patch -p1 < debian_patches_disable_SSLv2_for_openssl_1_0_0.patch.patch.txt

Со скачиванием исходных кодов PHP v5.3.XX и 5.4.XX phpfarm справится сам, поэтому приступаем к компиляции и установке:

cd /usr/local/share/phpfarm/src/
./main.sh 5.2.17 5.3.28

По окончании этой процедуры в каталоге "/usr/local/share/phpfarm/inst/php-5.X.XX/" получаем PHP нужной версии со всей необходимой для ее работы инфраструктурой.
Если же вам потребуется пересобрать PHP, например, с измененным набором опций компиляции, то перед повторным запуском не забудьте выполнить следующий набор команд:

cd /usr/local/share/phpfarm/src/php-5.X.XX
make clean

Файл настроек располагается в "/usr/local/share/phpfarm/inst/php-5.X.XX/etc/php.ini". Рекомендую в нем сразу прописать опцию "short_open_tag = On". Также необходимо вручную подключить расширение dba, которое компилируется, как внешний модуль. Для этого достаточно создать файл "/usr/local/share/phpfarm/inst/php-5.X.XX/etc/dba.ini" следующего содержания:

extension=dba.so

Коснемся темы расширений PHP немного подробнее. Естественно, что через ISPmanager можно управлять только теми из них, что прилагаются к стандартно установленной версии PHP из подключенных репозиториев APT. Для тех версий, что устанавливаются посредством phpfarm, подключение расширений следует также производить путем их компиляции из исходных кодов. Рассмотрим, как это можно сделать, на примере ImageMagick из репозитория PEAR:

mkdir /usr/local/share/phpfarm/ext
cd /usr/local/share/phpfarm/ext

pear download pecl/imagick
tar xzvf imagick-3.1.2.tgz
cd imagick-3.1.2
make clean
/usr/local/share/phpfarm/inst/php-5.X.XX/bin/phpize
./configure --with-php-config=/usr/local/share/phpfarm/inst/php-5.X.XX/bin/php-config
make
make install
make clean

Теперь остается только лишь подключить ImageMagick создав файл "/usr/local/share/phpfarm/inst/php-5.X.XX/etc/imagick.ini" следующего содержания:

extension=imagick.so

А вот набор команд для установки акселератора XCache:

cd /usr/local/share/phpfarm/ext
wget http://xcache.lighttpd.net/pub/Releases/3.1.0/xcache-3.1.0.tar.gz
tar xzvf xcache-3.1.0.tar.gz
cd xcache-3.1.0
make clean
/usr/local/share/phpfarm/inst/php-5.X.XX/bin/phpize
./configure --with-php-config=/usr/local/share/phpfarm/inst/php-5.X.XX/bin/php-config --enable-xcache
make
make install
cp xcache.ini /usr/local/share/phpfarm/inst/php-5.X.XX/etc/
make clean

Обратите внимание, что все расширения необходимо отдельно компилировать для каждой установленной версии PHP.
Смена версии PHP у пользователя панели управления ISPmanager выполняется тривиально. Для этого достаточно лишь изменить строку вызова интерпретатора в файле "/var/www/<user>/data/php-bin/php". Вот как выглядит вывод функции PHP phpinfo() при стандартном содержимом: "#!/usr/bin/php-cgi".

PHP v5.4.XXТ.е. это версия PHP, установленная в системе стандартно с помощью менеджера пакетов APT. Заменим строку вызова на "#!/usr/local/share/phpfarm/inst/php-5.3.28/bin/php-cgi":

PHP v5.3.XXИ на "#!/usr/local/share/phpfarm/inst/php-5.2.17/bin/php-cgi":

PHP v5.2.XX

Поделиться ссылкой:

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>