Итак, как было сказано ранее, для того, чтобы завершить подготовку необходимого для WordPress операционного окружения, нам осталось установить серверный язык PHP. Давайте приступим к этой задаче.

Вообще говоря, PHP можно установить одной командой: apt install php, но тогда поиск пакетов будет осуществляться в основном репозитории Debian GNU/Linux 11, а там самой последней версией будет 7.4.

Пакеты же реально последней существующей на данный момент версии PHP размещаются в отдельном репозитории, который ведёт Ondřej Surý, по адресу: https://packages.sury.org/php/dists/bullseye/main/debian-installer/binary-amd64/ и они подписаны цифровой подписью GnuPG (GNU Privacy Guard) версии 2, поддержку которой мы в нашей системе ещё не ставили, поэтому, первым делом запускаем команду установки соответствующего модуля (пакета):

apt install gnupg2

Установка GnuPG 2Далее нам нужно скачать файл ключа https://packages.sury.org/php/apt.gpg:Скачиваем файл ключа GnuPG 2

после чего переходим с помощью {Ctrl, O} в наш менеджер файлов, переименовываем файл на deb.sury.org-php.gpg, так чтобы было понятно, к какому пакету он относится и перекидываем в каталог /etc/apt/trusted.gpg.d, предназначенный специально для доверенных gpg-ключей:Размещение файла ключа к цифровой подписи GnuPG 2

Далее нам потребуется в локальный репозиторий нашей системы Debian GNU/Linux 11 вписать ссылку на репозиторий Surý, то есть как бы интегрировать его, но для того, чтобы сделать это автоматически и безошибочно, нужно будет запустить скрипт, определяющий код реальной версии Debian GNU/Linux, работающей у вас на машине с помощью модуля “lsb-release”, поэтому сначала нужно будет установить его и некоторые другие разрешающие зависимости пакеты командой:

apt install -y lsb-release ca-certificates apt-transport-https software-properties-common

Теперь можно запустить и сам shell-скрипт:

sh -c 'echo "deb [signed-by=/etc/apt/trusted.gpg.d/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

выглядящий несколько замысловато, но проделывающий очень простую работу по добавлению нового файла php.list с одной строкой в каталог /etc/apt/sources.list.d:Интеграция репозитория deb.sury.org в Debian Linux 11

В принципе, если вы уверены, что у вас именно bullseye, то проще создать такой файл вручную с помощью того же Midnigh Commander. Заметим, что узнать, какая именно версия Linux у вас стоит проще всего с помощью команлы hostnamectl (без указания каких либо параметров).

Как бы всё, подготовка к установке закончена, запускаем теперь обязательно команду: apt update, а затем apt upgrade (если предыдущая команда указала на возможность что-то реально обновить), после чего apt install php8.1, и если вы всё до этого делали правильно, то пакет установится без ошибок и предупреждений.

Установка поддержки самого PHP очень важна, но недостаточна. Для подавляющего большинства приложений нужны будут модули расширений. Мы продемонстрируем здесь установку некоторых наиболее важных из них, так чтобы было понятно, как, в случае необходимости, устанавливать другие.

Вопрос расширений php, которые могут потребоваться для WordPress, обсуждается на следующей странице официальной документации CMS https://make.wordpress.org/hosting/handbook/server-environment/, где рекомендуется установить как минимум 23 расширения. Мы считаем, что некоторые из них вам могут никогда не понадобиться, однако помните, что если WordPress ведёт себя неадекватно, то первое, что должно мелькнуть в ваших мыслях, а не нуждается ли он в каком-либо расширении php, которое ещё не установлено.

Давайте, для примера, сначала установим одно расширение, позволяющее работать с zip-архивами. Делается это простой командой: apt install php8.1-zip. На следующем снимке с экрана мы проверяем на всякий случай, всё ли хорошо у нас было с установкой сервера PHP 8.1 командой: php -v, убеждаемся что всё нормально, после чего запускаем установку расширения:Установка расширения php на сервер

Далее установим ещё одно расширение mbstring, от которого зависит ряд других, с использованием ключа “-y”, позволяющего избавиться от назойливого вопроса: “Хотите продолжить? [д/н]”:

Установка расширения php-mbstring

Как видите, всё прошло гладко. Теперь научимся устанавливать целый ряд крайне важных расширений одной командой:

apt install php8.1-xml php8.1-intl php8.1-imagick Установка нескольких расширений php одной командой

Здесь мы, что естественно, привели на снимке с экрана не всю выдаваемую информацию, однако главное в том, что расширения установились без единой ошибки, о чём свидетельствует отсутствие красных строк.

И последнее, что нам нужно обязательно сделать, так это установить расширение pdo_mysql. Убедимся на всякий случай, что его ещё нет среди установленных модулей. Сделать это можно несколькими способами. Например, с помощью команды Unix Shell: php -v или с помощью команды, выдающей более подробную информацию о конфигурации php -i. Для того, чтобы не искать в выдаче mysql глазами, лучше воспользоваться конвейерным фильтром php -i | grep mysql:

