Установка PHP 8.4 на Debian 13, 12, 11: полное руководство

PHP 8.4 — это последняя стабильная ветка PHP, выпущенная в ноябре 2024 года. Она приносит множество новых возможностей: property hooks, asymmetric visibility, обновлённое HTML5 DOM API и другие улучшения производительности. PHP 8.4 активно поддерживается до декабря 2026 года, а критическая безопасность — до декабря 2028 года.

В Debian версия PHP по умолчанию зависит от релиза:

Релиз DebianPHP по умолчаниюНужен ли Sury репозиторий
для PHP 8.4
Debian 13 (Trixie)PHP 8.4❌ Нет, устанавливается из
официальных репозиториев
Debian 12 (Bookworm)PHP 8.2✅ Да
Debian 11 (Bullseye)PHP 7.4✅ Да

В этом руководстве я покажу, как установить PHP 8.4 на Debian 13, 12 и 11 с поддержкой Apache mod_php, Apache + PHP-FPM или Nginx + PHP-FPM, а также настроить необходимые расширения.


Оглавление

Предварительные требования

Перед установкой убедитесь, что:

  • У вас есть доступ к интернету
  • Вы имеете права sudo (администратора)

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.

Ожидаемый вывод в терминале:

root

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.


Обновление системы

sudo apt update && sudo apt upgrade -y

Установка PHP 8.4 на Debian 13 (Trixie)

Debian 13 уже содержит PHP 8.4 в официальных репозиториях.

Шаг 1: Проверьте, что PHP 8.4 доступен

apt-cache policy php8.4

Ожидаемый вывод: 8.4.x из репозиториев Debian.

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

sudo apt install -y php8.4 php8.4-cli

Шаг 3: Проверьте версию

php --version

Ожидаемый вывод: PHP 8.4.x


Установка PHP 8.4 на Debian 12 и Debian 11 (через репозиторий Sury)

Debian 12 и 11 не содержат PHP 8.4 в своих стандартных репозиториях. Добавим репозиторий Sury, который поддерживает актуальные версии PHP для старых Debian.

Шаг 1: Установите зависимости

sudo apt install -y ca-certificates curl

Шаг 2: Добавьте GPG-ключ репозитория Sury

sudo curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Шаг 3: Определите кодовое имя вашего Debian

CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME")
printf 'Using suite: %s\n' "$CODENAME"

Ожидаемый вывод: bookworm (Debian 12) или bullseye (Debian 11).

Шаг 4: Добавьте репозиторий Sury (DEB822 формат)

printf '%s\n' \
  "Types: deb" \
  "URIs: https://packages.sury.org/php/" \
  "Suites: $CODENAME" \
  "Components: main" \
  "Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg" | sudo tee /etc/apt/sources.list.d/php.sources > /dev/null

Шаг 5: Обновите список пакетов

sudo apt update

Шаг 6: Проверьте, что PHP 8.4 теперь доступен

apt-cache policy php8.4

Ожидаемый вывод: Должна быть строка с packages.sury.org.

Шаг 7: Установите PHP 8.4 и CLI

sudo apt install -y php8.4 php8.4-cli

Выбор интеграции с веб-сервером

После установки базовых пакетов выберите способ интеграции PHP с веб-сервером.

МетодПакетыДля кого
Apache mod_phpapache2, libapache2-mod-php8.4Локальная разработка,
небольшие сайты
Apache + PHP-FPMapache2, php8.4-fpm, libapache2-mod-fcgidПродакшен Apache с
разделением процессов
Nginx + PHP-FPMnginx, php8.4-fpmСерверы на Nginx (LEMP)

Apache mod_php (простой способ)

sudo apt install -y apache2 libapache2-mod-php8.4
sudo systemctl restart apache2

Проверьте, что модуль PHP загружен:

sudo /usr/sbin/apache2ctl -M 2>/dev/null | grep php

Ожидаемый вывод: php_module (shared)


