Centos 7 настройка php 7

Обновлено: 04.07.2024

Существует php 5.6, 7.4 или 8. Для каждой версии php существует режим работы, который гораздо важнее для производительности, чем просто версия php.

Что такое CGI и чем он отличается от обычного apache по умолчанию?

Apache с mod_php исполняет php-код сам, используя при этом кучу ресурсов сервера и делая это внутри своих процессов.

Когда используется режим CGI — это значит apache не обрабатывает php сам, а запускает php-cgi для каждого php-скрипта и забирает у него результат обработки. То есть это даже несколько усложняет схему: пользователь шлёт запрос к nginx > тот обращается к apache > apache запускает скрипты через CGI и получает результат их выполнения > собирает из них html и отдаёт его nginx > тот собирает статические страницы, нужную для этой html страницы в кучу > отдает пользователю.

php-fpm — это Fastcgi Process Manager. Он представляет из себя отдельную службу, которая работает независимо от какого-либо web-сервера. Он может сам принимать запросы от web-сервера через unix-сокет или через сетевое соединение. Другими словами, вы можете держать сайты на одном сервере, а php-скрипты исполнять на другом.

Получается, что для nginx помощь apache становится уже не нужна, потому как nginx может работать с php-fpm сам, напрямую. Apache тоже может работать в таком же режиме с php-fpm, но это не имеет смысла. Php-fpm не может отдавать статические файлы или html, он может только исполнять php.

Получается такая схема: запрос пользователя > nginx > php-fpm > nginx, он собирает из ответа php и статики страницу > отдаёт пользователю. FPM в разы производительнее apache, в каком бы режиме тот ни был запущен.

2. Настройка репозиториев.

Установим YUM утилиты:

Для установки репозитория REMI в CentOS 7 требуется установить EPEL репозиторий и выполнить команду:

Нет смысла держать репозитории, которые устарели.

В базовой установке CentOS 7 установлен remi-safe репозиторий. Там содержатся копии только старых-добрых программ, которые не обновляются очень долго в угоду стабильности работы некоторых систем. Так как мы будем ставить новую версию репозитория REMI, то старую версию REMI-SAFE можно смело деактивировать.

Для активации remi надо вначале отключить remi-safe и ius репозиторий (если он у вас включен), а потом активировать remi выполнив команды:

Возможны конфликты с репозиторием IUS! Отключим IUS, если он активирован ранее:

Активируем remi:

Посмотрим какие репозитории появились в доступности у CentOS 7:


Посмотрим доступные репозитории remi:


Как видите, есть несколько версий php, сейчас мы можем активировать php 7.4, для этого откройте соответствующий файл, найдите секцию [remi-php74] , в ней найдите enabled и поменяйте значение с 0 на 1:

Получится вот так, если активировать вручную:


Или вот так, если активируем репозиторий remi-php74 автоматизированно, для этого выполняем команду:

3. Установка php 7.4 и php-fpm.sock.

Теперь устанавливаем php версии 7.4.

Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации web-сервера.

Запускаем php-fpm и добавляем в автозагрузку.

Проверим активность службы:

Ответ:


Проверяем, запустился ли он.

Перед этим установим сетевые утилиты для CentOS 7:

Вот что он вам покажет до того, как мы переделаем всё под свои нужды.


Все в порядке, повис на порту 9000.

4. Настройка php-fpm.sock.

Теперь переделаем всё под наши нужды. Запустим его через unix сокет.

Создадим резервную копию конфигурационного файла:

Ищем и комментируем строку:

Вместо нее, сразу под ней, добавляем несколько других:

Заодно измените пользователя, от которого будет работать php-fpm.

Вместо apache укажите nginx.

Перезапускаем php-fpm, чтобы применить настройки.

Проверяем, стартовал ли указанный сокет.


Нужно дать права движку web-сервера на операции с файлами и сессиями в специальной папке /var/lib/php/session .

Создаем папку session :

Более безопасно было бы для каждого сайта делать отдельную директорию для сессий и определять ее в настройках php, но это уже частный случай. В общем случае, можно оставить так.

Не так давно появилась новая версия одного из самых популярных скриптовых языков программирования на просторах веб - PHP 7. Очень долго разработчики развивали пятую версию и было выпущено несколько минорных релизов, но, в конце концов, было решено пропустить шестой номер версии, и сразу выпустить PHP 7.0. Эта версия приносит множество полезных нововведений, о которых мы поговорим ниже.

