Сегодня в статье рассмотрим Обновление 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
[endtxt]