|
|
# Aplicaciones PHP como Binarios Aut贸nomos
|
||
|
|
|
||
|
|
FrankenPHP tiene la capacidad de incrustar el c贸digo fuente y los activos de aplicaciones PHP en un binario est谩tico y aut贸nomo.
|
||
|
|
|
||
|
|
Gracias a esta caracter铆stica, las aplicaciones PHP pueden distribuirse como binarios aut贸nomos que incluyen la aplicaci贸n en s铆, el int茅rprete de PHP y Caddy, un servidor web de nivel de producci贸n.
|
||
|
|
|
||
|
|
Obtenga m谩s informaci贸n sobre esta caracter铆stica [en la presentaci贸n realizada por K茅vin en SymfonyCon 2023](https://dunglas.dev/2023/12/php-and-symfony-apps-as-standalone-binaries/).
|
||
|
|
|
||
|
|
Para incrustar aplicaciones Laravel, [lea esta entrada espec铆fica de documentaci贸n](laravel.md#laravel-apps-as-standalone-binaries).
|
||
|
|
|
||
|
|
## Preparando su Aplicaci贸n
|
||
|
|
|
||
|
|
Antes de crear el binario aut贸nomo, aseg煤rese de que su aplicaci贸n est茅 lista para ser incrustada.
|
||
|
|
|
||
|
|
Por ejemplo, probablemente querr谩:
|
||
|
|
|
||
|
|
- Instalar las dependencias de producci贸n de la aplicaci贸n
|
||
|
|
- Volcar el autoload
|
||
|
|
- Activar el modo de producci贸n de su aplicaci贸n (si lo hay)
|
||
|
|
- Eliminar archivos innecesarios como `.git` o pruebas para reducir el tama帽o de su binario final
|
||
|
|
|
||
|
|
Por ejemplo, para una aplicaci贸n Symfony, puede usar los siguientes comandos:
|
||
|
|
|
||
|
|
```console
|
||
|
|
# Exportar el proyecto para deshacerse de .git/, etc.
|
||
|
|
mkdir $TMPDIR/my-prepared-app
|
||
|
|
git archive HEAD | tar -x -C $TMPDIR/my-prepared-app
|
||
|
|
cd $TMPDIR/my-prepared-app
|
||
|
|
|
||
|
|
# Establecer las variables de entorno adecuadas
|
||
|
|
echo APP_ENV=prod > .env.local
|
||
|
|
echo APP_DEBUG=0 >> .env.local
|
||
|
|
|
||
|
|
# Eliminar las pruebas y otros archivos innecesarios para ahorrar espacio
|
||
|
|
# Alternativamente, agregue estos archivos con el atributo export-ignore en su archivo .gitattributes
|
||
|
|
rm -Rf tests/
|
||
|
|
|
||
|
|
# Instalar las dependencias
|
||
|
|
composer install --ignore-platform-reqs --no-dev -a
|
||
|
|
|
||
|
|
# Optimizar .env
|
||
|
|
composer dump-env prod
|
||
|
|
```
|
||
|
|
|
||
|
|
### Personalizar la Configuraci贸n
|
||
|
|
|
||
|
|
Para personalizar [la configuraci贸n](config.md), puede colocar un archivo `Caddyfile` as铆 como un archivo `php.ini`
|
||
|
|
en el directorio principal de la aplicaci贸n a incrustar (`$TMPDIR/my-prepared-app` en el ejemplo anterior).
|
||
|
|
|
||
|
|
## Crear un Binario para Linux
|
||
|
|
|
||
|
|
La forma m谩s f谩cil de crear un binario para Linux es usar el constructor basado en Docker que proporcionamos.
|
||
|
|
|
||
|
|
1. Cree un archivo llamado `static-build.Dockerfile` en el repositorio de su aplicaci贸n:
|
||
|
|
|
||
|
|
```dockerfile
|
||
|
|
FROM --platform=linux/amd64 dunglas/frankenphp:static-builder-gnu
|
||
|
|
# Si tiene la intenci贸n de ejecutar el binario en sistemas musl-libc, use static-builder-musl en su lugar
|
||
|
|
|
||
|
|
# Copie su aplicaci贸n
|
||
|
|
WORKDIR /go/src/app/dist/app
|
||
|
|
COPY . .
|
||
|
|
|
||
|
|
# Construya el binario est谩tico
|
||
|
|
WORKDIR /go/src/app/
|
||
|
|
RUN EMBED=dist/app/ ./build-static.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
> [!CAUTION]
|
||
|
|
>
|
||
|
|
> Algunos archivos `.dockerignore` (por ejemplo, el [`.dockerignore` predeterminado de Symfony Docker](https://github.com/dunglas/symfony-docker/blob/main/.dockerignore))
|
||
|
|
> ignorar谩n el directorio `vendor/` y los archivos `.env`. Aseg煤rese de ajustar o eliminar el archivo `.dockerignore` antes de la construcci贸n.
|
||
|
|
|
||
|
|
2. Construya:
|
||
|
|
|
||
|
|
```console
|
||
|
|
docker build -t static-app -f static-build.Dockerfile .
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Extraiga el binario:
|
||
|
|
|
||
|
|
```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
|
||
|
|
```
|
||
|
|
|
||
|
|
El binario resultante es el archivo llamado `my-app` en el directorio actual.
|
||
|
|
|
||
|
|
## Crear un Binario para Otros Sistemas Operativos
|
||
|
|
|
||
|
|
Si no desea usar Docker o desea construir un binario para macOS, use el script de shell que proporcionamos:
|
||
|
|
|
||
|
|
```console
|
||
|
|
git clone https://github.com/php/frankenphp
|
||
|
|
cd frankenphp
|
||
|
|
EMBED=/path/to/your/app ./build-static.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
El binario resultante es el archivo llamado `frankenphp-<os>-<arch>` en el directorio `dist/`.
|
||
|
|
|
||
|
|
## Usar el Binario
|
||
|
|
|
||
|
|
隆Listo! El archivo `my-app` (o `dist/frankenphp-<os>-<arch>` en otros sistemas operativos) contiene su aplicaci贸n aut贸noma.
|
||
|
|
|
||
|
|
Para iniciar la aplicaci贸n web, ejecute:
|
||
|
|
|
||
|
|
```console
|
||
|
|
./my-app php-server
|
||
|
|
```
|
||
|
|
|
||
|
|
Si su aplicaci贸n contiene un [script worker](worker.md), inicie el worker con algo como:
|
||
|
|
|
||
|
|
```console
|
||
|
|
./my-app php-server --worker public/index.php
|
||
|
|
```
|
||
|
|
|
||
|
|
Para habilitar HTTPS (se crea autom谩ticamente un certificado de Let's Encrypt), HTTP/2 y HTTP/3, especifique el nombre de dominio a usar:
|
||
|
|
|
||
|
|
```console
|
||
|
|
./my-app php-server --domain localhost
|
||
|
|
```
|
||
|
|
|
||
|
|
Tambi茅n puede ejecutar los scripts CLI de PHP incrustados en su binario:
|
||
|
|
|
||
|
|
```console
|
||
|
|
./my-app php-cli bin/console
|
||
|
|
```
|
||
|
|
|
||
|
|
## Extensiones de PHP
|
||
|
|
|
||
|
|
Por defecto, el script construir谩 las extensiones requeridas por el archivo `composer.json` de su proyecto, si existe.
|
||
|
|
Si el archivo `composer.json` no existe, se construir谩n las extensiones predeterminadas, como se documenta en [la entrada de compilaciones est谩ticas](static.md).
|
||
|
|
|
||
|
|
Para personalizar las extensiones, use la variable de entorno `PHP_EXTENSIONS`.
|
||
|
|
|
||
|
|
## Personalizar la Compilaci贸n
|
||
|
|
|
||
|
|
[Lea la documentaci贸n de compilaci贸n est谩tica](static.md) para ver c贸mo personalizar el binario (extensiones, versi贸n de PHP, etc.).
|
||
|
|
|
||
|
|
## Distribuir el Binario
|
||
|
|
|
||
|
|
En Linux, el binario creado se comprime usando [UPX](https://upx.github.io).
|
||
|
|
|
||
|
|
En Mac, para reducir el tama帽o del archivo antes de enviarlo, puede comprimirlo.
|
||
|
|
Recomendamos `xz`.
|