Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.

Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.

Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.

Image Image Image Image Image Image Image
Спонсор
Создание статических бинарных файлов

Создание статических бинарных файлов

Вместо использования локальной установки библиотеки PHP, можно создать статическую сборку FrankenPHP благодаря проекту static-php-cli (несмотря на название, проект поддерживает все SAPI, а не только CLI).

С помощью этого метода создаётся единый переносимый бинарник, который включает PHP-интерпретатор, веб-сервер Caddy и FrankenPHP!

FrankenPHP также поддерживает встраивание PHP-приложений в статический бинарный файл.

# Linux

Мы предоставляем Docker-образ для сборки статического бинарника для Linux:

docker buildx bake --load static-builder
docker cp $(docker create --name static-builder-musl dunglas/frankenphp:static-builder-musl):/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

Чтобы добавить дополнительные модули 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, добавьте их явно, если хотите включить их в сборку.

См. также, как настроить сборку.

# Токен GitHub

Если вы достигли лимита запросов к API GitHub, задайте личный токен доступа GitHub в переменной окружения GITHUB_TOKEN:

GITHUB_TOKEN="xxx" docker --load buildx bake static-builder
# ...

# macOS

Запустите следующий скрипт, чтобы создать статический бинарный файл для macOS (должен быть установлен Homebrew):

git clone https://github.com/php/frankenphp
cd frankenphp
./build-static.sh

Примечание: этот скрипт также работает на Linux (и, вероятно, на других Unix-системах) и используется внутри предоставленного Docker-образа для статической сборки.

# Настройка сборки

Следующие переменные окружения можно передать в docker build и скрипт build-static.sh, чтобы настроить статическую сборку:

  • FRANKENPHP_VERSION: версия FrankenPHP
  • PHP_VERSION: версия PHP
  • PHP_EXTENSIONS: PHP-расширения для сборки (список поддерживаемых расширений)
  • PHP_EXTENSION_LIBS: дополнительные библиотеки, добавляющие функциональность расширениям
  • XCADDY_ARGS: аргументы для xcaddy, например, для добавления модулей Caddy
  • EMBED: путь к PHP-приложению для встраивания в бинарник
  • CLEAN: если задано, libphp и все его зависимости будут пересобраны с нуля (без кэша)
  • NO_COMPRESS: отключает сжатие результирующего бинарника с помощью UPX
  • DEBUG_SYMBOLS: если задано, отладочные символы не будут удалены и будут добавлены в бинарник
  • MIMALLOC: (экспериментально, только для Linux) заменяет musl’s mallocng на mimalloc для повышения производительности
  • RELEASE: (только для мейнтейнеров) если задано, бинарник будет загружен на GitHub
Редактировать эту страницу