Files
archived-frankenphp/docs/ru/embed.md
Marc b22bdd987b update docs to remove old references to frankenphp:static-builder (#1950)
* update docs to remove old references to frankenphp:static-builder (we have -musl and -gnu)

* remove --platform and make gnu default

* add --platform back in (let dunglas decide)

* fix missed translations
2025-11-07 10:27:37 +01:00

142 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PHP-приложения как автономные бинарные файлы
FrankenPHP позволяет встраивать исходный код и ресурсы PHP-приложений в статический автономный бинарный файл.
Благодаря этой функции PHP-приложения могут распространяться как автономные бинарные файлы, которые содержат само приложение, интерпретатор PHP и Caddy — веб-сервер уровня продакшн.
Подробнее об этой функции [в презентации Кевина на SymfonyCon 2023](https://dunglas.dev/2023/12/php-and-symfony-apps-as-standalone-binaries/).
Для встраивания Laravel-приложений ознакомьтесь с [документацией](laravel.md#laravel-приложения-как-автономные-бинарные-файлы).
## Подготовка приложения
Перед созданием автономного бинарного файла убедитесь, что ваше приложение готово для встраивания.
Например, вам может понадобиться:
- Установить продакшн-зависимости приложения.
- Сгенерировать автозагрузчик.
- Включить продакшн-режим приложения (если он есть).
- Удалить ненужные файлы, такие как `.git` или тесты, чтобы уменьшить размер итогового бинарного файла.
Для приложения на Symfony это может выглядеть так:
```console
# Экспорт проекта, чтобы избавиться от .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
```
### Настройка конфигурации
Чтобы настроить [конфигурацию](config.md), вы можете разместить файлы `Caddyfile` и `php.ini` в основной директории приложения (`$TMPDIR/my-prepared-app` в примере выше).
## Создание бинарного файла для Linux
Самый простой способ создать бинарный файл для Linux — использовать предоставленный Docker-билдер.
1. Создайте файл `static-build.Dockerfile` в репозитории вашего приложения:
```dockerfile
FROM --platform=linux/amd64 dunglas/frankenphp:static-builder-gnu
# Если вы планируете запускать бинарный файл на системах с musl-libc, используйте static-builder-musl
# Скопировать приложение
WORKDIR /go/src/app/dist/app
COPY . .
# Сборка статического бинарного файла
WORKDIR /go/src/app/
RUN EMBED=dist/app/ ./build-static.sh
```
> [!CAUTION]
>
> Некоторые `.dockerignore` файлы (например, [Symfony Docker `.dockerignore`](https://github.com/dunglas/symfony-docker/blob/main/.dockerignore))
> игнорируют директорию `vendor/` и файлы `.env`. Перед сборкой убедитесь, что `.dockerignore` файл настроен корректно или удалён.
2. Соберите образ:
```console
docker build -t static-app -f static-build.Dockerfile .
```
3. Извлеките бинарный файл:
```console
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, используйте предоставленный скрипт:
```console
git clone https://github.com/php/frankenphp
cd frankenphp
EMBED=/path/to/your/app ./build-static.sh
```
Итоговый бинарный файл будет находиться в директории `dist/` под именем `frankenphp-<os>-<arch>`.
## Использование бинарного файла
Готово! Файл `my-app` (или `dist/frankenphp-<os>-<arch>` для других ОС) содержит ваше автономное приложение.
Для запуска веб-приложения выполните:
```console
./my-app php-server
```
Если ваше приложение содержит [worker-скрипт](worker.md), запустите его следующим образом:
```console
./my-app php-server --worker public/index.php
```
Чтобы включить HTTPS (Let's Encrypt автоматически создаст сертификат), HTTP/2 и HTTP/3, укажите доменное имя:
```console
./my-app php-server --domain localhost
```
Вы также можете запускать PHP-скрипты CLI, встроенные в бинарный файл:
```console
./my-app php-cli bin/console
```
## PHP-расширения
По умолчанию скрипт собирает расширения, указанные в `composer.json` вашего проекта.
Если файла `composer.json` нет, собираются стандартные расширения, как указано в [документации по статической сборке](static.md).
Чтобы настроить список расширений, используйте переменную окружения `PHP_EXTENSIONS`.
## Настройка сборки
[Ознакомьтесь с документацией по статической сборке](static.md), чтобы узнать, как настроить бинарный файл (расширения, версию PHP и т.д.).
## Распространение бинарного файла
На Linux созданный бинарный файл сжимается с помощью [UPX](https://upx.github.io).
На Mac для уменьшения размера файла перед отправкой его можно сжать. Рекомендуется использовать `xz`.