Сразу покажу, как это может работать на практике, а потом уже разберём особенности. Для примера запущу сайт на Wordpress с его помощью.
# wget https://github.com/php/frankenphp/releases/download/v1.12.7/frankenphp-linux-x86_64# chmod +x frankenphp-linux-x86_64# mv frankenphp-linux-x86_64 /usr/local/bin/frankenphp# wget https://ru.wordpress.org/latest-ru_RU.zip# unzip latest-ru_RU.zip# cd wordpress# frankenphp php-serverCкачали бинарник frankenphp, скачали исходники wp, перешли в директорию с php кодом и запустили веб сервер. По умолчанию у него есть в комплекте популярные php модули, которые нужны для wp, он запускается на 80-м порту. Можно идти по IP адресу сервера и устанавливать Worpdress. Подобным образом он работает и в Windows, и в macOS.
Для запуска одиночных скриптов есть отдельный режим php-cli:
# frankenphp php-cli /path/to/your/script.phpВсё это выглядит удобно. Не нужно тянуть на сервер php со всеми его зависимостями, либо искать подходящий преднастроенный контейнер или набор контейнеров.
Как я уже сказал, frankenphp собран на базе веб сервера Caddy, соответственно, он настраивается точно так же, как он. Можно его запускать с подготовленным заранее конфигурационным файлом. Вот пример типовой конфигурации сайта с php в nginx:
server {
listen 80;
server_name example.com;
root /var/www/app/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}А вот он же в формате caddy:
example.com {
root /var/www/app/public
php_server
}В плане конфигурации и деплоя он максимально упрощён по сравнению со всеми присутствующими решениями для PHP. Плюс в комплекте все плюшки Caddy - HTTPv3 из коробки, автовыпуск сертификатов и т.д. Но вообще FrankenPHP создавался не только для упрощения настройки. У него есть принципиально другой режим обработки запросов.
FrankenPHP умеет загружать PHP приложение полностью в оперативную память и там обрабатывать. Это существенно увеличивает отклик приложения. Нет необходимости на каждый запрос читать файл. Для корректной работы в таком формате придумана функциональность hot reload, которая позволяет автоматически обновлять PHP приложение в памяти при изменении исходников, без необходимости перезапуска службы сервера или полной перезагрузки проекта. То есть всё приложение загружается в память и там автоматически обновляется по мере изменения кода. Для поддержки этого режима нужно вносить изменения в сам код. Там ничего сложного, в документации есть примеры для WP, Symfony, Laravel и других общих случаев.
Из-за особенностей своей работы продукт этот нишевый, если использовать его для нагруженного прода. Нужно хорошо разбираться в работе приложения, в обработке запросов, нужно следить за памятью, оптимизировать код под работу с FrankenPHP.
Другое дело разовая задача по запуску скриптов, простеньких проектов или каких-то панелей управления на PHP. Тут можно ничего не оптимизировать и просто запускать код, настроив веб сервер в очень простом формате конфигурации веб сервера Caddy. Он сейчас довольно популярен.
Если кто-то использовал FrankenPHP в реальной работе, дайте обратную связь по нему. Я не нашёл какой-то конкретики, реальных отзывов и сравнения производительности. В основном общие слова и описание. Вижу, что кто-то Bitrix на нём запускал.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#php #webserver