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

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

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

Спонсор
PHP-приложения как автономные бинарные файлы

PHP-приложения как автономные бинарные файлы

FrankenPHP позволяет встраивать исходный код и ресурсы PHP-приложений в статический автономный бинарный файл.

Благодаря этой функции PHP-приложения могут распространяться как автономные бинарные файлы, которые содержат само приложение, интерпретатор PHP и Caddy — веб-сервер уровня продакшн.

Подробнее об этой функции в презентации Кевина на SymfonyCon 2023.

Для встраивания Laravel-приложений ознакомьтесь с документацией.

# Подготовка приложения

Перед созданием автономного бинарного файла убедитесь, что ваше приложение готово для встраивания.

Например, вам может понадобиться:

  • Установить продакшн-зависимости приложения.
  • Сгенерировать автозагрузчик.
  • Включить продакшн-режим приложения (если он есть).
  • Удалить ненужные файлы, такие как .git или тесты, чтобы уменьшить размер итогового бинарного файла.

Для приложения на Symfony это может выглядеть так:

# Экспорт проекта, чтобы избавиться от .git/ и других ненужных файлов
mkdir $TMPDIR/my-prepared-app
git archive HEAD | tar -x -C $TMPDIR/my-prepared-app
cd $TMPDIR/my-prepared-app

# Установить соответствующие переменные окружения
echo APP_ENV=prod > .env.local
echo APP_DEBUG=0 >> .env.local

# Удалить тесты и другие ненужные файлы
rm -Rf tests/

# Установить зависимости
composer install --ignore-platform-reqs --no-dev -a

# Оптимизировать .env
composer dump-env prod

# Настройка конфигурации

Чтобы настроить конфигурацию, вы можете разместить файлы Caddyfile и php.ini в основной директории приложения ($TMPDIR/my-prepared-app в примере выше).

# Создание бинарного файла для Linux

Самый простой способ создать бинарный файл для Linux — использовать предоставленный Docker-билдер.

  1. Создайте файл static-build.Dockerfile в репозитории вашего приложения:

    FROM --platform=linux/amd64 dunglas/frankenphp:static-builder
    
    # Скопировать приложение
    WORKDIR /go/src/app/dist/app
    COPY . .
    
    # Сборка статического бинарного файла
    WORKDIR /go/src/app/
    RUN EMBED=dist/app/ ./build-static.sh
    

    Caution

    Некоторые .dockerignore файлы (например, Symfony Docker .dockerignore)
    игнорируют директорию vendor/ и файлы .env. Перед сборкой убедитесь, что .dockerignore файл настроен корректно или удалён.

  2. Соберите образ:

    docker build -t static-app -f static-build.Dockerfile .
    
  3. Извлеките бинарный файл:

    docker cp $(docker create --name static-app-tmp static-app):/go/src/app/dist/frankenphp-linux-x86_64 my-app ; docker rm static-app-tmp
    

Созданный бинарный файл сохранится в текущей директории под именем my-app.

# Создание бинарного файла для других ОС

Если вы не хотите использовать Docker или хотите собрать бинарный файл для macOS, используйте предоставленный скрипт:

git clone https://github.com/dunglas/frankenphp
cd frankenphp
EMBED=/path/to/your/app ./build-static.sh

Итоговый бинарный файл будет находиться в директории dist/ под именем frankenphp-<os>-<arch>.

# Использование бинарного файла

Готово! Файл my-app (или dist/frankenphp-<os>-<arch> для других ОС) содержит ваше автономное приложение.

Для запуска веб-приложения выполните:

./my-app php-server

Если ваше приложение содержит worker-скрипт, запустите его следующим образом:

./my-app php-server --worker public/index.php

Чтобы включить HTTPS (Let’s Encrypt автоматически создаст сертификат), HTTP/2 и HTTP/3, укажите доменное имя:

./my-app php-server --domain localhost

Вы также можете запускать PHP-скрипты CLI, встроенные в бинарный файл:

./my-app php-cli bin/console

# PHP-расширения

По умолчанию скрипт собирает расширения, указанные в composer.json вашего проекта.
Если файла composer.json нет, собираются стандартные расширения, как указано в документации по статической сборке.

Чтобы настроить список расширений, используйте переменную окружения PHP_EXTENSIONS.

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

Ознакомьтесь с документацией по статической сборке, чтобы узнать, как настроить бинарный файл (расширения, версию PHP и т.д.).

# Распространение бинарного файла

На Linux созданный бинарный файл сжимается с помощью UPX.

На Mac для уменьшения размера файла перед отправкой его можно сжать. Рекомендуется использовать xz.

Редактировать эту страницу