php update centos 7
PHP 7 обновление в CentOS 7
Рассмотрим обновление на PHP 7-ой версии в системе CentOS 7 работающей с Nginx. Произведем настройку после обновления необходимых конфигурационных файлов для работы ресурсов использующих php. Процесс обновления сложный требующий внимания и ответственности.
Введение
Рано или поздно приходит время обновить старую версию PHP на новую. Как правило это обусловлено требование при обновлении ресурсов которые не смогут работать со старой версией. Редко обновление приходит без ручного вмешательства в редактирование конфигурационных файлов.
Обязательно перед обновление сделайте резервную копию системы и после обновления максимально проверьте все ресурсы использующие PHP!
В моем случае я обновляю версию которую устанавливал в статье Установка и настройка PHP.
В другой статье вы узнаете как работать с PHP используя репозиторий Remi для CentOS 7.
Удаление старой версии PHP
Перед тем как установить новую версию нам надо определить какая стоит версия, какие пакеты и с какого репазитория.
Подготовка перед удалением
Проверим установленную версию:
Выведем весь список установленных пакетов:
Исходя из вывода удалим все эти пакеты. Новую версию php мы будем устанавливать с другого репазитория. Репозиторий remi нам больше не нужен и мы его удалим.
Удаление PHP 5.6
Удалим одной командой:
Внимательно смотрим лог обновления на предмет ошибок и предупреждений! Сохраните все ошибки и предупреждения. Уверяю в последствии это сильно сократит время в настройке после обновления!
Удаление репозитория Remi-safe
Не вижу смысла держать репозитории которые больше не используются и всегда их удаляю.
Выведем список всех используемых репозиториев:
В выводе видим точное имя которое мы используем при удалении:
После всех действий обновим систему чтобы окончательно всё подготовить к установке новой версии:
Установка новой версии PHP
Выбор репозитория и версии PHP 7
Вероятно есть разные варианты установки PHP 7 версии, но мне нравится репозиторий WebtaticEL про него и расскажу.
Перейдя по ссылке вы увидите все варианты версий возможных для установки а так же способы их установки в необходимую вам систему. Мой выбор пал на версию PHP 7.1 так как на данный момент это самая стабильная новая версия.
Добавление репозитория Webtatic
Добавим репозиторий в систему:
После добавления любого репазитория необходимо обновить список пакетов. В CentOS это можно сделать командой вывода всех репозиториев которая заодно и обновит весь список пакетов:
Установка PHP 7.1
Установим все нужные мне пакеты исходя из тех что удалял:
Сознательно не стал ставить параметр с которым всё установится без вопросов. Лучше всегда быть на контроле таких сложных и ответственных обновлений.
Можем уставим все что есть, но решать вам самим что для вас лучше:
После обновления я предпочитая перезагрузить систему чтобы окончательно избавится от сомнений что что то работает по старой схеме и после перезагрузки перестанет работать.
Проверка после обновления PHP
После обновления первым делом проверим какая версия php в системе:
Видим что установилась новая версия, но почти со 100% уверенностью могу сказать что при попытке открыть свой интернет ресурс вы обнаружите что он не работает. Вот тут то и пригодятся все наши сохранённые предупреждения при удалении, обновлении и установке новых пакетов.
Ошибки в логах установки/удаления
В моем случае было несколько предупреждений:
Как видите система сказала что в двух случаях она создала новые файлы а старые сохранила с пометкой rpmsave. В случае когда система не смогла создать новый файл она создала его с пометкой rpmnew.
Любыми удобными вам способами сохраните копии созданных новых рабочих файлов. Необходимый вам код из старых сохраненных обновлением файлов перенесите в новые рабочие файлы. Мне было необходимо отредактировать два файла /etc/php-fpm.d/www.conf и /etc/php.ini.
На моих системах, с которыми я работаю, мне не доставляет это большого труда, так как весь код что я правлю документируется. Всегда комментирую старый код и пишу новый с пометками. При таком подходе мне проще понять код и тому кто будет работать с системой после меня будет проще разобраться при возникновении проблем.
Настройка PHP-FPM после обновления
Так как у нас работает Nginx и для связки с php используется php-fpm мы проверим необходимую службу:
Из вывода мы видим что служба остановлена и отсутствует в автозагрузке. Добавим в автозагрузку, запустим и посмотрим статус:
Из вывода команды мы видим ошибку во второй строке файла /etc/php-fpm.d/www.conf. Откроем и посмотрим код:
Видим что вторая строке и отключена знаком #. Посмотрев в сохранном созданном установщиком новом файле увидим что все отключения идут знаком ;. Заменив все знаки # на ; сохраним и перезапустим службу и посмотрим статус:
Видим что служба находится в автозагрузке и работает.
Вывод всех параметров PHP 7
Последнее что нам осталось сделать для полного понимания проделанной работы это посмотреть вывод всей информации о версии php. Создадим на работающем ресурсе в корневой директории сайта файл info.php и поместим туда код:
Достаточно набрать в строке браузера http://IP или ИМЯ/info.php и вы увидите страницу примерно с таким содержанием:
PHP Version 7.1.8
Вывод
Судя по статье может показаться что обновление версии PHP не такое уж и сложное дело но уверяю что эта простота придет только с опытом. Многое зависит от того как долго не обновляли систему, какие ресурсы там работают и какие у каждого в отдельности требования к версии php. В случае если вам досталась система с которой работали разные люди и мало чего комментировали в коде сложностей может возникнуть очень много и единственное что вас спасет от головной боли в случае неправильной работы важных ресурсов это резервное копирование перед выполнением обновления. Лучшим вариантом при обновлении таких систем это сделать клон системы и производить все действия на нем. Конечно при работе с клоном может возникнуть дополнительные сложности но это уже другая тема.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как обновить версию PHP до 7.* на сервере CentOS 7?
Необходимо выполнить следующие действия:
Добавьте репозитории Remi и Epel для CentOS 7, выполнив команды:
Удалитe текущую версию PHP c сервера командой:
Удалите или закомментируйте (т.е. поставьте спецсимвол перед нужной строкой, в этом случае — #) подключение текущего модуля PHP для apache.
Для этого в файловом менеджере откройте файл domains.conf на редактирование (путь: /etc/httpd/conf.d/domains.conf) и закомментируйте или удалите строку:
Чтобы она выглядела так:
Либо выполните в консоли команду:
Теперь установите PHP 7.*.
Для установки PHP 7.1 в консоли выполните команду:
Для установки PHP 7.2:
Для установки PHP 7.3:
После завершения установки перезагрузите веб-сервер apache, выполнив команду:
Для проверки версии PHP используйте команду:
Вы получите следующий вывод:
Для проверки PHP для сайта создайте файл phpinfo.php в корне сайта, поместив в него следующий код:
Затем обратитесь в браузере к скрипту: http://example.com/phpinfo.php
Вместо example.com укажите имя вашего домена:
Конфигурационный файл php.ini, в котором можно редактировать параметры PHP, находится по данному пути: /etc/opt/remi/php(номер версии)/php.ini
Рекомендуем сразу включить использование short_open_tag (это необходимо для работы сайта, в коде которого часто используются короткие теги). Для этого откройте конфигурационный файл php.ini для нужной вам версии PHP, найдите параметр short_open_tag и поставьте значение On. После этого сохраните изменения, чтобы строка выглядела так:
В консоли сделать это можно следующим образом:
После редактирования параметров PHP и изменения значений перезагрузите веб-сервер apache командой:
Для установки модуля ionCube Loader для PHP из репозитория Remi выполните следующую команду:
После установки перезагрузите веб-сервер apache командой:
PHP от Remi для CentOS
Версии PHP от Remi являются самыми популярными и стабильными при использовании на Web серверах. Расскажу основные моменты работы с репозиторием. Рассмотрим как сменить версию PHP. Один из самых популярных репозиториев для CentOS.
Введение
Есть замечательный человек Remi Collet, который создал репозиторий пользующийся огромной популярностью у пользователей операционной системы CentOS. Познакомится с новостями репозитория можно на блоге Remi Collet.
В статье будет рассказано про использование репозитория на системах CentOS 7 и 8.
Les RPM de Remi repository поддерживает последние версии MySQL и PHP (бэкпорты федоровских rpm). Пакеты этого репозитория необходимо использовать с осторожностью, так как они заменяют базовые пакеты.
В другой статье вы можете узнать как использовать репозиторий WebtaticEL для CentOS 7. В нем так же используются последние версии PHP, но к сожалению там нет многих удобств которые есть у Remi. Например, используя репозиторий Remi можно всегда иметь последнюю версию phpMyAdmin.
Предварительная подготовка
Перед началом использования репозитория Remi необходимо подключить репозиторий Epel созданный группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Установка Epel в CetnOS 7 производится командой:
Установка Epel в CetnOS 8 производится командой:
Подключение репозитория от Remi
для CentOS 7
Для установки репозитория Remi в CentOS 7 достаточно выполнить команду:
Посмотреть активные репозитории можно следующей командой:
По умолчанию установлен репозиторий remi-safe который имеет только дополнительные пакеты для базового хранилища и коллекций программного обеспечения. Например, при попытке установить phpMyAdmin будет установлена старая версии. Для установки последних версий надо активировать репозиторий remi.
Посмотрим репозитории что у нас есть в системе выполнив команду:
Надеюсь, вы заметили что есть репозитории glpi.
GLPI — это программный инструмент ITSM, который помогает вам легко планировать и управлять изменениями в ИТ структуре предприятия, эффективно решать возникающие проблемы используя систему заявок, так же позволяет вам получить контроль над ИТ-бюджетом и расходами вашей компании. В будущем я расскажу как работать с этим замечательным проектом. Кроме того, то что Remi Collet поддерживает репозиторий меня очень радует.
Перед работой с репозиториями Remi необходимо установите пакет yum-utils, что бы не получать ошибку «bash: yum-config-manager: command not found». Установим yum-utils выполнив необходимую команду:
Сейчас у нас активирован remi-safe. Для активации remi надо вначале отключить remi-safe а потом активировать remi выполнив команды:
Перед тем как определится какую версию PHP использовать я всегда смотрю на сайте Supported Versions PHP.
В списке имеющихся репозиториев нет версии php5.6, так как он входит в состав remi.repo. Для установки достаточно в команде указать remi-php56.
для CentOS 8
В 8 версии CentOS используется версия php 7.2 которая уже может удовлетворять требования множества новых сайтов, но если вам нужны версии новее подключайте Remi.
Подключаем репозиторий Remi, выполнив следующую команду:
Посмотрим список всех доступных вариантов установки php:
Из вывода выше видно что по умолчанию стоит базовая версия CentOS 7.2 и имена она будет установлена.
Установка версии PHP от Remi
для CentOS 7
Активируем репу remi-php72, для этого выполняем команду:
Устанавливаем php7.2 выполнив команду:
Лучше указывать php72 и тогда пакеты будут установлены только из репозитория remi. Например, я всегда внимательно смотрю какая версия php будет установлена в списке устанавливаемых пакетов.
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
Проверим установленную версию выполнив команду в консоли сервера:
для CentOS 8
Активируем репу php remi-7.2, для этого выполняем команды:
Убедимся что версия выбрана правильно:
Установим php remi-7.2 и все популярные модули следующей командой:
Файл конфигурации php.ini
Внесем необходимые изменения в файл настроек php.ini:
Настройка Php-fpm для Nginx
Для того чтобы связать nginx и php будем использовать мост php-fpm. Основной файл настройки находится по пути /etc/php-fpm.conf и там должен быть параметр include=/etc/php-fpm.d/*.conf говорящий о том где лежат настройки пулов.
Запускаем php-fpm и добавляем в автозагрузку:
Проверяем, запустился ли он.
Все в порядке, сервис работает и находится в автозагрузке.
Использовать порт или сокет решать вам, но говорят что сокет использовать лучше. Запустим php-fpm через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Вы можете для каждого сайта созать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp.
Более подробно прочтите в статье SFTP настройка для веб хостинга.
Назначим каталогу /var/lib/php правильное владение:
Перезапускаем php-fpm командой:
Проверяем, стартовал ли указанный сокет.
Всё успешно настроено.
В настройках nginx для сайта необходимо указать требуемый пул. Например, прописать код fastcgi_pass unix:/run/php-fpm/www.sock; в секции location
Обновление версий PHP от Remi
Схема обновления универсальна и подойдет как для всех версий CentOS. В примере ниже расмотрен вариант обновления для версии 7.
Обновление состоит из нескольких действий:
Выполним обновление PHP до версии 7.3 в системе CentOS 7.
Останавливаем php-fpm командой:
Выводим список всех установленных пакетов php:
Произведём удаление всех выведенных пакетов необходимой командой:
Внимательно смотрим вывод команды при удалении! В выводе вы должны увидеть примерно такие строки:
предупреждение: /etc/php-fpm.d/www.conf сохранен как /etc/php-fpm.d/www.conf.rpmsave
предупреждение: /etc/php.ini сохранен как /etc/php.ini.rpmsave
Удалим старый репозиторий php7.2 и установим новый php7.3 выполнив команды:
Проверяем правильность установки нужного репозитория выполнив команду:
Устанавливаем пакеты аналогичные удаленным:
Обязательно смотрим версию и репозиторий откуда будут ставится пакеты.
Осталось проверить файлы что выдала команда при удалении старой версии php:
В заключение, запустим сервис php-fpm и проверим статус:
Из вывода видно что сервис не стартует при загрузке. Добавим сервис в автозагрузку выполнив команду:
Вывод
В статье рассказано про основные моменты работы с репозиторием Remi Collet. Репозиторий активно обновляется и мой выбор остановился на использовании именно его при работе с PHP.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Читая их я получаю информацию которая позволяет мне улучшить качество написания статей. Кроме того, оставляя комментарии вы помогаете сайту получить более высокий рейтинг у поисковых систем. Давайте общаться.
24 комментариев для статьи “ PHP от Remi для CentOS ”
Напишите как обновиться с php 7 на 8
Опишу когда буду переходить на 8 версию. Мне кажется обновление будет аналогичным что с 7.3 до 7.4.
Верните родной файл /etc/php-fpm.d/www.conf и перезапустите.
Обычно ошибки в не правельности названий или знаках.
Вот и смотрите что вы меняли и ищите там ошибку. Почему и рекомендую всегда оставлять базовый файл который можно вернуть и проверить работоспособность.
Спасибо за подробный и изрядно дополненный мануал по обновлению 7-ой версий php из репозитория remi.
Раньше стояли старенькие версии Nginx и PHP-FPM из репозитория Epel-Release. Обновился и вот проблема — на сайте в кодировке windows-1251 перестали корректно отображаться все буквы. В конфигурационном файле для данного сайта в директиве Server прописал «charset windows-1251;» как было и раньше — не помогло. Что делать?
Может проще будет сделать перекодировку базе данных? Все что неправильно отображается берется из базы данных?
Базы данных вообще нет) Просто создаю страничку index.html в кодировке windows-1251, прописываю в ней тег и текст на русском. Вешаю ее на домен, в файле этотдомен.conf в директиве Server прописываю charset windows-1251, перезапускаю Nginx и вижу кракозябы. Меняю все на UTF-8 — отображается правильно. А вот на прошлых версиях Nginx 1.12 и PHP-FPM 5.4 работало прекрасно. Может еще где что-то нужно прописать?
И еще попутный вопросик, раз уж я здесь. У меня на сервере несколько сайтов. Файл default.conf я не редактировал — в нем прописано просто «listen 80». В остальных же *.conf файлах я прописал «listen IP:80» (то есть IP своего сервера). Все работает, все открывается как положено, но — когда в строке браузера указываю просто свой IP, то открывается первый по алфавиту один из моих сайтов.
Мне это не нравится — я хочу, чтобы при обращении к серверу просто по IP открывалась стандартная заглушка Nginx из файла defaul.conf. Если в файле defaul.conf я прописываю как и везде «listen IP:80» — не помогает. Если во всех других *.conf файлах убираю IP и оставляю просто «listen 80» — сайты вообще не открываются. Подскажите, пожалуйста, как сделать, что по обращению к серверу просто по IP срабатывал default.conf?
«Меняю все на UTF-8 – отображается правильно» вот так и делайте. В кодировке windows-1251 практически никто не делает уже. Думаю можно настроить и с этой кодировкой, но тут я Вам не подскажу.
По поводу обращения по IP к серверу что бы открывалась нужная Вам страница.
В файле defaul.conf.
listen 80; — мне нравится указывать без ip
server_name localhost; — это говарит о том что когда будет запрос по ip откроется файл что указан в пути
location / <
root /usr/share/nginx/html; — вот этот путь.
index index.html index.htm;
>
Для всех других ресурсов создаются свои конфигурации по типу
location / <
root /var/www/sites/forum.mageia.org.ru/www; — это путь до нужного сайта
index index.html index.htm;
>
Грубо говоря идентификация ресурса идет по строчке server_name.
Строка «server_name localhost» в файле default.conf присутствовала по-умолчанию, я попробовал оставить везде только listen 80 — то есть без указания IP и все равно не помогло, при переходе из браузера по IP открывался один из сайтов.
В итоге я дописал IP в директиве server_name localhost через пробел и, о чудо, наконец стала срабатывать стандартная заглушка Nginx, а другие сайты продолжили нормально работать.
Надо смотреть что прописано в конфигурации того файла что открывается по ip. То что сделали работать будет, но это кривой вариант работы. Можете дать конфигурацию того сайта что открывается по ip?
Да, пожалуйста — вот мой шедевральный конфиг (полный минимализм, сайт статический с небольшими php-скриптами кое-где, SSL нет и в помине, логи отключены, все несуществующие ссылки ведут на главную с ответом 200):
server <
listen 80;
server_name mysite.ru www.mysite.ru;
root /path/to/mysite/;
index index.php;
charset utf-8;
server_name mysite.ru http://http://www.mysite.ru; — http:// лишние. Остальное вроде всё правильно.
Можно еще конфиг default.conf?
http:// там нет — это ваша форма ответа подставляет перед www. А вот мой default.conf, каким я его сделал сейчас — если убрать IP адрес из server_name, то все возвращается на круги своя и я вновь вижу открытие сайта по введению IP в адресную строку браузера:
server <
listen 80;
server_name 111.222.333.444 localhost;
location / <
return 403;
>
Хм… Оказывается надо оборачивать код в code и тогда все правильно получается. Решу со временем эту проблему.
Попробуйте такой код:
server <
listen 80;
server_name localhost;
location / <
root /usr/share/nginx/html;
index index.html index.htm;
>
>
Теперь мой default.conf выглядит вот так:
При такой конфигурации ничего не отдается ни по IP адресу, ни даже по обратной PTR-записи для данного IP адреса (домен, который хостер присваивает IP по-умолчанию). На сайт теперь можно попасть только прямо указав название домена.
Хорошо что у вас получилось что хотели.
Привет! Такой был по дефолту — не работает. В общем, пока я не добавил IP в строку server_name, продолжал открываться один из сайтов.
Сева, еще попутный вопросик появился, в access log своего сайта заметил вот такое:
У меня домен вовсе не http://www.123cha.com и никакого отношения к нему не имеет — откуда появляются такие записи в логах? Ответ моего сервера то 200, то 499 в этих случаях.
Странно как то это что по дефолту не работает. Система CentOS7 и Nginx ставили с их репозитория?
По логу не отвечу. Запись действительно странная.
CentOS ставил из образа, который сам провайдер VPS предлагает (в VMmanager просто выбрал операционку из списка и она установилась без всяких вопросов). Nginx 1.16.0 и PHP-FPM 7.3.7 по вашей инструкции — первый из официального, второй из Remi. Другого софта не ставил.
Думаете лучше было CentOS из собственного iso файла устанавливать и настраивать сеть в ручную?
Что это за шаблон установки от хостера и какого он качества для меня всегда загадка. На практике знаю что там очень часто любят вырезать некоторые вещи и добавлять какие то свои скрипты. Когда хостер позволяет устанавливать систему из своего ISO образа я всегда этим пользуюсь. Большинство статей пишут основываясь на настройках с учетом использования родного iso образа разработчика. Если хотите меньше сюрпризов работайте с образами разработчиков.
Здравствуйте! Спасибо за пошаговый мануал.
В качестве пожелания хотелось бы видеть у Вас на сайте статьи по настройке веб-сервера с применением связки apache+nginx на centOS7, где первый за бекенд отвечает, второй — за фронт.
И статью бы по настройке подобного на FreeBSD.
Подобного при беглом поиске не нашёл. В лучшем случае инфа есть но уже устарела. В современном окружении и с различием версий разных служб и приложений могут быть проблемы, где без опыта уже не обойтись 🙂
Обновление php 7.2 до php 7.4 в Centos 8
Не прошло и пол года, как дефолтная версия php 7.2 в стандартных репозиториях Centos слегка устарела и хочется чего-то новее. Недолго музыка играла 🙂 Продолжаем бесконечную возню с устаревшими пакетами из стандартных репозиториев. Я перевел сайты wordpress с 7.2 на 7.4 и без тестов заметил значительный прирост производительности.
Введение
Ускорение от обновления версии php с 7.2 до 7.4 я заметил в первую очередь в админке сайтов, так как провожу там достаточно много времени. Из-за того, что там ничего не кэшируется, а сам wordpress не очень расторопен, тормоза заметны. И их стало заметно меньше, что видно невооруженным глазом, так что советую попробовать обновление php.
У меня есть статьи про настройку web сервера centos на базе nginx и apache. На момент их написания в стандартных репозиториях Centos была версия php 7.2, которая на тот момент была наиболее актуальной и поддерживаемой большинством движков. Сейчас ситуация изменилась и я бы советовал ставить версию 7.4.
Пошаговая инструкция (How-to)
Необходимое время: 10 минут.
Итак, начинаем обновление php с 7.2 до 7.4 на Centos 8.
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module reset php:7.2
# dnf module enable php:remi-7.4
# dnf module list php
# dnf update
На всякий случай привожу список всех пакетов, которые необходимы для сайтов wordpress. Если у вас что-то не было раньше установлено, доустановится. Например, я не всегда ставлю imagick, так как он тянет за собой кучу зависимостей. Но все же лучше поставить, так как пакет пригодится для многих плагинов оптимизации изображений.
# dnf install php-dom php-simplexml php-ssh2 php-xml php-xmlreader php-curl php-date php-exif php-filter php-ftp php-gd php-hash php-iconv php-json php-libxml php-pecl-imagick php-mbstring php-mysqlnd php-openssl php-pcre php-posix php-sockets php-spl php-tokenizer php-zlib
Теперь можно сходить в админку WordPress и посмотреть там на версию php.