Итак, как было сказано ранее, для того, чтобы завершить подготовку необходимого для 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
Далее нам нужно скачать файл ключа https://packages.sury.org/php/apt.gpg:
после чего переходим с помощью {Ctrl, O} в наш менеджер файлов, переименовываем файл на deb.sury.org-php.gpg, так чтобы было понятно, к какому пакету он относится и перекидываем в каталог /etc/apt/trusted.gpg.d, предназначенный специально для доверенных gpg-ключей:
Далее нам потребуется в локальный репозиторий нашей системы 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:
В принципе, если вы уверены, что у вас именно 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
, убеждаемся что всё нормально, после чего запускаем установку расширения:
Далее установим ещё одно расширение mbstring, от которого зависит ряд других, с использованием ключа “-y”, позволяющего избавиться от назойливого вопроса: “Хотите продолжить? [д/н]”:
Как видите, всё прошло гладко. Теперь научимся устанавливать целый ряд крайне важных расширений одной командой:
apt install php8.1-xml php8.1-intl php8.1-imagick
Здесь мы, что естественно, привели на снимке с экрана не всю выдаваемую информацию, однако главное в том, что расширения установились без единой ошибки, о чём свидетельствует отсутствие красных строк.
И последнее, что нам нужно обязательно сделать, так это установить расширение pdo_mysql. Убедимся на всякий случай, что его ещё нет среди установленных модулей. Сделать это можно несколькими способами. Например, с помощью команды Unix Shell: php -v
или с помощью команды, выдающей более подробную информацию о конфигурации php -i
. Для того, чтобы не искать в выдаче mysql глазами, лучше воспользоваться конвейерным фильтром php -i | grep mysql
:
Если вам сложно или не удобно работать в Unix Shell, то можно создать в корне сайта специальный файл с именем phpinfo.php (он всегда пригодится) со следующим содержимым:
После этого вы в любой момент сможете получить полную информацию о параметрах PHP в вашей системе, просто запустив с браузера на выполнение этот простейший php-код по ссылке http://site-1.sysadmin.bz/phpinfo.php. При этом, что немаловажно, вы получите всю информацию, что и по команде php -i, но в значительно более привлекательном графическом виде, который легче визуально разбирать.
Здесь нужно отметить, что если какое-то расширение PHP действительно установлено, то оно появится в отдельной секции выдаваемой большой таблицы, например информация об интересующем нас расширении pdo_mysql будет содержаться в таком виде:
Кроме этого, информацию о том, задействовано ли то или иное расширение PHP в вашей конфигурации, можно получить с помощью анализа файла /etc/php/8.1/apache2/php.ini. Если в секции “Dynamic Extensions” перед записью “extension=pdo_mysql” стоит признак комментария “;”, то это значит, что оно не задействовано. Этот файл вам в дальнейшем придётся неоднократно править увеличивая значения тех или иных параметров, поэтому запомните. где он находится!
Итак, мы убедились, что нужно установить расширение pdo_mysql. Поскольку расширение затрагивает довольно много компонентов системы, то сначала запускаем обязательно apt update
и apt upgrade
, а потом уже непосредственно команду, осуществляющую все необходимые нам действия в комплексе apt install php8.1-mysql
:
После этого не забываем перезагрузить Apache командой service apache2 reload
, и убеждаемся, что в выдаче командв php -i | grep mysql
появилось всё, что нам было нужно:
На этом статью об установке и настройке 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$>
после блока <Directory> .. </Directory>.
# 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>
В этом разделе нам осталось упомянуть, как включать или отключать ту или иную установленную версию PHP для сервера Apache. Для этого у него имеются специальные команды: a2dismod
и a2enmod
. Например, чтобы отключить модуль php7.4 нужно выполнить команду a2dismod php7.4
, после чего перезагрузить Apache командой service apache2 reload
.