Esta página ha sido traducida por la comunidad y puede no estar actualizada. Consulta la versión de referencia.

Esta página ha sido traducida por la comunidad y puede no estar actualizada. Consulta la versión de referencia.

Esta página ha sido traducida por la comunidad y puede no estar actualizada. Consulta la versión de referencia.

Funciona con
Aplicaciones PHP como Binarios Autónomos

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.

Para incrustar aplicaciones Laravel, lea esta entrada específica de documentación.

# 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:

# 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, 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:

    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) 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:

    docker build -t static-app -f static-build.Dockerfile .
    
  3. Extraiga el binario:

    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:

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:

./my-app php-server

Si su aplicación contiene un script worker, inicie el worker con algo como:

./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:

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

También puede ejecutar los scripts CLI de PHP incrustados en su binario:

./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.

Para personalizar las extensiones, use la variable de entorno PHP_EXTENSIONS.

# Personalizar la Compilación

Lea la documentación de compilación estática 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.

En Mac, para reducir el tamaño del archivo antes de enviarlo, puede comprimirlo. Recomendamos xz.

Editar esta página