PHP 8.4 — это значительное обновление языка PHP, содержащее множество новых функций и оптимизаций. Однако Ubuntu 24.04 LTS включает в свои официальные репозитории только PHP 8.3. В этом руководстве объясняется, как обновить PHP до версии 8.4 и настроить Nginx для его использования.

Предпосылки

  • Существующий веб-сайт, работающий с Nginx и PHP 8.3 на сервере Ubuntu 24.04.
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя

Обновите систему

Свежая установка Ubuntu 24.04 требует обновления пакетов до последних доступных версий.

1
sudo apt-get update -y && sudo apt-get upgrade -y

Шаг 1. Список установленных пакетов PHP 8.3

Войдите на сервер как пользователь sudo без полномочий root через SSH.

Перечислите все пакеты PHP 8.3, установленные в вашей системе.

1
dpkg -l | grep php8.3

Вывод выглядит так.

1
2
3
4
5
6
7
8
9
ii  php8.3-cli                             8.3.6-0ubuntu0.24.04.2                  amd64        command-line interpreter for the PHP scripting language
ii  php8.3-common                          8.3.6-0ubuntu0.24.04.2                  amd64        documentation, examples and common module for PHP
ii  php8.3-curl                            8.3.6-0ubuntu0.24.04.2                  amd64        CURL module for PHP
ii  php8.3-fpm                             8.3.6-0ubuntu0.24.04.2                  amd64        server-side, HTML-embedded scripting language (FPM-CGI binary)
ii  php8.3-gd                              8.3.6-0ubuntu0.24.04.2                  amd64        GD module for PHP
ii  php8.3-mbstring                        8.3.6-0ubuntu0.24.04.2                  amd64        MBSTRING module for PHP
ii  php8.3-mysql                           8.3.6-0ubuntu0.24.04.2                  amd64        MySQL module for PHP
ii  php8.3-opcache                         8.3.6-0ubuntu0.24.04.2                  amd64        Zend OpCache module for PHP
ii  php8.3-readline                        8.3.6-0ubuntu0.24.04.2                  amd64        readline module for PHP

Второй столбец содержит имена установленных пакетов.

Передайте приведенный выше вывод командам cut, xargs и sed соответственно, чтобы сгенерировать список соответствующих пакетов PHP 8.4.

1
dpkg -l | grep php8.3 | cut -f3 -d' ' | xargs | sed 's/8.3/8.4/g'

Результат выглядит следующим образом:

1
php8.4-cli php8.4-common php8.4-curl php8.4-fpm php8.4-gd php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline

Используйте свой вывод при установке PHP 8.4.

Сохраните список существующих модулей PHP-FPM 8.3 в файл:

1
php-fpm8.3 -m > ~/php-fpm8.3.modules

Вы будете использовать этот файл, чтобы убедиться, что после обновления все модули отсутствуют.

Шаг 2. Установите PHP 8.4

Вы можете установить PHP 8.4 из репозитория ppa:ondrej/php, разработанного Ондржея Сури, который предоставляет последние стабильные версии PHP для систем Ubuntu и Debian.

Добавьте репозиторий ppa:ondrej/php.

1
sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y

Обновите индекс пакета.

1
sudo apt update

Смоделируйте установку пакетов PHP 8.4, используя список, созданный в предыдущем разделе.

1
sudo apt --simulate install php8.4-{cli,common,curl,fpm,gd,mbstring,mysql,opcache}

Установите пакеты PHP 8.4 с уточненным списком. Обратите внимание, что команда установки не содержит опции --simulate.

1
sudo apt -y install php8.4-{cli,common,curl,fpm,gd,mbstring,mysql,opcache}

Сохраните список текущих модулей PHP-FPM 8.4 в файл.

1
php-fpm8.4 -m > ~/php-fpm8.4.modules

Сравните существующие модули PHP-FPM 8.3 с текущими модулями PHP-FPM 8.4.

1
diff ~/php-fpm8.3.modules ~/php-fpm8.4.modules

Если вы получаете пустой вывод, это означает, что после обновления не пропало ни одного модуля.

Убедитесь, что версия PHP по умолчанию в режиме командной строки — 8.4.

1
2
3
4
5
$ php -v
PHP 8.4.1 (cli) (built: Nov 21 2024 14:54:00) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.1, Copyright (c), by Zend Technologies

Шаг 3. Настройте Nginx

Nginx и PHP-FPM 8.3 взаимодействуют друг с другом через сокет, созданный PHP-FPM 8.3. Поэтому, чтобы переключиться на PHP-FPM 8.4, вам нужно настроить новый сокет для PHP-FPM 8.4 и перенастроить Nginx с этим сокетом.

Найдите сокет, созданный PHP-FPM 8.3, и файл конфигурации Nginx, который использует этот сокет.