Проверяем список установленных расширений php

Если вам сложно или не удобно работать в Unix Shell, то можно создать в корне сайта специальный файл с именем phpinfo.php (он всегда пригодится) со следующим содержимым:

Пишем самую первую программу на php, выводящую всю информацию о параметрах php в вашей системе.

После этого вы в любой момент сможете получить полную информацию о параметрах PHP в вашей системе, просто запустив с браузера на выполнение этот простейший php-код по ссылке http://site-1.sysadmin.bz/phpinfo.php. При этом, что немаловажно, вы получите всю информацию, что и по команде php -i, но в значительно более привлекательном графическом виде, который легче визуально разбирать.

Здесь нужно отметить, что  если какое-то расширение PHP действительно установлено, то оно появится в отдельной секции выдаваемой большой таблицы, например информация об интересующем нас расширении pdo_mysql будет содержаться в таком виде:

Информация, выдаваемая о расширении pdo_mysql с помощью phpinfo();

Кроме этого, информацию о том, задействовано ли то или иное расширение PHP в вашей конфигурации, можно получить с помощью анализа файла /etc/php/8.1/apache2/php.ini. Если в секции “Dynamic Extensions” перед записью “extension=pdo_mysql” стоит признак комментария “;”, то это значит, что оно не задействовано. Этот файл вам в дальнейшем придётся неоднократно править увеличивая значения тех или иных параметров, поэтому запомните. где он находится!

Итак, мы убедились, что нужно установить расширение pdo_mysql. Поскольку расширение затрагивает довольно много компонентов системы, то сначала запускаем обязательно apt update и apt upgrade, а потом уже непосредственно команду, осуществляющую все необходимые нам действия в комплексе apt install php8.1-mysql:

Устанавливаем расширения MySQL для PHP

После этого не забываем перезагрузить Apache командой service apache2 reload, и убеждаемся, что в выдаче командв php -i | grep mysql появилось всё, что нам было нужно:

Проверка установки расширений MySQL для PHP

На этом статью об установке и настройке PHP, как о компоненте LAMP, казалось, можно было бы и закончить. Однако, довольно часто на практике требуется иметь на одном сервере Apache как минимум две версии php! Поэтому мы далее рассмотрим, как это реализовать.

Отметим здесь сразу, что в Linux есть специальная команда update-alternatives, предназначенная для того, чтобы настраивать запуск вообще говоря разных программ под неким общим названием. Их называют альтернативами. Простейший пример – это различные редакторы текстов. Например, для выбора редактора текста по умолчанию нужно запустить команду sudo update-alternatives --config editor.

Давайте установим ещё и PHP 7.4. Для этого (если мы всё вышеописанное делали верно) достаточно запустить команду sudo apt -y install php7.4. Если теперь запустить команду sudo update-alternatives --config php, то в списке выбора появится и эта версия.

Но это ещё не всё. В стандартном вариантие использования LAMP мы,  хотя и имеем установленными разные версии PHP, использовать можем только ту, которая задана по умолчанию. Для того, чтобы одновременно использовать для разных приложений разные версии PHP их нужно будет каким-то образом развести, чем мы ниже и займёмся.

Для начала установим для версии 7.4 минимально необходимый набор расширений для организации одновременной работы с другими версиями командой sudo apt -y install php7.4-fpm php7.4-mysql libapache2-mod-php7.4 libapache2-mod-fcgid. Соответствующей командой нужно будет установить эти же расширения (за исключением уже установленных ранее) и для нашей основной версии 8.1 apt -y install php8.1-fpm libapache2-mod-php8.1.

Установка того или иного модуля ещё не означает, что он работает. Приступим к процедуре активации. Для этого сначала запустим службы FastCGI Process Manager, реализующие функцию интерпретаторов PHP для соответствующих версий командами: service php7.4-fpm start и service php8.1-fpm start. Если команды выполнились безмолвно, то скорее всего сервис запустился, но для пущей убедительности можно проверить это соответствующими командами: service php7.4-fpm status и service php8.1-fpm status.

Следующий шаг – активация необходимых дополнительных модулей Apache командой: sudo a2enmod actions fcgid alias proxy_fcgi, и последующий полный перезапуск сервера командой: sudo systemctl restart apache2, ну или как мы больше привыкли, командой service apache2 restart.

Ну и последний, можно сказать, самый главный момент, который определяет, что данный конкретный сайт будет использовать отличную от используемой по умолчанию версию PHP, заключается в добавлении в конфигурацию виртуального хоста сервера Apache специального блока:
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
после блока <Directory> .. </Directory>.

В этом разделе нам осталось упомянуть, как включать или отключать ту или иную установленную версию PHP для сервера Apache. Для этого у него имеются специальные команды: a2dismod и a2enmod. Например, чтобы отключить модуль php7.4 нужно выполнить команду a2dismod php7.4, после чего перезагрузить Apache командой service apache2 reload.