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.
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.
Antes de crear el binario autónomo, asegúrese de que su aplicación esté lista para ser incrustada.
Por ejemplo, probablemente querrá:
.git o pruebas para reducir el tamaño de su binario finalPor 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
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).
La forma más fácil de crear un binario para Linux es usar el constructor basado en Docker que proporcionamos.
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.dockerignorepredeterminado de Symfony Docker) ignorarán el directoriovendor/y los archivos.env. Asegúrese de ajustar o eliminar el archivo.dockerignoreantes de la construcción.
Construya:
docker build -t static-app -f static-build.Dockerfile .
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.
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/.
¡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
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.
Lea la documentación de compilación estática para ver cómo personalizar el binario (extensiones, versión de PHP, etc.).
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.