Учитывая что CentOS - это очень стабильный дистрибутив, то его пользователи получат только в следующей версии. В этой статье мы рассмотрим как выполняется установка PHP 7 CentOS 7.

Что нового в PHP 7

Новая версия PHP получила множество нововведений, но что самое главное для новых пользователей - очень сильную оптимизацию. Разработчики переработали кодовую базу и добавили новые алгоритмы, что дало прирост производительности в два раза, также уменьшено потребление памяти вполовину. Кроме того, были добавлены некоторые новые возможности:

  • Импорт пространств имен группами;
  • Добавлена возможность присвоить значение по умолчанию если переменная пустая;
  • В классах можно указывать ожидаемые типы данных для методов;
  • Добавлены анонимные классы;
  • Добавлена возможность создавать Escape последовательности для unicode;
  • Улучшены генераторы;

Но что более важно для нас, это те функции и возможности, которые были удалены. Это необходимо знать перед переходом на новую версию чтобы избежать возможных проблем с совместимостью ваших проектов. Из языка полностью удалены такие расширения:

  • interbase;
  • mssql;
  • oci8;
  • pdo_dblib;
  • pdo_oci;
  • sybase_ct;

Расширение ereg считается устаревшим, а imap и mcrypt пока поддерживаются, но, видимо, ненадолго. Также были убраны устаревшие теги: <%, <%=, <script language="php"> больше они не работают. Классы и интерфейсы больше нельзя именовать именами типов данных. Также изменен синтаксис работы с возвращаемыми методами данными. В основном это все, если ваш проект не содержит всех этих проблем, то вы можете спокойно переходить на PHP 7. Такие популярные CMS, как WordPress, Zend, Yii, Symfony и множество других уже давно поддерживают PHP 7. А теперь рассмотрим как установить PHP 7 CentOS 7.

Установка PHP CentOS 7

Мы будем использовать репозиторий Remi для установки PHP. Но перед тем как мы сможем его подключить, нам понадобиться дополнительно репозиторий EPEL:

Дальше устанавливаем сам репозиторий Remi:

После установки смотрим доступные репозитории Remi:

Как видите, есть несколько версий php, сейчас мы можем активировать php 7.1, для этого откройте соответствующий файл, найдите секцию [remi-php71], в ней найдите enabled и поменяйте значение с 0 на 1:

Теперь самое интересное - установка php 7.1 centos 7. Если у вас уже установлена старая версия php, то вам не нужно ничего удалять, вы можете просто обновить систему и получите то, что нужно:

sudo yum update

Если же никакая версия php не установлена, просто установите нужные пакеты:

sudo yum install php php-fpm php-gd php-mysql

После завершения работы команды вы получите готовую и работающую версию php, и вы можете использовать ее для своего веб-сервера Apache или Nginx. Если вы используете Apache, то даже ничего перенастраивать не придется. Если вы используете подключение по сетевому сокету в Nginx, то вам нужно будет только перезапустить php-fpm:

sudo systemctl restart php-fpm

В случае с файловым сокетом, еще нужно будет прописать правильный путь к новому сокету. И даже когда в репозиториях CentOS 7.4 появиться эта версия PHP, все равно будет выгоднее использовать этот репозиторий, потому что тут уже будет более новая версия.

Выводы

В этой небольшой статье мы рассмотрели как выполняется установка PHP 7 CentOS 7. Как видите, это совсем несложно и вы можете установить все это на свой сервер чтобы получить максимальную производительность. Если у вас остались вопросы, спрашивайте в комментариях!

Некоторое время назад вышла новая, практически революционная версия php 7. Революционная, потому что обещает существенный прирост производительности, в отличие от предыдущих обновлений. По предварительным данным из описаний и обещаний, якобы в некоторых случаях может быть прирост скорости обработки php в разы. А если не повезет, то на 30-70%. Решил я это проверить на свою голову.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти . Данная статья устарела. Более подробную и актуальную информацию по обновлению php 7 читайте в новом материале на тему настройки web сервера nginx и php-fpm.

Введение

Я никогда не придавал большого значения версии php, так как не работал с высоконагруженными проектами. Для моих задач мне хватало любой версии, которую поддерживали необходимые мне скрипты. В основном это популярные движки сайтов, админка заббикса и другие прикладные инструменты системного администратора.

