Как установить PHP 8.4 и PHP-FPM на Ubuntu 24.04 Перейти к содержимому
+7 (920) 556-26-91 пн–пт: 10:00–19:00 (МСК)
Проконсультироваться Обсудить задачу

Инструкции

Как установить PHP 8.4 и PHP-FPM на Ubuntu 24.04

Установка PHP 8.4 и PHP-FPM на Ubuntu 24.04, связка с nginx через сокет, настройки для рабочего сервера и несколько версий PHP одновременно.

Как установить PHP 8.4 и PHP-FPM на Ubuntu 24.04

Короткий ответ: PHP для веб-сервера ставится не как модуль Apache, а как отдельная служба php-fpm, которая принимает запросы от nginx через сокет. Такой вариант быстрее и позволяет держать разные версии PHP для разных сайтов одновременно. Ключевые шаги: подключить репозиторий с нужной версией, установить php-fpm с набором расширений, настроить nginx на передачу .php в сокет и проверить через страницу с phpinfo().

Этот материал продолжает цикл про настройку Ubuntu 24.04 на VPS. Перед ним стоит разобраться с установкой nginx.

Установка

В штатном репозитории Ubuntu версия PHP зависит от выпуска. Если нужна конкретная версия, подключают репозиторий ondrej/php:

apt update
apt install -y software-properties-common
add-apt-repository -y ppa:ondrej/php
apt update

apt install -y php8.4-fpm php8.4-cli php8.4-mysql php8.4-pgsql 
  php8.4-curl php8.4-mbstring php8.4-xml php8.4-zip php8.4-gd 
  php8.4-intl php8.4-bcmath php8.4-redis

systemctl enable --now php8.4-fpm
php -v

Расширения ставятся отдельными пакетами — это нормально и удобно: на сервере оказывается только то, что нужно приложению.

Что за что отвечает

Пакет Назначение
php8.4-fpm Служба обработки PHP-запросов от веб-сервера
php8.4-cli Запуск PHP из командной строки: скрипты, composer, cron
php8.4-mysql Драйвер MySQL и MariaDB
php8.4-pgsql Драйвер PostgreSQL
php8.4-mbstring Корректная работа с многобайтовыми строками, включая кириллицу
php8.4-xml Работа с XML и большинством современных библиотек
php8.4-gd Обработка изображений
php8.4-intl Локализация, форматирование дат и чисел
php8.4-bcmath Точная арифметика с дробными числами
php8.4-redis Подключение к Redis

Пакеты -cli и -fpm — разные сборки с разными конфигурациями. Частая ошибка: расширение установлено, но не подключено для FPM, потому что конфигурации лежат в разных каталогах.

Где лежат настройки

Путь Назначение
/etc/php/8.4/fpm/php.ini Основные настройки для веб-запросов
/etc/php/8.4/cli/php.ini Настройки для командной строки
/etc/php/8.4/fpm/pool.d/www.conf Пул процессов: сокет, пользователь, лимиты
/etc/php/8.4/fpm/conf.d/ Подключённые расширения
/var/log/php8.4-fpm.log Журнал службы

Связка с nginx

Пул FPM слушает сокет. Путь указан в pool.d/www.conf:

listen = /run/php/php8.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

В конфигурации сайта nginx запросы к .php передаются в этот сокет:

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}

location ~ /.ht {
    deny all;
}

После правок — проверка и перезагрузка обоих:

nginx -t && systemctl reload nginx
systemctl reload php8.4-fpm

Если nginx отдаёт 502 Bad Gateway, причина почти всегда в одном из трёх: сокет не существует, у nginx нет прав на него, или путь в конфигурации указан неверно. Проверить: ls -l /run/php/ и tail -20 /var/log/php8.4-fpm.log.

Проверка

Создайте файл /var/www/example.com/info.php:

<?php phpinfo();

Откройте его в браузере: страница покажет версию PHP, подключённые расширения и значения лимитов. Удалите файл сразу после проверки — phpinfo() раскрывает конфигурацию сервера.

Настройки для рабочего сервера

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 60
display_errors = Off
log_errors = On
error_log = /var/log/php-errors.log
date.timezone = Europe/Moscow
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
Настройка Почему важна
display_errors = Off На рабочем сервере ошибки не должны попадать в ответ пользователю
post_max_size Должен быть не меньше upload_max_filesize, иначе загрузка крупных файлов не сработает
opcache.enable Кэширует скомпилированный код — самый заметный прирост скорости
date.timezone Без явного значения часть функций выдаёт предупреждения

После правки php.ini службу нужно перезагрузить: systemctl reload php8.4-fpm. Изменения применяются только при перезапуске, в отличие от файлов проекта.

Несколько версий PHP на одном сервере

Преимущество FPM в том, что версии не конфликтуют. Ставятся параллельно:

apt install -y php8.3-fpm php8.2-fpm

Каждая создаёт свой сокет /run/php/php8.3-fpm.sock и /run/php/php8.2-fpm.sock. В конфигурации конкретного сайта указывается нужный сокет — и два проекта на разных версиях PHP работают на одном сервере одновременно.

Типичные ошибки

  • Расширение не подключено для FPM. Установлено для CLI, но не для веб-запросов. Лечится phpenmod или установкой пакета с нужной привязкой.
  • Неверный путь к сокету. Ответ 502. Проверяется командой ls -l /run/php/.
  • Права на сокет. nginx не может подключиться, если владелец сокета не www-data.
  • display_errors включён на проде. Раскрывает пути и версии, помогает атакующему.
  • Забыли удалить info.php. Открытая страница с конфигурацией сервера.
  • Не перезагрузили FPM после правки php.ini. Изменения не применились.