
Инструкция по установке PHP‑FPM на Debian 13 (trixie): официальный репозиторий (PHP 8.4), мульти‑версии через Sury, настройка пулов, интеграция с Apache (proxy_fcgi) и Nginx (fastcgi_pass), переключение версий, безопасность, мониторинг и устранение неполадок.
Почему PHP‑FPM
Совместим с современными веб‑серверами (Apache mpm_event, Nginx).
Позволяет изолировать проекты разными пулами и/или версиями.
Гибкие лимиты ресурсов (per‑pool), сокеты/порты, перезапуски без даунтайма.
Обновим ОС и установим некоторые пакеты
sudo apt update
sudo apt install -y curl ca-certificates gnupg lsb-release
lsb_release -sc # должно вывести: trixie
Вариант A — официальный репозиторий (PHP 8.4)
Установка
sudo apt update
sudo apt install -y php-fpm php-cli php-mysql php-xml php-curl php-mbstring php-zip php-gd
php -v
systemctl --no-pager status php8.4-fpm
По умолчанию будет установлен php8.4-fpm и запущен сервис.
Базовые пути
Конфиг FPM:
/etc/php/8.4/fpm/php-fpm.confГлобальные настройки PHP:
/etc/php/8.4/fpm/php.iniПулы:
/etc/php/8.4/fpm/pool.d/*.confСокет по умолчанию:
/run/php/php8.4-fpm.sock
Вариант B — мульти‑версии через Sury (8.4 + 8.3 + 8.2)
Подключение Sury для trixie
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
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
sudo apt update
Установка нескольких веток FPM/CLI
sudo apt install -y \
php8.4-fpm php8.4-cli php8.4-mysql php8.4-xml php8.4-curl php8.4-mbstring php8.4-zip php8.4-gd \
php8.3-fpm php8.3-cli php8.3-mysql php8.3-xml php8.3-curl php8.3-mbstring php8.3-zip php8.3-gd \
php8.2-fpm php8.2-cli php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd
sudo systemctl enable --now php8.4-fpm php8.3-fpm php8.2-fpm
Пулы и сокеты (по умолчанию):
/run/php/php8.4-fpm.sock/run/php/php8.3-fpm.sock/run/php/php8.2-fpm.sock
Переключение версии для CLI (не влияет на веб)
sudo update-alternatives --config php
php -v
Как запустить несколько версий одновременно
Нам нужно, чтобы разные сайты ходили в разные сокеты. Ниже — минимальные конфиги без создания пользовательских пулов.
Nginx (fastcgi_pass)
sudo apt install -y nginx
- Сайт на PHP 8.2 —
/etc/nginx/sites-available/app82:
server {
listen 80;
server_name app82.example;
root /var/www/app82/public;
index index.php index.html;
location / { try_files $uri $uri/ /index.php?$args; }
location ~ \\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
- Сайт на PHP 8.3 —
/etc/nginx/sites-available/app83(аналогично, поменяйте сокет наphp8.3-fpm.sock). - Сайт на PHP 8.4 —
/etc/nginx/sites-available/app84(сокетphp8.4-fpm.sock).
Активация и проверка:
sudo ln -s /etc/nginx/sites-available/{app82,app83,app84} /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Идея: каждый сайт проксируется в свой версионный сокет FPM. Версии работают параллельно и не мешают друг другу.
Проверка
echo '<?php phpinfo(); ?>' | sudo tee /var/www/app82/public/info.php >/dev/null
echo '<?php phpinfo(); ?>' | sudo tee /var/www/app83/public/info.php >/dev/null
echo '<?php phpinfo(); ?>' | sudo tee /var/www/app84/public/info.php >/dev/null
Откройте:
http://app82.example/info.php→ должна быть PHP 8.2 (FPM/FastCGI)http://app83.example/info.php→ PHP 8.3 (FPM/FastCGI)http://app84.example/info.php→ PHP 8.4 (FPM/FastCGI)
Важно: Удалите
info.phpпосле проверки.
Мини‑настройки php.ini (по желанию)
Файлы версионно‑зависимые:
/etc/php/8.4/fpm/php.ini/etc/php/8.3/fpm/php.ini/etc/php/8.2/fpm/php.ini
Часто меняют:
memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 60
После изменений перезагрузите соответствующую службу:
sudo systemctl reload php8.4-fpm php8.3-fpm php8.2-fpm
Устранение неполадок (кратко)
502 Bad Gateway (Nginx)/AH01079 (Apache): FPM не запущен или указан неверный путь к сокету. Проверьте
systemctl status php8.X-fpmиfastcgi_pass/SetHandler.PHP скачивается как файл: для Apache убедитесь, что
libapache2-mod-phpвыключен (a2dismod php*) и включёнproxy_fcgi. Для Nginx проверьтеlocation ~ \\.php$.Все сайты показывают одну версию: проверьте, какой сокет подключён в каждом vhost/server‑block.
CLI «не та» версия: переключите
update-alternatives --config php— это не влияет на веб.
Чек‑лист запуска
Установлены
php8.4-fpm, при необходимостиphp8.3-fpmиphp8.2-fpm; службы включены и запущены.Apache:
proxy_fcgiвключён,libapache2-mod-phpотключён; Nginx: серверные блоки указывают на правильные сокеты.Каждый сайт ссылается на свой сокет:
php8.2-fpm.sock,php8.3-fpm.sock,php8.4-fpm.sock.phpinfo()показывает разные версии на разных сайтах; тестовые файлы удалены.(Опционально) Мини‑настройки
php.iniвнесены и примененыsystemctl reload php8.X-fpm.Логи ошибок веб‑сервера чистые;
systemctl status php8.X-fpmбез красных строк.
Итоги
Чтобы запустить несколько версий PHP‑FPM одновременно на Debian 13, достаточно установить нужные пакеты 8.4/8.3/8.2 и привязать сайты к стандартным сокетам версий. Дополнительные кастомные пулы не обязательны — базовой схемы вполне достаточно для большинства задач и быстрой миграции проектов между ветками PHP.