Как установить PHP 7 на VPS?
Содержание
- 1 Как установить PHP 7 на VPS?
Прослышал я за то, что PHP 7 уже вовсю используется. Почитал о нем, нашел любопытную инфографику, со сравнительными тестами в различных ситуациях. В среднем, PHP7 показывает в 1,5-2 лучшую производительность. А раз так, то это нужно обязательно пробовать и по возможности переводить свои сайты на него. Ведь лучшее — враг хорошего. Но в случае с новыми технологиями, это следует делать осторожно. Проверять лучше только на одном из сайтов, не следует на всем сервере сломя голову обновлять PHP5 до 7. Перед этим непременно делать бэкапы БД и файлов. Как это можно аккуратно потестировать и ничего не испортить на своем VPS я и хочу рассказать.
Какие преимущества заявлены в PHP7?
Итак, предлагаю взглянуть на ту самую инфографику. В ней много тестов, и все они показывают очень серьезный выигрыш php7 по всем статьям. Тесты проводились известной компанией Zend.
Большинство тестов измерялись в количестве обработанных запросов в секунду. Это конечно синтетика, тем не менее, картина для сравнения вырисовывается вполне объективная. В этом кейсе я рассматриваю абсолютное значения тайминга, поэтому и сравнивать нам проще с последним значением — 0,28 секунды.
Как протестировать скорость генереции страниц?
Прежде всего, имеет смысл на тестовом сайте сделать замеры времени отклика страниц на текущей конфигурации. На моем сервере используется связка Nginx+php-fpm. Никаких апачей. Этот софт позволяет отдавать страницы очень быстро. В случае с апачем, показатели могут быть в 2-5 раз хуже. Но самое главное, что это уменьшает нагрузку на сервер, позволяя выдерживать гораздо больший трафик на самых дешевых тарифах хостеров.
Итак, самый простой способ проверить время отклика — включить отладчик хрома (F12) и посмотреть во вкладку Network для самого первого (основного) запроса в списке. Там наглядно все показано. Нас интересует показатель TTFB — именно он достаточно точно совпадает со временем обработки php при генерации динамических страниц CMS.
Итак, в моем случае, после нескольких проверок выяснилось, что время генерации страниц составляет в среднем 0,33-0,37 секунды. Это довольно быстро, но что удивительно, Google Pagespeed Insights считает, что это время следует еще уменьшить.
Да и оценка технической оптимизации сайта оставляет желать лучшего. Что-ж, попробуем проверить эффект от хвалёного PHP 7.
Установка PHP 7 параллельно со старыми версиями PHP
Поскольку на VPS редко бывает только один сайт, нужно подумать о том, чтобы иметь возможность быстро вернуть изменения, если что-то пойдет не так. Но при обычной установке с помощью пакетных менеджеров в Linux происходит обновление старых версий софта на новые. То есть php5 будет полностью заменен на php7. И если вдруг, несколько сайтов, или даже один, с php7 не заработает, нужно будет откатить обновления обратно. Сделать это гораздо сложнее чем обновить. Поэтому лучше всего предусмотреть все заранее.
В моём случае используется Ubuntu 14.04. На моем ВПС работает с десяток сайтов, но для тестирования php 7 я выбрал только один из них. Поэтому я буду ставить его параллельно, и затем в конфигурации nginx просто поменяю значение директивы fastcgi_pass с одной версии php на другую. Если что-то будет не так — просто поменяю значение на прежнее, и сайт продолжит нормально работать на старой версии PHP.
Как можно установить софт по указанному адресу в файловой системе deb-based дистрибутива?
Очевидно, для того чтобы на сервере работали две версии параллельно — их нужно установить в разные папки на сервере. Обычными средствами пакетного менеджера этого сделать нельзя. Поэтому нужно выдумывать.
Варианта два:
- Скачать исходники или установить apt-get source php7. Затем установить php7 из них, при сборке указав —prefix /opt/php7. Тогда при make install скомпилированный софт установится именно в эту папку.
- Создать 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?
Итак, на скриншоте видно, что время загрузки уменьшилось до 0,2 секунды. И это очень хорошо, другие страницы сайта тоже ускорились на 50-70% от изначального. Проверим оценку Google Pagespeed:
Получилось хорошо. Google перестал показывать пункт об ускорении сервера. По опыту, он перестает его показывать, когда скорость загрузки менее 0,3 секунды.
Как проверить что сайт работает на php7?
В завершение, осталось лишь показать как можно легко проверить версию php на любом сайте. И не только версию, а получить всю информации об используемых модулях и настройках. Создайте в папке сайта файл info.php такого содержания:
<?php
// Показывать всю информацию, по умолчанию INFO_ALLphpinfo();// Показывать информацию только о загруженных модулях.
// phpinfo(8) выдает тот же результат.
phpinfo(INFO_MODULES);?>
Здравствуйте. Что на ваш взгляд сейчас самое оптимальное и выигрышное установить на бюджетный VDS?
Комментарий на отдельной страницеnginx php7-fpm СУБД?
И какой акселератор PHP выбрать.
Под WordPress
Хотя вопрос ни на одну статью наверно, да с холиварами) Но все же буду благодарен если ответите, на основании вашего опыта.
WordPress отлично работает на nginx+fpm, при этом, как вы сами видите из статьи — неважно php7 или php5. Ну одна десятая секунды не играет никакой роли, если конечно там у вас не десятки тысяч подключений в минуту.
СУБД — стандартный mysql. Единственное, можно его поднастроить немного, если планируются нагрузки. Но до 20-50к посещений в сутки это не играет особой роли, mysql будет работать и со стандартной конфигурацией. Ну можете форки — mariaDB или percona поставить, если знаете как использовать их преимущества.
Если включить кэширование ответов бэкенда на nginx — proxy_cache или fastcgi_cache — то все будет летать даже со стандартным apache — страницы будут отдаваться за 0,1-0,2 секунды. Да вот, взгляните сами:
Комментарий на отдельной странице«как вы сами видите из статьи — неважно php7 или php5»
Комментарий на отдельной страницеА на будущее есть смысл php7 ставить? Имею ввиду рано или поздно WordPress оптимизируют ведь под него, для лучших результатов. И все что говорят что WordPress летает на php7 ерунда?
Ну смысл есть, конечно. Ну смотрите сами — если для вас одна десятая секунды имеет значение — это и есть тот самый лучший результат. Я посчитал для себя это незначительным, и переключать на php7 пока не стал. К тому же, у меня используется fastcgi_cache — это серверное кэширование — страницы и так отдаются за 0,1-0,2 секунды.
Комментарий на отдельной странице