Недавно вышедший Laravel 9 прекратил поддержку PHP7.x, и теперь он может работать только на PHP8.0-PHP8.1.
PHP8.1 поставляется с несколькими хорошими возможностями, такими как Enums
, readonly
свойство класса и др. Введение Enums наконец-то позволяет вам указывать допустимые значения, принимаемые переменной, а не прибегать к использованию подсказок типа из докблока или сторонних пакетов «fake enum».
Давайте рассмотрим, как обновить наш сервер до PHP8.1 с PHP8.0.
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum -y install yum-utils
sudo yum-config-manager --disable 'remi-php*'
sudo yum-config-manager --enable remi-php81
sudo yum install -y php81-php php81-php-fpm php81-php-mysql php81-php-gd php81-php-curl php81-php-mbstring php81-php-xml php81-php-bcmath php81-php-sqlite3 php81-php-zip
Во время обновления возникли две проблемы
1. Конфликты библиотек
file /usr/lib64/libzip.so.5 from install of libzip5-1.8.0-2.el7.remi.x86_64 conflicts with file from package libzip-1.3.2-1.amzn2.0.1.x86_64
Решение: удалите существующий пакет, затем запустите установку php81 снова
2. php-fpm не включен и не запущен должным образом
Проверьте с помощью systemctl
$ systemctl list-unit-files | grep fpm
php81-php-fpm.service disabled
Давайте включим и запустим его, а затем проверим его состояние
$ systemctl enable php81-php-fpm.service
$ systemctl start php81-php-fpm.service
$ systemctl status php81-php-fpm.service
● php81-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php81-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2022-05-06 18:21:15 +08; 6min ago
Main PID: 16011 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6
Memory: 8.9M
CGroup: /system.slice/php81-php-fpm.service
├─16011 php-fpm: master process (/etc/opt/remi/php81/php-fpm.conf)
├─15897 php-fpm: pool www
├─15898 php-fpm: pool www
├─15899 php-fpm: pool www
├─15900 php-fpm: pool www
└─15901 php-fpm: pool www
Еще одна замеченная проблема — php-fpm не читает конфигурацию php-fpm, которую мы установили в /etc/php-fpm.d
. Из вывода команды systemctl status
видно, что конфигурация читается по адресу /etc/opt/remi/php81/php-fpm.conf
.
Отредактируйте этот файл, чтобы обновить каталог conf для чтения
;include=/etc/opt/remi/php81/php-fpm.d/*.conf
include=/etc/php-fpm.d/*.conf
Теперь снова перезапустите службу php-fpm
$ systemctl restart php81-php-fpm.service
$ systemctl status php81-php-fpm.service
● php81-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php81-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2022-05-06 18:30:07 +08; 32min ago
Main PID: 16296 (php-fpm)
Status: "Processes active: 0, idle: 21, Requests: 30, slow: 0, Traffic: 0req/sec"
Tasks: 22
Memory: 118.6M
CGroup: /system.slice/php81-php-fpm.service
├─16296 php-fpm: master process (/etc/opt/remi/php81/php-fpm.conf)
├─16297 php-fpm: pool app.xxx.com
├─16298 php-fpm: pool app.xxx.com
Вместо пула www мы видим, что теперь он обслуживает пул для сайта app.xxx.com
, который мы задали в конфигурации пула.
Вот и все!