Современный сервер приложений PHP, написанный на языке Go
FrankenPHP - это новый сервер приложений для PHP-приложений (основанный на Caddy) и библиотека для встраивания интерпретатора PHP в веб-серверы Go.
curl https://frankenphp.dev/install.sh | shНачните прямо сейчас!
Запустите высококачественный PHP-сервер в производство с помощью одной команды!
# Установите FrankenPHP на Linux или macOS
curl https://frankenphp.dev/install.sh | sh
# Или на Windows, с PowerShell
irm https://frankenphp.dev/install.ps1 | iex
# Обслуживание каталога public/
frankenphp php-server -r public/
# Запуск сценария командной строки
frankenphp php-cli script.php# Обслуживание каталога public/
docker run -v $PWD:/app/public \
-p 443:443/tcp -p 443:443/udp \
dunglas/frankenphp
# Запуск сценария командной строки
docker run -v $PWD:/app \
dunglas/frankenphp php script.phpAnatomy of a modern PHP server.
Every part was stitched on for a reason. Here's what keeps the creature alive.
The bolts
Automatic HTTPS
Certificates issued, renewed and revoked for you, with Let's Encrypt or ZeroSSL.
The brain
Worker mode
Boots your app once and keeps it in memory, ready in milliseconds.
The stitches
Caddy inside
The official PHP executor sewn into Caddy, with every Caddy module at hand.
One binary. No PHP-FPM.
Режим Worker
public/index.php
<?php
// Boot your app once
require __DIR__.'/vendor/autoload.php';
$app = new \App\Kernel();
$app->boot();
$handler = static function () use ($app) {
echo $app->handle($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER);
};
// …then serve request after request
while (\frankenphp_handle_request($handler)) {
gc_collect_cycles();
}Скрипт Worker
Запустите ваше приложение один раз, оно остается в памяти!
Прямой доступ
Поддерживается нативно в Symfony, API Platform, Laravel...
Простой
Использует стандартные суперглобальные переменные: не нужен PSR-7.
Быстрый
В 3,5 раза быстрее, чем FPM на приложениях API Platform, согласно нашим бенчмаркам.
Эффективный
FrankenPHP написан на Go и C. Он использует ключевую особенность Go — горутины!
Опциональный
Ваше приложение может работать как есть, даже если оно не поддерживает режим worker.
Легкое развертывание
Работает как отдельный процесс: один бинарный файл, никаких внешних сервисов не требуется.
Watcher
Worker перезапускается при каждом изменении кода.
Caddyfile
localhost {
# Активируйте сжатие (необязательно)
encode zstd br gzip
# Запуск файлов PHP в текущем каталоге и обслуживание ресурсов
php_server
}Простая настройка
Три строки конфигурации: это все, что вам нужно для запуска PHP-сервера производственного уровня (автоматический HTTPS, HTTP/3, сжатие Brotli...), работающего на базе Caddy.
- HTTPS ✓
- HTTP/3 ✓
- zstd · br · gzip ✓
- Early Hints ✓
FrankenPHP вкратце
Расширяемость
Поддерживает PHP 8.2+, большинство PHP-расширений и все модули Caddy.
Единый сервис
Разработан с упором на простоту: один сервис, один бинарный файл! FrankenPHP не требует PHP-FPM, так как использует собственный SAPI, специально созданный для веб-серверов на Go.
Легкое развертывание
Облачное приложение, доступное как Docker-образ. Совместимо с Kubernetes и всеми современными облачными платформами. Также возможно упаковать ваше PHP-приложение как самостоятельный исполняемый бинарный файл.
Режим worker
Запустите ваше приложение один раз и держите его в памяти! Оно будет готово обрабатывать входящие запросы за считанные миллисекунды.
103 Early Hints
Early Hints ускоряют загрузку веб-сайтов на 30%. FrankenPHP — единственный SAPI PHP с поддержкой Early Hints!
Работа в реальном времени
Встроенный Mercure Hub. Отправляйте события из ваших PHP-приложений во все подключенные браузеры — они мгновенно получат данные в виде JavaScript-событий!
Сжатие Brotli, Zstandard и Gzip
Современные алгоритмы сжатия поддерживаются нативно.
Структурированные логи
Логирование с четким форматом и детализированной информацией.
Метрики Prometheus и трассировка
Встроенная поддержка Prometheus !
HTTP/2 & HTTP/3
Нативная поддержка HTTPS, HTTP/2 и HTTP/3.
Автоматизация HTTPS
Автоматическая генерация, продление и отзыв HTTPS-сертификатов.
Плавная перезагрузка
Развёртывайте ваши приложения без простоев благодаря мягким перезапускам.
Born in a lab. Written in Go.
FrankenPHP is a Caddy module and a library: embed the PHP interpreter in any Go program and serve PHP scripts through net/http.
server, _ := frankenphp.NewServer("public/")
frankenphp.Init(frankenphp.WithServer(server))
defer frankenphp.Shutdown()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
server.ServeHTTP(w, r)
})Современнее, чем когда-либо!
- Использует официальный PHP-исполнитель, встроенный в передовой веб-сервер: Caddy
- Нативная поддержка HTTP/1.1, HTTP/2 и HTTP/3
- Автоматическая генерация и продление сертификатов HTTPS (Let's Encrypt или ZeroSSL)
- Просто скопируйте файлы PHP в корневой каталог — и все готово!
- Создает автономные бинарные файлы, самозапускаемые и без зависимостей, для ваших веб-приложений на PHP и инструментов командной строки.
- Самые популярные PHP-расширения, включая OPcache и XDebug, поддерживаются нативно.
Need a hand? We've got heart.
Les-Tilleuls.coop, the cooperative behind FrankenPHP, helps teams migrate, host and speed up their PHP apps.