Тестовое задание. lamp + php 7 + php 8

Автор: | 16 декабря 2024

Стало интересно проверить свои знания и навыки и я откликнулся на вакансию Ведущий системный администратор. Мне сообщили, что скоро будет выслано тестовое задание, которое нужно выполнить в течение часа. Ну а спустя некоторое время пришло вот такое вот задание:

Добрый день!
В продолжении разговора направляем Вам тестовое задание.
Поставьте и настройте lamp +  php 7 + php 8. Предоставьте ссылки по
http с указанными версиями php. Например, http://192.168.1.135/7.php и http://192.168.1.135/8.php
*** SSH ***
username: root
password: *********
Результат отправьте ответным письмом.

Зайдя по ssh я увидел такую вот виртуалку.

Меня это немного смутило — с AlmaLinux я еще не сталкивался. Когда то давно любил очень Федорушку, но потом как то все перетекло в Debian/Ubuntu и все чаще использовался Nginx. Поэтому данная статься может быть не интересна тем, кто постоянно работает с такой системой и апачем. Я же решил поковыряться и заодно описать что и как получилось. Так что не обессудьте...

Скажу сразу — задание за час я не выполнил — апач и обе версии php я установил и запустил, но потом пошел по пути виртуальных хостов (по привычке уже), понял что действую не так. Время рабочее, приходилось отвлекаться. Поэтому по прошествии часа я ответил на письмо, написал что не справился и поблагодарил за интересное задание. А уже вечером скачал свежий дистрибутив Almalinux и запустил на нем виртуалку. Открыл мануалы по апачу и сделал все вот так вот.

Моя виртуалка немного отличалась версией, но не критично.

Ставим Apache и добавляем правила для файрвола.

dnf -y install httpd
firewall-cmd --add-service=http
firewall-cmd --runtime-to-permanent

Делаем небольшие правки в файле /etc/httpd/conf/httpd.conf

# line 100 : изменим на свое имя сервера
ServerName www.my.home:80
# line 149 : Меняем строку, нужно убрать Indexes
Options FollowSymLinks
# line 156 : Меняем с none на All
AllowOverride All
# line 169 : добавим индексный файл с расширением php
DirectoryIndex index.html index.php

Этого хватит, рестартуем апач и проверяем его состояние.

systemctl restart httpd
systemctl status httpd

Проверка статуса веб сервера Apache

С апачем пока все, ставим две версии php — 7.4 и 8.4

Для начала добавим репозиторий remi и проверим какие версии и модули php нам доступны

sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module list php

Получаем что-то вроде этого:

Отлично, идем дальше.

Выключаем модуль php и включаем модуль php:remi-7.4 и после этого ставим дополнительные компоненты php74 и php74-php-fpm

sudo dnf module reset php
sudo dnf module enable php:remi-7.4
sudo dnf install php74 php74-php-fpm -y

Устанавливаем php7.4 и дооплнительные модули для него.

И теперь тоже самое для версии 8.4

sudo dnf module reset php
sudo dnf module enable php:remi-8.4
sudo dnf install php84 php84-php-fpm -y

Ставим php 8/4 и модули для него.

Стартуем обе версии и проверяем их статус

sudo systemctl start php74-php-fpm
sudo systemctl start php84-php-fpm
sudo systemctl status php84-php-fpm
sudo systemctl status php74-php-fpm

Запускаем обе версии php и проверяем их статус

Все работает. Теперь перезапустим Апач, создадим два файла php и проверим что получилось.

nano /var/www/html/7.php
<?php
        echo "7";
        phpinfo();
?>
nano /var/www/html/8.php
<?php
        echo "8";
        phpinfo();
?>

А теперь создадим файл .htaccess с таким вот содержимым:

<FilesMatch 7.php$>
        SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost"
 </FilesMatch>
<FilesMatch 8.php$>
        SetHandler "proxy:unix:/var/opt/remi/php84/run/php-fpm/www.sock|fcgi://localhost"
 </FilesMatch>

Перезапустим Apache и проверим.

Ответ сервера отображение информации о версии php

Информация о версии 7

ответ сервера, отображение информации о версии php

Информация о версии 8.

Все получилось. Реально получилось сделать все это меньше чем за час. Через виртуальные хосты тоже можно сделать, но тогда появится еще один уровень вложенности ну или обращение по разным именам хостов. А тут обращение на один и тот же айпишник (или имя сервера) и только разные файлы, которые обрабатываются разной версией обработчика php

Мне решение понравилось. Но я больше люблю Nginx и следом напишу как это сделать в нем, просто через location.

Всем добра.

Тестовое задание. lamp + php 7 + php 8: 1 комментарий

  1. Владимир

    Интересное задание. По сути простое, если работаешь с apache. Я бы тоже не догадался, как быстро выдать разные версии php на нём. Просто нет практики. В Nginx бы через location без проблем настроил.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*