Совсем недавно вышла финальная версия PHP 7.0.0, а это значит, что разработка достигла своего финала и пора обновить инструкцию по установке PHP 7 в Debian. Процесс сборки PHP 7 выполнялся из исходников под OS Debian 8.
Перед началом компиляции, вы можете добавить или удалить модули из сборки PHP 7. В этой статье я использую минимальный набор модулей, который необходим для нормального функционирования WordPress. Дополнительно я опишу процесс добавления модулей, которые не входят в PHP 7 по умолчанию.
Для тех кто не осилит сборку PHP 7 из исходников, описание установки PHP 7 из репозитория Dotdeb можно прочитать по этой ссылке.
Для начала установим все необходимые для сборки и работы PHP 7 зависимости:
apt-get install build-essential autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config libpng-dev libxml2-dev libxml2 libcurl3
Указанные выше зависимости составлены исходя из указанных мной модулей PHP 7. Если вы хотите добавить другие модули, возможно, понадобиться дополнительно установить необходимые для сборки пакеты. Иначе в процессе выполнения команды ./configure
вы получите ошибку.
Установка PHP 7
Все действия будем выполнять в директории:
cd /usr/src
Скачиваем и распаковываем исходники PHP 7.0.4:
wget http://de1.php.net/get/php-7.0.4.tar.bz2/from/this/mirror -O php-7.0.4.tar.bz2 tar -xvjf php-7.0.4.tar.bz2
Если на момент чтения этой статьи, уже вышла более свежая версия PHP 7, скачайте самостоятельно исходники с официального сайта.
Переходим в каталог с исходниками PHP 7:
cd php-7.0.4
Для того чтобы установить PHP 7, нам необходимо выполнить компиляцию из исходников. Перед тем как начать, добавьте или удалите неиспользуемые модули из состава PHP 7 и укажите параметры сборки.
./buildconf --force CONFIGURE_STRING="--prefix=/usr/local/php-fpm --enable-fpm --enable-mysqlnd --enable-mbstring --disable-pdo --disable-phar --with-config-file-scan-dir=/usr/local/php-fpm/etc/conf.d --with-curl --with-gd --with-fpm-user=www-data --with-fpm-group=www-data --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysqli=mysqlnd --with-zlib --without-sqlite3 --without-pdo-sqlite"
Если вы планируете использовать на вашем сервере Apache, к указанным выше параметрам необходимо добавить:
--with-apxs2
Данная конфигурация проверена мной и протестирована на WordPress 4.4.2 с минимальным набором плагинов. Если вы хотите добавить в PHP 7 другие модули, найдите их в списке доступных параметров сборки:
./configure --help
Для компиляции и установки PHP 7, необходимо выполнить команду:
./configure $CONFIGURE_STRING make && make install
Настройка PHP 7
Если в процессе компиляции не было ошибок, файлы PHP 7 должны быть расположены в директории:
/usr/local/php-fpm
Нам осталось внести изменения в конфигурационный файлы и добавить PHP 7 в автозагрузку. Для начала скопируем файл php.ini
из каталога с исходниками в каталог установки PHP 7:
cp /usr/src/php-7.0.4/php.ini-production /usr/local/php-fpm/lib/php.ini
Чтобы включить модуль Zend OPcache, создайте файл:
mkdir -p /usr/local/php-fpm/etc/conf.d/ nano /usr/local/php-fpm/etc/conf.d/modules.ini
Скопируйте в него следующие параметры:
# Zend OPcache zend_extension=opcache.so
Для настройки работы PHP-FPM создайте файл:
nano /usr/local/php-fpm/etc/php-fpm.conf
И добавьте в него следующие параметры:
[global] pid = /var/run/php-fpm.pid error_log = /var/log/php-fpm.log include=/usr/local/php-fpm/etc/php-fpm.d/*.conf
Затем создайте файл:
nano /usr/local/php-fpm/etc/php-fpm.d/www.conf
И добавьте в него параметры:
[www] user = www-data group = www-data listen = /var/run/php7-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0777 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
Добавим PHP 7 в автозагрузку, создадим символическую ссылку на файл php-fpm
:
ln -s /usr/local/php-fpm/sbin/php-fpm /usr/local/php-fpm/sbin/php7-fpm
Я предпочитаю запускать все процессы через systemd
. Создадим новый юнит:
nano /etc/systemd/system/php-fpm/php-fpm.service
Добавим в содержимое файла:
[Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=simple PIDFile=/usr/local/php-fpm/var/run/php-fpm.pid ExecStart=/usr/local/php-fpm/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php-fpm/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
Включаем, запускаем и смотрим статус юнита:
systemctl enable php-fpm systemctl start php-fpm systemctl -l status php-fpm
Если есть ошибки — читаем вывод в статусе, исправляем. После исправлений в юните нужно перегружать демон systemd
.
Альтернативный метод запуска php_fpm
. Менее надежен, если процесс упадет, то восстановить его работу необходимо будет вручную. Пропускаем этот этап, если ранее настроили запуск PHP через systemd
. Создадим в каталоге init.d
скрипт для запуска PHP-FPM:
nano /etc/init.d/php-fpm
Добавьте в содержимое файла:
Дадим права на запуск, добавим скрипт в автозагрузку:
chmod +x /etc/init.d/php-fpm update-rc.d php-fpm defaults
Затем необходимо выполнить команду:
service php-fpm restart
Для работы PHP-FPM в Nginx, добавьте в секцию server
виртуального хоста:
location ~ .php$ { try_files $uri = 404; fastcgi_pass unix:/var/run/php-fpm7.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Проблемы в процессе установки PHP 7
Список ошибок, который может возникнуть по причине отсутствия установленных зависимостей.
./buildconf: 46: ./buildconf: make: not found # Выполните установку: apt-get install build-essential
buildconf: autoconf not found. You need autoconf version 2.59 or newer installed to build PHP from Git. build/build.mk:37: recipe for target 'buildmk.stamp' failed # Выполните установку: apt-get install autoconf
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. # Выполните установку: apt-get install re2c
configure: error: bison is required to build PHP/Zend when building a GIT checkout! # Выполните установку: apt-get install bison
configure: error: Cannot find OpenSSL's # Выполните установку: apt-get install libssl-dev libcurl4-openssl-dev pkg-config
configure: error: png.h not found. # Выполните установку: libpng-dev
configure: error: xml2-config not found. Please check your libxml2 installation. # Выполните установку: apt-get install libxml2 libxml2-dev