Apache + PHP-FPM (продакшен)

sudo apt install -y apache2 php8.4-fpm libapache2-mod-fcgid
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.4-fpm
sudo systemctl enable php8.4-fpm --now
sudo systemctl restart apache2

Проверьте, что PHP-FPM работает:

systemctl is-active php8.4-fpm
ls -l /run/php/php8.4-fpm.sock

Ожидаемый вывод: active и srw-rw---- ... php8.4-fpm.sock


Nginx + PHP-FPM (LEMP)

sudo apt install -y nginx php8.4-fpm
sudo systemctl enable php8.4-fpm --now

Добавьте в конфигурацию Nginx (в блок server { ... }):

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

Проверьте и перезагрузите Nginx:

sudo nginx -t
sudo systemctl reload nginx

Установка PHP-расширений

Большинство приложений требуют дополнительные расширения. Установите наиболее популярные:

sudo apt install -y php8.4-curl php8.4-gd php8.4-mbstring php8.4-mysql php8.4-xml php8.4-zip php8.4-intl php8.4-bcmath php8.4-imagick php8.4-redis php8.4-memcached php8.4-soap php8.4-apcu

Что делает каждое расширение (кратко):

  • php8.4-curl — работа с HTTP-запросами (например, API)
  • php8.4-gd — обработка изображений
  • php8.4-mbstring — работа с многобайтовыми строками (кириллица, UTF-8)
  • php8.4-mysql — подключение к MySQL/MariaDB
  • php8.4-xml — обработка XML, DOM (нужен для PHPUnit, Composer)
  • php8.4-zip — работа с ZIP-архивами
  • php8.4-intl — интернационализация
  • php8.4-bcmath — математические операции с произвольной точностью

⚠️ Примечание: Пакета php8.4-json не существует — JSON встроен в PHP 8.x.

Перезапустите обработчик PHP после установки расширений:

Для Apache mod_php:

sudo systemctl restart apache2

Для Apache или Nginx с PHP-FPM:

sudo systemctl restart php8.4-fpm

Проверьте, что расширения загружены:

php8.4 -m | grep -E 'curl|gd|mbstring|mysqli|xml|zip'

Проверка установки

php --version

Ожидаемый вывод: PHP 8.4.x


Обновление PHP 8.4

sudo apt update
sudo apt install --only-upgrade -y php8.4 php8.4-cli php8.4-fpm

(добавьте любые другие пакеты php8.4-*, которые вы установили)


Удаление PHP 8.4

Шаг 1: Удалите пакеты

sudo apt purge -y 'php8.4*'
sudo apt autoremove --purge -y

Шаг 2: Удалите репозиторий Sury (только для Debian 12/11)

sudo rm -f /etc/apt/sources.list.d/php.sources /usr/share/keyrings/deb.sury.org-php.gpg
sudo apt update

Шаг 3: Проверьте, что пакетов PHP 8.4 не осталось

dpkg -l 'php8.4*' 2>/dev/null | grep '^ii' || echo 'No installed php8.4 packages remain.'

Решение типичных проблем

8.1 Ошибка: Signed-By conflict с extrepo

Симптом: sudo apt update выводит ошибку о конфликте Signed-By для репозитория Sury.

Причина: Раньше вы использовали extrepo для Sury, а теперь добавляете ручной репозиторий.

Пошаговое решение:

Шаг 1: Удалите старые файлы extrepo:

sudo rm -f /etc/apt/sources.list.d/extrepo_sury.sources /var/lib/extrepo/keys/sury.asc

Шаг 2: Обновите список пакетов:

sudo apt update

8.2 Ошибка: php8.4-fpm.sock not found / 502 Bad Gateway

Симптом: Nginx возвращает 502, сокет PHP-FPM не существует.

Причина: PHP-FPM не запущен или путь в конфигурации Nginx неверный.

Пошаговое решение:

Шаг 1: Проверьте статус PHP-FPM:

