Как установить php fpm

Как установить php fpm

PHP FPM (FastCGI Process Manager) – это альтернативный способ обработки PHP-скриптов, обеспечивающий лучшую производительность по сравнению с классическим модулем mod_php. Он особенно эффективен при высокой нагрузке и используется в связке с веб-серверами Nginx или Apache (через модуль proxy_fcgi).

Перед установкой убедитесь, что система обновлена: sudo apt update && sudo apt upgrade для Debian-подобных систем или sudo dnf update для дистрибутивов на базе RHEL. Для Ubuntu и Debian установка выполняется командой sudo apt install php-fpm. В CentOS, AlmaLinux и других RPM-системах: sudo dnf install php-fpm.

После установки необходимо включить и запустить службу: sudo systemctl enable php-fpm && sudo systemctl start php-fpm. Проверьте её статус командой systemctl status php-fpm. По умолчанию конфигурационный файл находится в /etc/php/<версия>/fpm/php-fpm.conf или /etc/php-fpm.conf в зависимости от дистрибутива.

Для настройки пула процессов откройте файл www.conf в директории /etc/php/<версия>/fpm/pool.d/. Обратите внимание на параметры listen, pm, pm.max_children, pm.start_servers и pm.max_requests – они напрямую влияют на производительность и потребление ресурсов.

Если PHP FPM используется с Nginx, убедитесь, что в конфигурации сервера указан правильный сокет или порт, например: fastcgi_pass unix:/run/php/php8.2-fpm.sock; или fastcgi_pass 127.0.0.1:9000;. Проверьте права доступа к сокету, чтобы избежать ошибок 502 Bad Gateway.

Проверка текущей версии PHP и наличия FPM в системе

Для проверки установленной версии PHP выполните команду:

php -v

PHP 8.2.6 (cli) (built: May 1 2023 12:00:00) (NTS)

Чтобы убедиться в наличии PHP-FPM, выполните:

php-fpm -v

Если установлен PHP-FPM, вы увидите версию с указанием FPM. Например:

PHP 8.2.6 (fpm-fcgi) (built: May 1 2023 12:00:00)

Если команда php-fpm не найдена, проверьте наличие пакета через системный менеджер пакетов:

Debian/Ubuntu:

dpkg -l | grep php | grep fpm

RHEL/CentOS/AlmaLinux:

rpm -qa | grep php | grep fpm

Также можно проверить запущен ли FPM-сервис:

systemctl status php8.2-fpm

Или, если версия отличается:

systemctl list-units —type=service | grep fpm

В случае отсутствия пакета или сервиса, PHP-FPM не установлен и требует установки соответствующего пакета, например php8.2-fpm.

Установка необходимых репозиториев для получения актуальной версии PHP

Установка необходимых репозиториев для получения актуальной версии PHP

В дистрибутивах Debian и Ubuntu штатные репозитории содержат устаревшие версии PHP. Для установки актуального релиза необходимо подключить репозиторий от Sury:

Debian:

Установите необходимые зависимости:

apt update
apt install -y apt-transport-https lsb-release ca-certificates wget gnupg2

Импортируйте ключ и добавьте репозиторий:

wget -qO - https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/sury-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update

Ubuntu:

Установите software-properties-common и подключите PPA:

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

RHEL, CentOS, AlmaLinux, Rocky Linux:

Установите Remi и EPEL репозитории:

dnf install -y epel-release
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E '%rhel')-latest.rpm
dnf module enable -y php:remi-8.2

После подключения репозиториев можно устанавливать нужную версию PHP и PHP-FPM через пакетный менеджер дистрибутива.

Установка PHP-FPM через пакетный менеджер

Установка PHP-FPM через пакетный менеджер

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

sudo apt update && sudo apt upgrade -y   # Debian/Ubuntu
sudo dnf upgrade --refresh -y           # Fedora
sudo pacman -Syu                        # Arch

Для установки PHP-FPM используйте команды, соответствующие вашему дистрибутиву:

