[РЕШЕНО] Обновление PHP до версии 7.4 на Ubuntu Server с NGINX + PHP-FPM + VestaCP

Сегодня в статье рассмотрим Обновление PHP до PHP 7.4 на Ubuntu Sever с панелью управления VestaCP и веб сервером Nginx + php-fpm.
Все началось после того, как WordPress предложил мне обновится до более новой версии PHP, а точнее до версии PHP 7.3 PHP 7.4
Ну раз предложил, то почему бы и нет. Тем более новая версия PHP 7.3 дает прирост 5%-10% по сравнению с PHP 7.2 и 20%-25% по сравнению с PHP 7.1. PHP 7.4 стала еще более быстрой+ 5-8% по сравнению с PHP 7.3
Обновление PHP на Ubuntu с VestaCP
Для обновления на новую версию PHP, подключаемся по SSH к нашему серверу.
ssh пользователь@IP-адрес_сервера
Далее добавим более свежий репозиторий для нашего PHP
sudo add-apt-repository ppa:ondrej/php
Обновим индексы:
sudo apt update
Устанавливаем php 7.4,а также некоторые необходимые дополнения.
sudo apt install php-pear php7.4 php7.4-common php7.4-cli php7.4-fpm php7.4-gd php7.4-mysql php7.4-mbstring php7.4-curl php7.4-xml php7.4-zip php7.4-json php7.4-imagick php7.4-xmlrpc php7.4-bz2 php7.4-dev php7.4-opcache php-memcached
После установки всех дополнений PHP 7.4 набираем в терминале следующую команду:
sudo update-alternatives --set php /usr/bin/php7.4
Данная команда назначит к запуску по умолчанию интерпретатор PHP 7.4.
Если же Вы хотите вернуть версию PHP 7.X, то набираем такую команду:
sudo update-alternatives --set php /usr/bin/php7.X
Скопируйте старый php.ini в новую директорию:
sudo cp /etc/php/7.X/fpm/php.ini /etc/php/7.4/fpm/php.ini
Останавливаем службу php7.X-fpm и запускаем php7.4-fpm:
sudo service php7.X-fpm stop
sudo service php-fpm stop
sudo service php7.4-fpm start
sudo service php-fpm restart
Проверяем всё ли запустилось:
sudo service php-fpm status
sudo service php7.4-fpm status
Должно выдать что-то вроде этого:
php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-05-22 15:12:32 UTC; 46min ago
Docs: man:php-fpm7.4(8)
Process: 400 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /et>
Main PID: 252 (php-fpm7.4)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 2127)
Memory: 20.5M
CGroup: /system.slice/php7.4-fpm.service
├─252 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
├─398 php-fpm: pool www
└─399 php-fpm: pool www
Если после данной манипуляции перестали работать сайты на WordPress, то читаем дальше.
Решение ошибки 500 — внутренняя ошибка сервера.
И так мы подобрались к сути проблемы. После всех этих действий сайт с версией PHP 7.4 выдавал ошибку 500. Как только я останавливал 7.4 и запускал, ну скажем PHP 7.2 ошибка исчезала и сайт начинал работать в нормальном режиме.
Решил искать во всех конфигурационных файла PHP. Сравнивая два файла мне удалось найти некоторые отличия, но сути проблемы это не меняло. И вот когда я совсем отчаялся мне на глаза попадается конфигурационный файл PHP от панели VestaCP расположенный в директории /etc/php/7.2/fpm/pool.d/
и называется он как ваш домен. В моем случае obu4alka.ru.conf
со следующим содержимым:
[obu4alka.ru]
listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1
user = user
group = user
pm = ondemand
pm.max_children = 4
pm.max_requests = 4000
pm.process_idle_timeout = 10s
pm.status_path = /status
php_admin_value[upload_tmp_dir] = /home/user/tmp
php_admin_value[session.save_path] = /home/user/tmp
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /home/user/tmp
env[TMPDIR] = /home/user/tmp
env[TEMP] = /home/user/tmp
Данный файл подгружает настройки для нашего домена при запуске php-fpm. Ну хорошо копирую файл в директорию с PHP 7.4, а лучше сразу всю директорию
sudo cp /etc/php/7.2/fpm/pool.d/ /etc/php/7.4/fpm/
Если запускали старую версию PHP, то останавливаем службу php7.2-fpm и запускаем php7.4-fpm:
sudo service php7.2-fpm stop
sudo service php7.4-fpm start
Захожу на сайт, УРА!!! Ошибка 500 исчезла, сайт заработал в нормальном режим.
P.S. Также если не помогает, то двигаемся дальше. И да если сайт отказывается работать на новой версии PHP. Делаем следующее:
sudo nano /usr/local/vesta/conf/vesta.conf
Меняем значение на:
WEB_BACKEND='php74-php-fpm'
Также удаляем файлы:
sudo rm /etc/init.d/php-fpm
sudo rm /etc/init.d/php7.2-fpm
Далее копируем нашу PHP 7.4:
cp /etc/init.d/php7.4-fpm /etc/init.d/php-fpm
Рестарт PHP
sudo service php7.4-fpm restart
sudo service php-fpm restart
Если и после этого сайт отказывается работать на новой версии PHP , то уаляем старую версию:
sudo apt remove --purge php7.2
sudo apt autoremove
sudo apt autoclean
Если есть вопросы, то пишем в комментариях в Телеграмм и ВК.
Ссылки в шапке страницы.Заранее всем спасибо!!!
Вообщем такие проблемы
1) sudo update-alternatives –set php /usr/bin/php7.4
пишет ошибку add-apt-repository: command not found
2) alternative /usr/bin/php7.4 for php not registered; not setting
что делаем? (щяс стоит 7.2 и веста)
При установке php7.4 ошибки были. Такое ощущение что обнова не встала.
Инструкция нерабочая. ubuntu 18.04 – всё будет работать ровно до того момента, как надо добавить новый сайт или выполнить “пересоздать web”.
А по подробнее?
Разворачиваем Ubuntu 18.04 Ставим vestaCP в версии php-fpm Добавляем какой-нибудь сайт Обновляем версию php c 7.2 до 7.4 по этой инструкции Ребутим сервер, убеждаемся, что сайт всё еще работает. Делаем любую манипуляцию, приводящую к “rebuild web” Всё, сайт лежит. Ошибок никаких нет, все сервисы работают. Вероятно нужно что-то еще править,… Подробнее »
Да всё правильно. У VestaCP необходимо менять шаблоны. по-другому никак как.
Вот поэтому инструкция нерабочая. Не бывает так, что после смены php ни разу не придётся что-то менять в конфигах. Та же смена сертификата приведет к rebuild web и всё, прощай сайт.
Да, согласен. Но это только если Вы работаете и меняете ну скажем один и тот же сайт. А вот если у вас уже есть сайты и вы хотите добавить новый, то новый не будет работать. Потому-что в его конфигурации будет указан старый php. Я дополню инструкцию с указанием изменения конфигурации… Подробнее »
Спасибо, обновил до 7.4.9.
Всегда пожалуйста!!!
502 Bad Gateway на Debian 9 + wordpress
Вот ссылка на пример с Debian
Чувак, ты провтыкал один серьёзный момент: php-fpm это отдельный сервис, и при отключении php7.2 даже при включённом в автозагрузку php7.4 всё-равно грузится php-fpm из php7.2 т.е. шлюз тупо лежит. Как добавит в автозагрузку по умолчанию php-fpm новой версии?
Здравствуйте Дмитрий. Если бы вы читали немного повнимательнее, то наверное бы заметили: начиная со слов “P.S. Также если не помогает, то двигаемся дальше. И да если сайт отказывается работать на новой версии PHP…”. Там есть пункт где мы удаляем сервис php-fmp который работает на php7.2 и копируем php7.4 в сервис php-fpm,… Подробнее »
Вопрос снимается. Признаю свой косяк. В автозагрузке systemd php-fpm – это символическая ссылка, указывающая на php7.2-fpm в этом же каталоге, т.е. всего-лишь псевдоним. Можно переписать ссылку на php7.4-fpm, можно вообще удалить. php-fpm используется всего-лишь как псевдоним при управлении через service (stop|start|restart|итд)
Да все верно.
Удачи вам и всего наилучшего!!!
Спасибо, 7 версия просто по скорости тащит
Добрый день!
Все успешно обновилось по инструкции, но wordpress все равно пишет, что сайт использует php 7,0, хотя я его удалил
В статье начиная со слов:
Также если не помогает, то двигаемся дальше.
Все делали по инструкции? Файлы удаляли и копировали новый, как написано в статье?
Добрый день, Олег. Только сейчас дошли руки до продолжения. Проделал всё, кроме последнего пункта: “Если и после этого сайт отказывается работать на новой версии PHP , то удаляем старую версию”, но всё равно вижу в WordPress после перезагрузки 7.2. Если отключаю – 500. А если удалю 7.2 и после этого… Подробнее »
Очень странно. Сайты работают только с версией 7.2. После удаления 7.2 если работать не будет то можно опять ее накатить. А так вообще сделать поиск по серваку. Где там у него тот самый конфиг, который к старой версии все тянет
Добрый день, Олег! Как это объяснить? php -v PHP 7.4.6 (cli) (built: May 14 2020 10:02:44) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies ~$ sudo update-alternatives –config php There are 2 choices for… Подробнее »
И можно ли как-то уже напрямую накатить php7.3-fpm на чистом дестрибутиве debian 9 ?
Здравствуйте, только через добавления репозитория от ondrej. В Debian репозитории обновляются чуть ли не самые последние
На сайте вышла новая статья о установке PHP7.4 на Debian
Скажите пожалуйста, актуально ли это для debian 9? на нем в дефолте стоит php7.0.
Данная инструкция актуально для всех Debian подобных дистрибутивах. До заголовка 500 внутренняя ошибка сервера
Сделал, получилось. Подскажите еще, как решить 500 ошибку для /phpmyadmin/ в таком случае. Он не запускается. А при прежней версии php – все ок.
В конфигурационном файле phpmyadmin на смотреть. Хотя если сайт работает, то и phpmyadmin должен работать. У меня с панелью VestaCP все работает и так. Посмотрите еще тут