Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Вместо использования локальной установки библиотеки PHP, можно создать статическую сборку FrankenPHP благодаря проекту static-php-cli (несмотря на название, проект поддерживает все SAPI, а не только CLI).
С помощью этого метода создаётся единый переносимый бинарник, который включает PHP-интерпретатор, веб-сервер Caddy и FrankenPHP!
FrankenPHP также поддерживает встраивание PHP-приложений в статический бинарный файл.
Мы предоставляем Docker-образ для сборки статического бинарника для Linux:
docker buildx bake --load static-builder
docker cp $(docker create --name static-builder dunglas/frankenphp:static-builder):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp ; docker rm static-builder
Созданный статический бинарный файл называется frankenphp
и будет доступен в текущей директории.
Чтобы собрать статический бинарный файл без Docker, используйте инструкции для macOS — они подходят и для Linux.
По умолчанию компилируются самые популярные PHP-расширения.
Чтобы уменьшить размер бинарного файла и сократить возможные векторы атак, можно указать список расширений, которые следует включить в сборку, используя Docker-аргумент PHP_EXTENSIONS
.
Например, выполните следующую команду, чтобы собрать только расширение opcache
:
docker buildx bake --load --set static-builder.args.PHP_EXTENSIONS=opcache,pdo_sqlite static-builder
# ...
Чтобы добавить библиотеки, расширяющие функциональность включённых расширений, используйте Docker-аргумент PHP_EXTENSION_LIBS
:
docker buildx bake \
--load \
--set static-builder.args.PHP_EXTENSIONS=gd \
--set static-builder.args.PHP_EXTENSION_LIBS=libjpeg,libwebp \
static-builder
Чтобы добавить дополнительные модули Caddy или передать аргументы в xcaddy, используйте Docker-аргумент XCADDY_ARGS
:
docker buildx bake \
--load \
--set static-builder.args.XCADDY_ARGS="--with github.com/darkweak/souin/plugins/caddy --with github.com/dunglas/caddy-cbrotli --with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy" \
static-builder
В этом примере добавляются модуль HTTP-кэширования Souin для Caddy, а также модули cbrotli, Mercure и Vulcain.
Tip
Модули cbrotli, Mercure и Vulcain включены по умолчанию, если
XCADDY_ARGS
пуст или не установлен.
Если вы изменяете значениеXCADDY_ARGS
, добавьте их явно, если хотите включить их в сборку.
См. также, как настроить сборку.
Если вы достигли лимита запросов к API GitHub, задайте личный токен доступа GitHub в переменной окружения GITHUB_TOKEN
:
GITHUB_TOKEN="xxx" docker --load buildx bake static-builder
# ...
Запустите следующий скрипт, чтобы создать статический бинарный файл для macOS (должен быть установлен Homebrew):
git clone https://github.com/dunglas/frankenphp
cd frankenphp
./build-static.sh
Примечание: этот скрипт также работает на Linux (и, вероятно, на других Unix-системах) и используется внутри предоставленного Docker-образа для статической сборки.
Следующие переменные окружения можно передать в docker build
и скрипт build-static.sh
, чтобы настроить статическую сборку:
FRANKENPHP_VERSION
: версия FrankenPHPPHP_VERSION
: версия PHPPHP_EXTENSIONS
: PHP-расширения для сборки (список поддерживаемых расширений)PHP_EXTENSION_LIBS
: дополнительные библиотеки, добавляющие функциональность расширениямXCADDY_ARGS
: аргументы для xcaddy, например, для добавления модулей CaddyEMBED
: путь к PHP-приложению для встраивания в бинарникCLEAN
: если задано, libphp и все его зависимости будут пересобраны с нуля (без кэша)NO_COMPRESS
: отключает сжатие результирующего бинарника с помощью UPXDEBUG_SYMBOLS
: если задано, отладочные символы не будут удалены и будут добавлены в бинарникMIMALLOC
: (экспериментально, только для Linux) заменяет musl’s mallocng на mimalloc для повышения производительностиRELEASE
: (только для мейнтейнеров) если задано, бинарник будет загружен на GitHub