Дистрибутив Команда установки
Debian, Ubuntu sudo apt install php-fpm
Fedora sudo dnf install php-fpm
CentOS 8 / AlmaLinux / RHEL sudo dnf module enable php:remi-8.2 -y
sudo dnf install php-fpm
Arch Linux sudo pacman -S php

После установки проверьте статус сервиса:

sudo systemctl status php-fpm

Для запуска и включения автозапуска:

sudo systemctl enable --now php-fpm

Конфигурационный файл по умолчанию:

  • /etc/php/8.2/fpm/php-fpm.conf – Ubuntu, Debian
  • /etc/php-fpm.conf – Fedora, CentOS, RHEL
  • /etc/php/php-fpm.conf – Arch Linux

Пулы находятся в:

  • /etc/php/8.2/fpm/pool.d/

Проверьте наличие сокета для взаимодействия с веб-сервером:

sudo ss -l | grep php

Настройка пула процессов в конфигурационном файле php-fpm

Конфигурационные файлы пулов находятся в директории /etc/php-fpm.d/ или /etc/php/<версия>/fpm/pool.d/. Каждый файл описывает параметры одного пула. По умолчанию используется файл www.conf.

Для изменения количества процессов укажите параметры:

pm – определяет режим управления процессами. Возможные значения:

  • static – фиксированное количество дочерних процессов;
  • dynamic – количество процессов изменяется в зависимости от нагрузки;
  • ondemand – процессы запускаются по мере необходимости и завершаются при простое.

При использовании pm = dynamic необходимо указать:

pm.max_children – максимальное число процессов. Например: pm.max_children = 20.

pm.start_servers – количество процессов, создаваемых при запуске. Пример: pm.start_servers = 5.

pm.min_spare_servers и pm.max_spare_servers – минимальное и максимальное количество «резервных» процессов. Например: pm.min_spare_servers = 3, pm.max_spare_servers = 10.

Для pm = ondemand настройте:

pm.max_children – как и в других режимах.

pm.process_idle_timeout – время (в секундах), через которое неактивный процесс завершается. Пример: pm.process_idle_timeout = 10s.

Убедитесь, что значения параметров соответствуют возможностям сервера. Например, на сервере с 2 ГБ ОЗУ установка pm.max_children = 50 приведёт к нехватке памяти при высоком трафике. Ориентируйтесь на среднее потребление памяти одним PHP-процессом (обычно от 20 до 50 МБ) при расчёте лимитов.

После внесения изменений перезапустите службу: systemctl restart php-fpm или systemctl restart php<версия>-fpm.

Изменение владельца и прав доступа к сокету php-fpm

Изменение владельца и прав доступа к сокету php-fpm

Сокет php-fpm по умолчанию создаётся с владельцем и правами, заданными в конфигурационном файле пула. Эти параметры необходимо настроить для обеспечения работы с веб-сервером (например, Nginx) и ограничения доступа.

Откройте файл пула PHP-FPM, обычно расположенный по пути /etc/php/8.1/fpm/pool.d/www.conf (уточните версию PHP):

sudo nano /etc/php/8.1/fpm/pool.d/www.conf
  • Проверьте или задайте путь до сокета:
    listen = /run/php/php8.1-fpm.sock
  • Установите владельца и группу сокета:
    listen.owner = www-data
    listen.group = www-data
  • Задайте права доступа:
    listen.mode = 0660

Параметр 0660 означает доступ на чтение и запись для владельца и группы. Если Nginx работает от имени пользователя nginx, укажите соответствующую группу, например:

listen.group = nginx

После внесения изменений перезапустите php-fpm:

sudo systemctl restart php8.1-fpm

Убедитесь, что сокет создан с нужными правами:

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

При использовании SELinux или AppArmor проверьте контексты и профили, так как они могут блокировать доступ к сокету даже при корректных правах файловой системы.

Интеграция PHP-FPM с Nginx или Apache

