Руководство по установке нескольких версий PHP на Debian 13 (trixie) из репозитория Sury, с параллельной установкой разных веток и подключением к Apache через libapache2-mod-php (без PHP‑FPM).
Установка из репозитория Sury
Официальный репозиторий Debian 13 предоставляет актуальную ветку PHP (на момент релиза — 8.4). Репозиторий Sury нужен, если:
вам требуется несколько версий (например, 8.4 + 8.2 для разных проектов);
нужны устаревшие ветки (с рисками) или дополнительные сборки/модули;
вы хотите быстрее получать минорные/патч‑обновления.
В продакшене используйте поддерживаемые ветки, а старые — только изолированно и осознанно.
Предварительные условия
sudo apt update
sudo apt install -y curl ca-certificates gnupg lsb-release apache2
Проверьте кодовое имя ОС:
lsb_release -sc # должно вывести: trixie
Добавляем репозиторий PHP Sury для Debian 13 trixie
# 2.1 Импорт ключа и подготовка каталога ключей
sudo install -m 0755 -d /usr/share/keyrings
curl -fsSL https://packages.sury.org/php/apt.gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/sury-php.gpg
# 2.2 Подключаем репозиторий Sury именно для trixie
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ trixie main" \
| sudo tee /etc/apt/sources.list.d/sury-php.list
# 2.3 Обновляем индексы
sudo apt update
Важно: не используйте bookworm на Debian 13 — иначе смешаете репозитории разных релизов.
Установка нескольких версий PHP
PHP‑CLI для всех нужных веток
sudo apt install -y php8.4 php8.3 php8.2
php -v # покажет текущий CLI по умолчанию
Базовые модули (подберите по задачам)
Устанавливаем apache-модули для нужных веток (без FPM). В один момент времени Apache может использовать только один модуль
libapache2-mod-php*, но пакеты нескольких версий можно держать установленными параллельно.
sudo apt install -y \
libapache2-mod-php8.4 php8.4-cli php8.4-mysql php8.4-xml php8.4-curl php8.4-mbstring php8.4-zip php8.4-gd \
libapache2-mod-php8.3 php8.3-cli php8.3-mysql php8.3-xml php8.3-curl php8.3-mbstring php8.3-zip php8.3-gd \
libapache2-mod-php8.2 php8.2-cli php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd
Активация нужной версии в Apache (переключение между модулями)
# Пример: включить PHP 8.4 в Apache
sudo a2dismod php8.2 php8.3 2>/dev/null || true
sudo a2enmod php8.4
sudo systemctl reload apache2
# Переключиться на PHP 8.3
sudo a2dismod php8.4 php8.2 2>/dev/null || true
sudo a2enmod php8.3
sudo systemctl reload apache2
# Переключиться на PHP 8.2
sudo a2dismod php8.4 php8.3 2>/dev/null || true
sudo a2enmod php8.2
sudo systemctl reload apache2
Список активных модулей: apache2ctl -M | grep php.
Переключение версии для CLI (php в терминале)
sudo update-alternatives --config php
# при необходимости также
sudo update-alternatives --config phar
sudo update-alternatives --config phar.phar
Проверьте:
php -v
Клиентская версия CLI не влияет на то, какую версию использует Apache — это настраивается модулем
libapache2-mod-phpX.Y.
Apache + libapache2-mod-php
Apache загружает модуль libapache2-mod-phpX.Y, который обрабатывает .php внутри самого веб‑сервера. Это просто и быстро для одиночного хоста.
Виртуальные хосты (базовая схема)
При использовании libapache2-mod-php дополнительный SetHandler не требуется — обработка PHP включается самим модулем.
Достаточно стандартного vhost:
<VirtualHost *:80>
ServerName app.example
DocumentRoot /var/www/app/public
<Directory /var/www/app/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/app-error.log
CustomLog ${APACHE_LOG_DIR}/app-access.log combined
</VirtualHost>
Активируйте сайт и перезагрузите Apache:
sudo a2ensite app.example.conf
sudo systemctl reload apache2
Напоминание: одновременно может быть активен только один модуль
phpX.Yдля всего Apache. Для разных проектов с разными версиями на одном Apache без FPM это ограничение не обойти.
Nginx (замечание)
В связке с Nginx обработка PHP выполняется только через FastCGI (обычно PHP‑FPM). Поскольку в этой инструкции FPM не используем, Nginx здесь не рассматривается.
Типовые модули и php.ini
Список установленных модулей
php8.4 -m | sort
php8.3 -m | sort
php8.2 -m | sort
Настройка php.ini
Файлы для Apache‑SAPI:
/etc/php/8.4/apache2/php.ini/etc/php/8.3/apache2/php.ini/etc/php/8.2/apache2/php.ini
Часто меняют:
memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 60
После изменений перезагрузите Apache:
sudo systemctl reload apache2
Пер‑сайтные настройки
С libapache2-mod-php тонкие лимиты на сайт обычно задают через .htaccess или <Directory>/<VirtualHost> (директивы php_value, php_flag), либо через отдельные php.ini и PHPINIDir при необходимости.
Проверка работы
CLI
php -v
php8.4 -v
php8.3 -v
php8.2 -v
Через Apache (mod_php)
echo '<?php phpinfo(); ?>' | sudo tee /var/www/app/public/info.php >/dev/null
curl -s http://app.example/info.php | head
Страница должна показывать активную версию PHP, соответствующую включённому модулю phpX.Y.
Обновления и приоритеты
Обновляйте пакеты регулярно:
sudo apt update && sudo apt upgradeЕсли хотите, чтобы пакеты PHP предпочитались из Sury, настройте
APT Pinning:sudo tee /etc/apt/preferences.d/99-sury <<'EOF' Package: * Pin: origin packages.sury.org Pin-Priority: 700 EOFПроверьте приоритеты:
apt-cache policy php8.4.
Безопасность и эксплуатация
Оставляйте активным только один модуль PHP: лишние версии держите установленными, но выключенными (
a2dismod).Минимизируйте набор расширений: ставьте модули только для используемой версии.
Следите за
open_basedir,disable_functionsи правами на файлы/каталоги.Удаляйте
info.phpпосле проверки.Для проектов, требующих разных версий одновременно, рассмотрите изоляцию по vhost’ам на разных Apache-инстансах, контейнерах или переход на FPM.
Устранение неполадок
PHP не обрабатывается (скачивается файл): модуль не активен. Проверьте
apache2ctl -M | grep phpи включите нужныйa2enmod phpX.Y.Не та версия в вебе: отключите старый модуль
a2dismod php*, включите нужныйa2enmod phpX.Y, затемsystemctl reload apache2.CLI показывает другую версию: переключите через
update-alternatives --config php.Конфликты директив: проверьте
.htaccessи<Directory>. Для критичных настроек используйте виртуальные хосты.Модули «не видны»: ставьте расширение именно для используемой ветки (
php8.3-xml≠php-xml).
Чек‑лист запуска в продакшн
В репозиториях подключён Sury для trixie (правильное кодовое имя).
Установлены требуемые версии PHP и соответствующие libapache2-mod-phpX.Y.
Активен ровно один модуль PHP в Apache (
a2enmod phpX.Y), ненужные отключены (a2dismod).Виртуальные хосты развернуты,
AllowOverride/Rewriteнастроены.Страницы
phpinfo()проверены и удалены.Логи и мониторинг Apache/модулей включены.
Итоги
Репозиторий Sury на Debian 13 (trixie) позволяет держать несколько версий PHP параллельно и быстро переключаться между ними в CLI и на уровне Apache через libapache2-mod-php (без использования PHP‑FPM).
Помните об ограничении: Apache может загружать только один модуль PHP одновременно. Для сценариев, где проекты требуют разные версии одновременно на одном хосте, используйте изоляцию (отдельные инстансы/контейнеры) — либо переходите на FPM.