Как установить PHP 7 на VPS?



Прослышал я за то, что PHP 7  уже вовсю используется. Почитал о нем, нашел любопытную инфографику, со сравнительными тестами в различных ситуациях.   В среднем, PHP7 показывает в 1,5-2 лучшую производительность.   А раз так, то это нужно обязательно пробовать и по возможности переводить свои сайты на него.  Ведь лучшее  — враг хорошего.  Но в случае с новыми технологиями, это следует делать осторожно. Проверять лучше только на одном из сайтов, не следует на всем сервере сломя голову обновлять PHP5 до 7.  Перед этим  непременно делать бэкапы БД и файлов.  Как это можно аккуратно потестировать и ничего не испортить на своем VPS  я и хочу рассказать.

Какие преимущества заявлены в PHP7?

Итак, предлагаю взглянуть на ту самую инфографику.   В ней много тестов, и все они показывают очень серьезный выигрыш php7 по всем статьям.   Тесты проводились известной компанией Zend.

Сравнение производительности PHP 7

Большинство тестов измерялись в количестве обработанных запросов в секунду.  Это конечно синтетика, тем не менее, картина для сравнения вырисовывается вполне объективная.  В этом кейсе я рассматриваю абсолютное значения тайминга, поэтому и сравнивать нам проще с последним значением —  0,28 секунды.




 

Как протестировать скорость генереции страниц?

Прежде всего, имеет смысл на тестовом сайте сделать замеры времени отклика страниц на текущей конфигурации. На моем сервере используется связка Nginx+php-fpm.  Никаких апачей.  Этот софт позволяет отдавать страницы очень быстро.  В случае с апачем, показатели могут быть в 2-5 раз хуже.   Но самое главное, что это уменьшает нагрузку на сервер, позволяя выдерживать гораздо больший трафик на самых дешевых тарифах хостеров.

Итак, самый простой способ проверить время отклика — включить отладчик хрома (F12)  и посмотреть во вкладку Network для самого первого (основного)  запроса в списке.  Там наглядно все показано.  Нас интересует показатель TTFB — именно он достаточно точно совпадает со временем обработки php при генерации динамических  страниц CMS.

Что такое TTFB?
Time To First Byte — время до передачи первого байта. Дословно это будет именно так. Как вы можете заметить по графику, весь процесс отдачи страницы состоит из нескольких этапов — установка соединения, TTFB и непосредственно отдача. Очевидно, что до того как появятся данные для отдачи, происходит генерация оных. А именно это и есть работа интерпретатора PHP, в нашем случае. Как только начинается отдача данных — это означает что этап исполнения php-кода завершен.
before-php7-test

Замеряем скорость отклика на php5

 

Итак, в моем случае, после нескольких проверок выяснилось, что время генерации страниц составляет в среднем 0,33-0,37  секунды.  Это довольно быстро, но что удивительно, Google Pagespeed Insights считает, что это время следует еще уменьшить.








before-php7

 

Да и оценка технической оптимизации сайта оставляет желать лучшего.   Что-ж, попробуем проверить эффект от хвалёного PHP 7.

Установка PHP 7 параллельно  со старыми версиями PHP

Поскольку на VPS редко бывает только один сайт,  нужно подумать о том, чтобы иметь возможность быстро вернуть изменения, если что-то пойдет не так.  Но при обычной установке  с помощью пакетных менеджеров  в Linux   происходит обновление старых версий софта на новые. То есть php5 будет полностью заменен на php7. И если вдруг, несколько сайтов, или даже один, с php7 не заработает, нужно будет откатить обновления обратно. Сделать это гораздо сложнее чем обновить.  Поэтому лучше всего предусмотреть все заранее.

В моём случае используется Ubuntu 14.04.  На моем ВПС работает с десяток сайтов, но для тестирования php 7 я выбрал только один из них.  Поэтому  я буду ставить его параллельно,  и затем в конфигурации nginx просто поменяю  значение директивы fastcgi_pass с одной версии php на другую. Если что-то будет не так — просто поменяю значение на прежнее, и сайт продолжит нормально работать на старой версии PHP.

Как можно установить софт по указанному адресу в файловой системе deb-based дистрибутива?

Очевидно, для того чтобы на сервере работали две версии параллельно  — их нужно установить в разные папки на сервере.  Обычными средствами пакетного менеджера этого сделать нельзя. Поэтому  нужно выдумывать.

Варианта два:

  1.  Скачать исходники или установить apt-get source php7.  Затем установить php7 из них, при сборке указав —prefix /opt/php7.  Тогда при make install скомпилированный софт установится именно в эту папку.
  2. Создать chroot-окружение.  Установить и запускать нужный софт в нем. Мне по душе именно этот вариант, он как раз и предназначен для подобного тестирования.
