opened image

Как установить PHP-FPM 8.* на Debian 13

 

 

Инструкция по установке 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.phpPHP 8.3 (FPM/FastCGI)

  • http://app84.example/info.phpPHP 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.