Сразу предупреждаю, что не нужно слепо повторять то, что делал я. Просто примите к сведению информацию, которой я делюсь. Я не являюсь специалистом по тонкой настройке web серверов.

Я решил поэкспериментировать и проверить, насколько быстрее будет работать мой блог, если я перейду на php 7. Этот сайт работает на wordpress, до обновления он работал на php54 с включенной системой кэширования apc. Достаточно старая версия, но именно она ставится из стандартных репозиториев centos, которые я использую. Уже не помню точно, откуда он ставится, то ли из базового, то ли из epel. Как оказалось, не зря ставится эта версия. Серия моих экспериментов и проверок подтвердила, что именно на этой версии достигается максимальная производительность в моем конкретном случае.

Я попробовал обе утилиты и остановился на siege. Она позволяет проводить измерения наиболее приближенные к реальному поведению пользователей на сайте. Не буду в этой статье подробно останавливаться на описании работы утилиты, в интернете информация есть, легко ищется. Если вам нужно, то сами все найдете и протестируете.

Я настроил siege и прогнал серию тестов, создающую разную нагрузку и зафиксировал результаты. После этого стал готовиться к обновлениям. Сразу скажу, что итоговый результат меня не удовлетворил и я вернулся на начальную свою конфигурацию. Обо всем по порядку расскажу.

Обновление php 5.4 до php 7

Сразу расскажу о проблемах, с которыми вы столкнетесь после обновления php70.

  1. У вас не будет работать phpmyadmin без танцев с бубном. После обновления панель управления сразу перестала работать. Я немного погуглил тему, заставить работать можно, но нужно поковыряться. Мне не захотелось этого делать, подробно не разбирался в теме.
  2. У меня перестал работать некоторый функционал плагинов в админке wordpress. При этом сам вордпресс работает нормально, его похоже оптимизировали для работы с php70. Получилось, что сайт в целом работает, но некоторые плагины не работают, либо ими нельзя управлять. WP Super Cache вообще не заработал, пока его не отключил, не мог загрузить главную страницу сайта, вместо нее белое полотно. Панель управления моей темой не открывала некоторые страницы с настройками.

Это то, что я заметил сам. Возможно не работает что-то еще. Все это я узнал постфактум, так что обновиться до php70 и прогнать тесты производительности успел.

Теперь информация об обновлении. Существуют как минимум 2 репозитория, которые можно подключить к CentOS 7 и установить обновление php70. Это либо ius с пакетом php70u, либо webtactic с php70w. Чем они отличаются я не знаю, не стал вникать. Я решил воспользоваться репозиторием ius. Подключаем его:

Скрипт подключит нужное репо в соответствии с вашей системой. Теперь можно удалять старую версию php и устанавливать php70.

Дальнейшие действия будут зависеть от того, что вы используете на вашем веб сервере. У меня установлен nginx + php-fpm примерно по приведенной статье. Мне необходимо удалить пакеты:

Удаление этих пакетов тянет за собой удаление всех зависимостей. Запишите их куда-нибудь, чтобы потом установить новые версии этих пакетов. В качестве пакета к удалению будет в том числе и phpmyadmin. Впоследствии его можно будет установить только вручную из исходников. Если вы используете apache, то необходимо удалить mod_php, а затем заново установить mod_php70u.

Устанавливаем php70 вместе с необходимыми пакетами. У меня получился такой список. В нем оказалось не все, что было удалено, пары пакетов я не нашел в новом репо.

Я точно не помню, но скорее всего этот список соответствует требованиям wordpress и phpmyadmin. Больше у меня на сервере ничего не было, поэтому лишних пакетов быть не должно. После установки нужно чуть-чуть отредактировать конфигурацию php-fpm.

Если в качестве подключения к php-fpm использовали не unix socket, то придется перейти на него. Для этого закомментируйте строку:

и добавьте новую:

Сохраняем конфиг и перезапускаем php-fpm:

Если вы использовали unix socket, то в конфиге nginx ничего менять не надо, если же TCP socket, то нужно заменить строку:

После этого перезапустите nginx:

Обновление php до версии 7.0 окончено. Можно проверять вывод phpinfo();

Подключение модулей кэширования и тестирование производительности web сервера

PHP обновили, сайт запустился, дальше можно погонять тесты. Цифры я приводить не буду, так как в них нет никакого смысла. Они зависят от огромного числа параметров, поэтому в абсолютном значении не представляют ценности. Важны именно изменения значений в рамках одной тестируемой среды. Я буду говорить о примерном результате.