Что такое chroot-окружение?
Это что называется песочница.  Мы копируем системные файлы в какую-то папку и затем объявляем основной системе, что хотим использовать это окружение.  В любом Linux доступен это механизм — он так и называется change root — смена корня.  Когда мы переключаемся в это окружение, для нас перестает существовать остальная система, доступ ограничен только одной папкой.   В этом окружении можно запускать некоторый софт  и он не повлияет на работу основной системы.  Хотя с другой стороны все ресурсы и софт, запущенный в chroot-окружении будет доступен для основной системы.  Если вы знаете что такое виртуальные машины — то это нечто подобное, но с меньшим уровнем изоляции. Это нечто переходное —  еще не виртуальная машина, но уже и не основная система.  Хотя это окружение использует полностью все устройства, ресурсы и ядро основной системы. Но вот структура папок и файлов  внутри окружения получается своя, изолированная от основной системы.  Конечно это все можно ограничивать.  

Подготовка chroot и установка php 7 в Ubuntu 14.04

Нам потребуется вот такая утилита

apt-get install debootstrap

Это сборщик базовой deb-системы.  Он собирает основные компоненты, необходимые для работы ОС и окружения,  в указанное место.

mkdir /opt/php7

debootstrap trusty /opt/php7

После этого уже можно «проваливаться» в песочницу.  Но сделаем еще кое что, дабы иметь больше возможностей в  chroot.  Нужно пробросить внутрь виртуальные файловые системы /dev и /proc чтобы, иметь доступ к некоторым системным функциям.

Делаем это вот так:

mount -o bind /proc/ /opt/php7/proc/

mount -o bind /dev/ /opt/php7/dev/

Опция bind позволяет монтировать папки друг в друга, а не блочные устройства.

входим в окружение:

chroot /opt/php7

Вот здесь добавляем репозитории:

Допишем строки в /etc/apt/sources.list

deb http://ppa.launchpad.net/ondrej/php/ubuntu trusty main
deb-src http://ppa.launchpad.net/ondrej/php/ubuntu trusty main

Это репозиторий известного чешского разработчика  Ondrej Sury, который следит за актуальностью версий php и собирает пакеты с новыми версиями.  Тут всё надежно, проверено на десятках серверов, это можно использовать.

apt-get update

apt-get install php7.0 php7-fpm php7.0-gd php-imagick

Ну вот, теперь у нас php установлен  и доступен в  /usr/bin/php7.0, относительно своего окружения.  Но надо понимать, что для основной системы, он установлен в /opt/php7/usr/bin/php7.0

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

location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass unix:/opt/php7/tmp/php7-fpm.sock;

 

Ну всё. Пробуем открыть сайт.  И получаем ошибку подключения к базе данных. После непродолжительного поиска, выяснилось, что в php7 перестал использоваться модуль и функции php-mysql. Вместо него нужно использовать php-mysqli.   Но я не стал заморачиваться, и пошел самым простым путём.  Переключил сайт обратно на php5, зашел в админку   и обновил его до последних версий.  После переключил обратно на php7 и все стало нормально. Ошибки подключения к БД  исчезли.

Как быстро работает wordpress на php7?

 

after-php7-pagespeed

Скорость генерации страниц на PHP7

Итак, на скриншоте видно, что время загрузки уменьшилось до 0,2 секунды. И это очень хорошо, другие страницы сайта тоже ускорились на 50-70% от изначального.   Проверим оценку Google Pagespeed:

Оценка Google после перехода на Php 7

Оценка Google после перехода на Php 7

 

Получилось хорошо.  Google перестал показывать пункт об ускорении сервера. По опыту, он перестает его показывать, когда скорость загрузки менее 0,3 секунды.

Как проверить что сайт работает на php7?

В завершение, осталось лишь показать как можно легко проверить версию php на любом сайте. И не только версию, а получить всю информации об используемых модулях и настройках. Создайте  в папке сайта файл info.php такого содержания:

<?php// Показывать всю информацию, по умолчанию INFO_ALL
phpinfo();// Показывать информацию только о загруженных модулях.
// phpinfo(8) выдает тот же результат.
phpinfo(INFO_MODULES);?>
Затем, откройте эту страницу в браузере, и увидите всю информацию о php:
info-php7
На этом всё, друзья.
Хочу напомнить, что если вас тоже интересует эта тема, вы всегда можете получить ответы и консультации в комментариях или через соответствующую форму отправки вопросов.   А также можно получить  услуги системного администратора Linux, который поможет установить и настроить php 7 и переключить на него ваши сайты.

 

 

Комментариев

  1. Pacman :

    Ответить

    • drmotor :

  2. Влас :

    Ответить

    • drmotor :

Сохраните для друзей или чтобы прочесть в другой раз:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>