systemctl status php8.4-fpm

Шаг 2: Запустите PHP-FPM:

sudo systemctl enable php8.4-fpm --now

Шаг 3: Убедитесь, что сокет существует:

ls -l /run/php/php8.4-fpm.sock

Шаг 4: Проверьте путь в конфигурации Nginx:

fastcgi_pass unix:/run/php/php8.4-fpm.sock;

8.3 Ошибка: PHPUnit требует mbstring или DOM

Симптом: При запуске PHPUnit появляется ошибка:

phpunit requires the "dom", "json", "libxml", "mbstring", ... extensions, but the "mbstring" extension is not available.

Причина: Не установлены пакеты php8.4-mbstring и php8.4-xml (который даёт DOM).

Пошаговое решение:

Шаг 1: Установите недостающие расширения:

sudo apt install -y php8.4-mbstring php8.4-xml

Шаг 2: Проверьте, что расширения загружены:

php8.4 -m | grep -E 'mbstring|dom|xmlwriter'

8.4 Ошибка: GPG key error при apt update

Симптом: sudo apt update выдаёт ошибку NO_PUBKEY.

Причина: Ключ репозитория Sury устарел или повреждён.

Пошаговое решение:

Шаг 1: Скачайте ключ заново:

sudo curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Шаг 2: Обновите список пакетов:

sudo apt update

8.5 Ошибка: PHP 8.4 не видит установленные расширения

Симптом: Расширение установлено, но php -m его не показывает.

Причина: Вы перезапустили не тот обработчик, или используется CLI с другой конфигурацией.

Пошаговое решение:

Шаг 1: Убедитесь, что вы перезапустили правильный сервис:

  • Для Apache mod_php: sudo systemctl restart apache2
  • Для PHP-FPM: sudo systemctl restart php8.4-fpm

Шаг 2: Проверьте расширение через CLI с правильным путём:

php8.4 -m | grep имя_расширения

Шаг 3: Сравните с веб-версией. Создайте файл info.php:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Откройте в браузере http://ваш-сервер/info.php и найдите расширение.

Шаг 4: Удалите info.php после проверки:

sudo rm /var/www/html/info.php

Чек-лист: что проверить после установки

  • [ ] PHP 8.4 установлен: php --versionPHP 8.4.x
  • [ ] CLI работает: php -r "echo PHP_VERSION;"8.4.x
  • [ ] Нужные расширения установлены: php -m | grep mbstring (и другие)
  • [ ] Веб-интеграция работает: создайте info.php, откройте в браузере
  • [ ] PHP-FPM (если используется): systemctl status php8.4-fpmactive
  • [ ] Сокет существует (для Nginx): ls -l /run/php/php8.4-fpm.sock

Часто задаваемые вопросы (FAQ)

Вопрос: Какая версия PHP по умолчанию в Debian 13?
Ответ: Debian 13 (Trixie) поставляется с PHP 8.4 в официальных репозиториях.

Вопрос: Нужно ли добавлять репозиторий Sury на Debian 13?
Ответ: Нет, PHP 8.4 уже есть в стандартных репозиториях.

Вопрос: Почему на Debian 12 и 11 нет PHP 8.4?
Ответ: Старые релизы Debian не обновляют версии PHP, только делают бэкпорты безопасности. Sury предоставляет свежие версии.

Вопрос: Существует ли пакет php8.4-json?
Ответ: Нет. JSON встроен в PHP 8.x.

Вопрос: Что делать, если сайт не работает после обновления с PHP 8.2 до 8.4?
Ответ: Проверьте совместимость ваших скриптов с PHP 8.4 (breaking changes). Включите отображение ошибок в php.ini:

display_errors = On
error_reporting = E_ALL

Заключение

Теперь PHP 8.4 установлен на вашем Debian. Вы можете разрабатывать современные приложения с новыми возможностями языка и улучшенной производительностью.

Что дальше?