Интеграция PHP-FPM с Nginx или Apache позволяет эффективно обрабатывать динамический контент, обеспечивая высокую производительность и гибкость настройки. Рассмотрим особенности настройки для каждой из этих веб-серверов.

Для Nginx необходимо указать PHP-FPM как бэкенд для обработки PHP-запросов. В конфигурации Nginx создается блок для проксирования запросов на PHP-FPM-сервер. Пример настройки:

server {
listen 80;
server_name example.com;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}

Здесь fastcgi_pass указывает на адрес PHP-FPM, а fastcgi_param SCRIPT_FILENAME определяет путь к скриптам. Важно удостовериться, что PHP-FPM работает на порту 9000 или другом настроенном порту.

Для Apache настройка PHP-FPM осуществляется с использованием модуля proxy_fcgi. В файле конфигурации сервера необходимо указать проксирование запросов на PHP-FPM:


DocumentRoot /var/www/html
ServerName example.com

SetHandler "proxy:fcgi://127.0.0.1:9000"


В этом случае SetHandler "proxy:fcgi://127.0.0.1:9000" указывает, что запросы на файлы с расширением .php будут проксироваться к PHP-FPM через указанный адрес.

При использовании Apache важно убедиться в наличии модулей proxy, proxy_fcgi и setenvif, которые могут быть активированы через a2enmod.

Обе настройки требуют, чтобы PHP-FPM был правильно настроен на сервере, с учетом соответствующих прав и параметров конфигурации в php-fpm.conf и www.conf.

Перезапуск служб и проверка статуса php-fpm

Перезапуск служб и проверка статуса php-fpm

Для перезапуска службы php-fpm на сервере с Linux используется команда:

sudo systemctl restart php-fpm

Если вы используете несколько версий PHP, убедитесь, что указываете правильную версию в названии сервиса, например:

sudo systemctl restart php7.4-fpm

Чтобы проверить текущий статус службы php-fpm, выполните команду:

sudo systemctl status php-fpm

Вы получите информацию о текущем состоянии службы, включая её активность, количество запущенных процессов и возможные ошибки. Для проверки статуса конкретной версии PHP используйте:

sudo systemctl status php7.4-fpm

Если служба не запускается или завершает работу с ошибками, просмотрите журнал с помощью команды:

sudo journalctl -xe | grep php-fpm

Это поможет идентифицировать причины отказа службы. Для более подробной диагностики также можно использовать команду:

sudo systemctl -l status php-fpm

Для перезагрузки конфигурации без остановки службы используйте команду:

sudo systemctl reload php-fpm

Если служба работает некорректно, попробуйте перезапустить её с очисткой кеша сессий PHP:

sudo systemctl restart php-fpm && sudo systemctl restart nginx

Диагностика ошибок при запуске и работе php-fpm

Диагностика ошибок при запуске и работе php-fpm

При возникновении проблем с запуском или работой php-fpm, важно точно определить причину. Основные шаги диагностики включают проверку логов, конфигурационных файлов и тестирование различных компонентов системы.

1. Проверка логов php-fpm

Первый шаг – это проверка логов. Обычно ошибки php-fpm можно найти в следующих файлах:

  • /var/log/php-fpm.log
  • /var/log/syslog
  • /var/log/messages

Если в логе php-fpm присутствуют ошибки, то они могут подсказать о проблемах с конфигурацией, правами доступа или ресурсами системы.

2. Ошибки конфигурации

Часто ошибки возникают из-за неправильных настроек в конфигурационных файлах. Проверка следующих параметров может помочь:

  • user и group в файле /etc/php/7.x/fpm/pool.d/www.conf. Убедитесь, что указанные пользователи и группы существуют на сервере.
  • listen – настройте корректный адрес и порт, если используется сокет, проверьте наличие прав на его создание.
  • pm.max_children – значение должно соответствовать возможностям сервера, чтобы избежать переполнения очереди задач.

Для проверки правильности конфигурации используйте команду:

php-fpm -t

3. Проверка прав доступа