Первым делом я запустил тесты голого php70, без кэширования. Результаты при средней нагрузке, когда сервер успевает обработать все запросы, но работает на пределе своих возможностей, примерно оказались равны php54+apc. Но когда нагрузка сильно возрастает, образуется очередь запросов, php70 начинает в 2-3 раза медленнее обслуживать запросы, время отклика вырастает в 2-3 раза.

Я так прикинул, думаю, вроде неплохой результат. Сейчас включу apc и замерю как с ним будет. Оказалось, что модуль apc давно не поддерживается и поставить его на версию выше php54 нельзя. Вместо него теперь apcu. Думаю ладно, не проблема. Подключаю apcu и тестирую с ним. Результат меня расстроил. На средней нагрузке результат практически не изменился, на высокой нагрузке стал чуть хуже, а на очень высокой вообще в 2 раза просел по сравнению с работой без модуля.

Я понял, что никакого чуда с обновлением php70 не произошло. Прироста производительности я не получил, а получил кучу проблем в виде неработающих плагинов и phpmyadmin. Я принял решение откатываться назад, но не на версию php54, как было, а решил попробовать php56, чтобы проверить, что у него со скоростью.

К сожалению, уже после удаления 7-й версии php, я узнал, что модуль apc и apcu имеют принципиальное отличие и сравнивать только их нельзя. В результате мои тесты оказались недостоверны и с практической точки зрения бесполезны. Дело в том, что apc является opcode cache and data store, а apcu только data store. Таким образом, чтобы корректно протестировать производительность, мне нужно было в php70 включить еще opcache, который является opcode cache. Такая связка показала бы сопоставимый результат.

Мне все же любопытно проверить реальную производительность php70 в рабочей обстановке. Но постоянно пользоваться им пока не представляется возможным из-за проблем совместимости.

Откат обновления php 7.0 до php 5.6

Я решил откатиться на версию php 5.6. Ничего сложного в этом нет. Я уже рассказывал ранее, как в centos обновить php54 до php56. Воспользуемся информацией из этого материала. Сначала удаляем php70:

И устанавливаем все те же пакеты, что мы до этого удалили из версии php54, потом поставили и удалили php70 :)

Перезапускаем php-fpm. Он может ругнуться на строку:

Если так, то удалите ее. Я не помню, в какой версии она появляется, в 5.6 или в 7.0, в 5.4 ее точно не должно быть.

После отката на php5.6 я подключил модуль apcu и начал гонять тесты. Думаю и так понятно, что они все были хуже, чем php54+apc, так как принципы работы apc и apcu разные. Так что не буду останавливаться на этом. Жаль, что узнал об этом отличии я слишком поздно, когда уже вернулся обратно на php54 и стал спокойно разбираться в ситуации.

Я принял решение откатиться с версии php56 обратно на php54.

Отмена обновления php 5.6 и возврат на php 5.4

Тут все просто. Удаляем php56:

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

Заключение

Устроил марафон на своем сервере с сайтом. Результат практически нулевой, за исключением полученных знаний. Так как раньше я вообще был не в теме всех нюансов настройки php и веб сервера, получил некоторое представление о том, как все это работает и в какую сторону нужно двигаться для увеличения производительности. Запланировал на тестовом сервере спокойно разобрать этот вопрос и протестировать производительность wordpress.

Подозреваю, что на слабеньких VDS с небольшой памятью и одним процом большого смысла городить дополнительные модули, которые тратят и так маленькие ресурсы сервера, не нужно. Существенного прироста производительности не будет. У меня все всегда упиралось в процессор при высоких нагрузках. Если нужно быстро ускорить wordpress в разы, то достаточно просто включить какой-нибудь кэширующий плагин, который генерирует статические страницы и выдает их пользователям. Прирост сразу же в десятки и сотни раз. Статический контент nginx отдает моментально и даже слабый VDS самого начального уровня способен будет обрабатывать одновременно сотни запросов.

Вот часть таблицы с моими результатами по тесту с одним из наборов параметров. Просто для оценки разницы значений. Первый столбец то, что было в самом начале. Предпоследний - то, к чему в итоге вернулся после нескольких итераций. Последний столбец для наглядности, чтобы было понятно, что такое плагин кэширования для wordpress и как он влияет на время отклика.

