Казалось бы, какой сейчас смысл в веб сервере Apache, когда есть полно более современных аналогов?
В недавнем вебинаре услышал от автора полезную идею по поводу Apache. Он может быть удобен, если надо быстро запустить что-то на php. В то время как для Nginx надо подниматься в отдельном контейнере php-fpm, Apache сразу имеет на борту mod_php, поэтому достаточно одного контейнера только с Apache, где будет сразу и php, и веб сервер. Для этой задачи есть официальный базовый образ.
Покажу сразу на конкретном примере. Я иногда использую скрипт adminer. Это небольшой php файл, который позволяет через браузер подключиться к MySQL / MariaDB / PostgreSQL и быстро посмотреть или сделать что-то простое, не вспоминая консольные команды. На удивление живучий проект. Сколько лет ему, а он продолжает поддерживаться и регулярно получать обновления.
Запускаем adminer в docker:
# mkdir ~/adminer && cd ~/adminer
# curl -sLo adminer.php https://github.com/vrana/adminer/releases/download/v5.4.2/adminer-5.4.2.php
# docker run -d --rm --name adminer -p 8080:80 -v $(pwd):/var/www/html php:8.4-apache
# docker exec adminer docker-php-ext-install mysqli
# docker exec adminer apachectl restart
Идём по IP адресу и открываем adminer - http://192.168.137.37:8080/adminer.php. В данном случае понадобилось дополнительное расширение mysqli установить, необходимое для работы adminer.
Если будете постоянно что-то использовать таким образом, можно свой образ собрать. Создаём Dockerfile:
FROM php:8.4-apache
RUN docker-php-ext-install mysqli
COPY adminer.php /var/www/html/index.php
Собираем образ и запускаем:
# docker build -t adminer .
# docker run -d --rm -p 8080:80 adminer
Для простых задач с php стандартный образ с Apache реально удобнее всех остальных. Не надо ничего придумывать и настраивать. Всё сразу работает в одном минимальном контейнере.
Поясню на всякий случай для тех, кто может не понять сразу. Это решение для простых одиночных задач без нагрузки. Php-fpm появился не просто так, а как решение вопроса медленной асинхронной работы mod_php в Apache. В нагруженных проектах лучше использовать php-fpm. Хотя тот же Битрикс сколько лет успешно работает по умолчанию на Apache с некоторыми настройками. Например, в модуле mpm_prefork можно заранее настроить запуск необходимого количества процессов веб сервера, на которое хватает ресурсов, а так же их параметры перезапуска и обработки запросов. Я настраивал Битрикс как на Apache, так и на php-fpm. Если ресурсов в целом хватает на сервере, то разница не особо незаметна.
p.s. Уже после написания заметки увидел, что у Adminer есть свой готовый образ. Не знаю, когда он появился, я всегда обычный php файл использовал, скачивая его на настроенный хостинг. Сути заметки про использование Apache это не меняет.
#apache #php