1
sudo grep -R fastcgi_pass /etc/nginx/sites-available/ | grep -Ev '#\s+fastcgi_pass'

Если это сокет Unix, вывод будет выглядеть так:

1
/etc/nginx/sites-available/default:    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;

Если это сокет TCP, вывод будет выглядеть так:

1
/etc/nginx/sites-available/default:    fastcgi_pass 127.0.0.1:9000;

В обоих случаях /etc/nginx/sites-available/default — это файл конфигурации Nginx, который вам нужно отредактировать, а /var/run/php/php8.3-fpm.sock или 127.0.0.1:9000 — это сокет.

У вас может быть другое имя файла или более одного имени файла. Замените default в следующей команде файлами, найденными в вашей системе.

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

1
sudo mkdir /etc/nginx/sites-backup

Скопируйте все файлы конфигурации в резервную папку.

1
sudo cp -L /etc/nginx/sites-available/* /etc/nginx/sites-backup

Отредактируйте файл конфигурации, заменив старый сокет новым.

  • Если старым сокетом является /var/run/php/php8.3-fpm.sock, новым должен быть /var/run/php/php8.4-fpm.sock.
1
2
3
4
5
sudo sed -i --follow-symlinks \

    's|php8.3-fpm.sock|php8.4-fpm.sock|g' \

    /etc/nginx/sites-available/default
  • Если старый сокет — 127.0.0.1:9000, то новый должен быть 127.0.0.1:9001.
1
2
3
4
5
sudo sed -i --follow-symlinks \

    's|127.0.0.1:9000|127.0.0.1:9001|g' \

    /etc/nginx/sites-available/default

Проверьте новую конфигурацию.

1
sudo nginx -t

Перед применением новой конфигурации вам необходимо выполнить следующий раздел для настройки PHP 8.4.

Шаг 4. Настройте PHP 8.4

Удалите конфигурацию рабочего пула PHP 8.4 по умолчанию.

1
sudo rm /etc/php/8.4/fpm/pool.d/*

Скопируйте конфигурацию из PHP-FPM 8.3 в PHP-FPM 8.4.

1
sudo cp -rL /etc/php/8.3/fpm/pool.d/* /etc/php/8.4/fpm/pool.d/

Найдите файл конфигурации, содержащий определение старого сокета.

  • Если старый сокет /var/run/php/php8.3-fpm.sock:
1
sudo grep -rl 'php8.3-fpm.sock' /etc/php/8.4/fpm/pool.d
  • Если старый сокет 127.0.0.1:9000:
1
sudo grep -rl '127.0.0.1:9000' /etc/php/8.4/fpm/pool.d

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

1
/etc/php/8.4/fpm/pool.d/www.conf

Отредактируйте файл конфигурации, заменив старый сокет новым.

  • Если старый сокет /var/run/php/php8.3-fpm.sock:
1
sudo sed -i 's|php8.3-fpm.sock|php8.4-fpm.sock|g' /etc/php/8.4/fpm/pool.d/www.conf
  • Если старый сокет 127.0.0.1:9000:
1
sudo sed -i 's|127.0.0.1:9000|127.0.0.1:9001|g' /etc/php/8.4/fpm/pool.d/www.conf

Вам также может понадобиться настроить некоторые параметры в основном файле конфигурации PHP 8.4, чтобы они соответствовали требованиям вашего веб-сайта. Общие настройки для большинства веб-сайтов PHP:

1
2
3
4
5
6
7
8
9
max_execution_time

memory_limit

post_max_size

upload_max_filesize

date.timezone

Вы можете найти необходимые настройки в основном файле конфигурации PHP 8.3 /etc/php/8.3/fpm/php.ini, а затем скопировать эти настройки в основной файл конфигурации PHP 8.4 /etc/php/8.4/fpm/php.ini.

Проверьте новую конфигурацию.

1
sudo php-fpm8.4 -t

Перезагрузите службу PHP-FPM 8.4, чтобы применить изменения.

1
sudo systemctl reload php8.4-fpm.service

Перезагрузите службу Nginx, чтобы ваш сайт работал с PHP 8.4 вместо 8.3.

1
sudo systemctl reload nginx.service

Отключите службу PHP-FPM 8.3.

1
sudo systemctl disable --now php8.3-fpm.service

Шаг 5. Проверьте установку

Откройте свой сайт в браузере. Протестируйте и убедитесь, что все функции работают должным образом.

Если вы решили удалить PHP 8.3, сделайте следующее.

Удалите папку резервной копии Nginx.

1
sudo rm -fr /etc/nginx/sites-backup

Удалите все пакеты PHP 8.3.

1
sudo apt purge php8.3* -y

Завершение

Если вам понравился этот пост о том, как обновить PHP 8.3 до 8.4 на Ubuntu 24.04, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.