Тестирование производительности web сервера

Буду рад комментариям, замечаниям и советам по теме текущей статьи. У меня нет сейчас достаточно времени, чтобы разобраться в нюансах, но есть желание научиться настраивать максимально производительный web сервер для базовых задач размещения популярных движков. Время отклика сайта сейчас влияет на ранжирование сайта в результатах поиска. По крайней мере гугл открыто об этом говорит и призывает всех делать быстрые сайты.

CentOS 7 поставляется с версией PHP 5.4, которая уже давно официально является EOL и больше не поддерживается.

Используя PHP 7, ваши приложения будут загружаться быстрее и потреблять меньше системных ресурсов.

В этом руководстве мы объясним, как установить или обновить до PHP 7.0. 7.1, 7.2 и 7.3 в системе CentOS 7. Мы также покажем вам, как интегрировать PHP с Nginx и Apache.

Также перед установкой определенной версии PHP 7.x убедитесь, что она поддерживается вашим приложением.

Подготовка

Перед тем, как начать изучение этого руководства, убедитесь, что вы вошли на свой сервер с учетной записью пользователя с привилегиями sudo или с пользователем root. Рекомендуется запускать административные команды от имени пользователя sudo, а не root. Если в вашей системе нет пользователя sudo, вы можете создать его, следуя этим инструкциям .

Включение репозитория Remi

Пакеты PHP 7.x доступны в нескольких разных репозиториях. Мы будем использовать репозиторий Remi, который предоставляет более новые версии различных программных пакетов, включая PHP.

Репозиторий Remi зависит от репозитория EPEL . Выполните следующие команды, чтобы включить репозитории EPEL и Remi:

Yum может предложить вам импортировать GPG-ключ репозитория. Введите y и нажмите Enter .

В следующих разделах мы расскажем, как установить PHP 7.x, включив соответствующий репозиторий Remi. Если в вашей системе уже установлен PHP 5.4, yum обновит пакеты PHP.

Установка PHP 7.3 на CentOS 7

Выполните следующие шаги, чтобы установить PHP 7.3 на CentOS 7.

  1. Начните с включения репозитория PHP 7.3 Remi:
  2. Установите PHP 7.3 и некоторые из наиболее распространенных модулей PHP:
  3. Проверьте установку PHP, введя следующую команду, которая распечатает версию PHP :

Установка PHP 7.2 на CentOS 7

Используйте PHP 7.2, только если вы собираетесь устанавливать такие приложения, как Magento 2, которые несовместимы с PHP 7.2.

Следующие шаги описывают, как установить PHP 7.2 CentOS 7.

  1. Сначала включите репозиторий PHP 7.2 Remi, выполнив следующую команду:
  2. После включения репозитория установите PHP 7.2 и несколько наиболее распространенных модулей PHP:
  3. Проверьте установку PHP:

Установка PHP 7.1 на CentOS 7

Следуйте инструкциям ниже, чтобы установить PHP 7.1.

  1. Включите репозиторий PHP 7.1, набрав:
  2. Установите PHP 7.1 и несколько наиболее распространенных модулей PHP:
  3. Чтобы проверить установку, выполните следующую команду, которая распечатает версию PHP:

Настройка PHP 7.x для работы с Apache

Если вы используете Apache в качестве веб-сервера, просто перезапустите службу Apache, используя следующую команду, и все готово:

Настройка PHP 7.x для работы с Nginx

В отличие от Apache, Nginx не имеет встроенной поддержки обработки файлов PHP, поэтому нам нужно установить отдельное приложение, такое как PHP FPM, которое будет обрабатывать файлы PHP.

Чтобы установить пакет PHP FPM, выполните следующую команду:

По умолчанию PHP FPM запускается как пользовательский apache на порту 9000. Мы изменим пользователя на nginx и переключимся с сокета TCP на сокет Unix. Для этого отредактируйте строки, выделенные желтым:

Убедитесь, что директория /var/lib/php имеет правильного владельца :

После внесения изменений включите и запустите службу PHP FPM:

Затем отредактируйте директиву виртуального хоста Nginx и добавьте следующий блок местоположения, чтобы Nginx мог обрабатывать файлы PHP:

Чтобы новая конфигурация вступила в силу, перезапустите службу Nginx :

Выводы

Вы узнали, как установить PHP 7 на свой сервер CentOS и как настроить веб-сервер для обработки файлов PHP.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Читайте также: