Узнал совсем недавно про очень любопытный проект для запуска PHP приложений. Я краем гл... — 28 сентября 2026 г. в 06:11:02.022
Узнал совсем недавно про очень любопытный проект для запуска PHP приложений. Я краем глаза про него слышал, но всё никак не доходили руки разобраться и попробовать. И вот теперь дошли. Речь пойдёт про FrankenPHP. Это одиночный бинарник, собранный на Go на базе веб сервера Caddy. С его помощью можно быстро запускать PHP проекты. Сразу покажу, как это может работать на практике, а потом уже разберём особенности. Для примера запущу сайт на 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-server Cкачали бинарник 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 на нём запускал. #php #webserver