Некорректные права доступа могут привести к ошибкам при запуске или работе php-fpm. Убедитесь, что:

  • Директория для сокетов имеет правильные права доступа (обычно 755).
  • Пользователь, под которым работает php-fpm, имеет права на чтение и запись в нужных каталогах, например, для кеширования.
  • Убедитесь, что права доступа к файлам конфигурации соответствуют требованиям безопасности.

4. Проблемы с памятью и ресурсами

В случае перегрузки php-fpm или при недостатке системных ресурсов (например, памяти) наблюдаются сбои. Следующие параметры могут помочь контролировать использование ресурсов:

  • pm.max_requests – количество запросов, после которого рабочий процесс будет перезапущен. Если приложение генерирует большое количество ошибок, это может предотвратить утечку памяти.
  • Использование ulimit для увеличения лимитов на количество процессов и открытых файлов.
  • Мониторинг использования памяти с помощью инструментов, таких как top, htop или free.

5. Проверка взаимодействия с сервером web

Ошибки могут возникать из-за некорректной настройки взаимодействия php-fpm с сервером web (например, Nginx или Apache). Важно проверить:

  • Настройки в конфигурации сервера для правильного проксирования запросов на php-fpm.
  • Наличие ошибок в логах web-сервера, которые могут указывать на неправильные настройки для обработки PHP.
  • Использование правильного сокета или порта для связи php-fpm с веб-сервером.

6. Проверка зависимости от других сервисов

Ошибка php-fpm может быть связана с другими сервисами, такими как базы данных или кэш-сервисы. Проверьте:

  • Доступность и корректность работы баз данных, на которые ссылается PHP-приложение.
  • Конфигурацию кэширования (например, Redis или Memcached), если используется для ускорения работы приложения.
  • Настройки файрвола и безопасности, которые могут блокировать связи между php-fpm и другими сервисами.

После выполнения этих шагов вы сможете сузить круг возможных проблем и найти источник ошибки.

Вопрос-ответ:

Что такое PHP-FPM и зачем его устанавливать на сервер с Linux?

PHP-FPM (FastCGI Process Manager) — это альтернатива стандартному модулю PHP для Apache. Он используется для обработки PHP-запросов с более высокой производительностью и гибкостью. На сервере с Linux его обычно устанавливают для оптимизации работы веб-приложений, особенно тех, которые требуют быстрого отклика при высокой нагрузке. PHP-FPM позволяет лучше управлять процессами PHP, конфигурировать их под конкретные задачи и повысить стабильность работы сайтов.

Какие настройки конфигурации важны при установке PHP-FPM?

После установки PHP-FPM стоит настроить файл конфигурации, который находится по пути `/etc/php/7.4/fpm/php-fpm.conf` или аналогичному для вашей версии PHP. Важно указать параметры, связанные с количеством рабочих процессов (например, `pm.max_children`), пределами памяти, а также настройками логирования. В файле `/etc/php/7.4/fpm/pool.d/www.conf` можно настроить параметры для каждого пула процессов, такие как `listen` (адрес сокета), `user` и `group` (пользователь и группа), а также лимиты на ресурсы. Эти настройки помогают сбалансировать нагрузку и улучшить производительность сервера.

Что делать, если PHP-FPM не запускается после установки?

Если PHP-FPM не запускается, следует проверить несколько вещей. Во-первых, посмотрите логи PHP-FPM, которые обычно находятся в каталоге `/var/log/php-fpm.log` или `/var/log/syslog`. Ошибки в этих логах могут указать на проблему, такую как неправильные права доступа, ошибки в конфигурации или недостаток системных ресурсов. Во-вторых, проверьте настройки конфигурации, например, файлы `php-fpm.conf` и `www.conf` на наличие синтаксических ошибок. Если проблема связана с ресурсами, увеличьте лимиты на количество процессов или памяти в конфигурации. После внесения изменений перезапустите PHP-FPM командой `systemctl restart php7.4-fpm`.

Ссылка на основную публикацию