Files
archived-frankenphp/docs/es/compile.md
2026-03-03 11:41:21 +01:00

5.3 KiB

Compilar desde fuentes

Este documento explica cómo crear un binario de FrankenPHP que cargará PHP como una biblioteca dinámica. Esta es la forma recomendada.

Alternativamente, también se pueden crear compilaciones estáticas y mayormente estáticas.

Instalar PHP

FrankenPHP es compatible con PHP 8.2 y versiones superiores.

Con Homebrew (Linux y Mac)

La forma más sencilla de instalar una versión de libphp compatible con FrankenPHP es usar los paquetes ZTS proporcionados por Homebrew PHP.

Primero, si no lo ha hecho ya, instale Homebrew.

Luego, instale la variante ZTS de PHP, Brotli (opcional, para soporte de compresión) y watcher (opcional, para detección de cambios en archivos):

brew install shivammathur/php/php-zts brotli watcher
brew link --overwrite --force shivammathur/php/php-zts

Compilando PHP

Alternativamente, puede compilar PHP desde las fuentes con las opciones necesarias para FrankenPHP siguiendo estos pasos.

Primero, obtenga las fuentes de PHP y extráigalas:

tar xf php-*
cd php-*/

Luego, ejecute el script configure con las opciones necesarias para su plataforma. Las siguientes banderas de ./configure son obligatorias, pero puede agregar otras, por ejemplo, para compilar extensiones o características adicionales.

Linux

./configure \
    --enable-embed \
    --enable-zts \
    --disable-zend-signals \
    --enable-zend-max-execution-timers

Mac

Use el gestor de paquetes Homebrew para instalar las dependencias requeridas y opcionales:

brew install libiconv bison brotli re2c pkg-config watcher
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc

Luego ejecute el script de configuración:

./configure \
    --enable-embed \
    --enable-zts \
    --disable-zend-signals \
    --with-iconv=/opt/homebrew/opt/libiconv/

Compilar PHP

Finalmente, compile e instale PHP:

make -j"$(getconf _NPROCESSORS_ONLN)"
sudo make install

Instalar dependencias opcionales

Algunas características de FrankenPHP dependen de dependencias opcionales del sistema que deben instalarse. Alternativamente, estas características pueden deshabilitarse pasando etiquetas de compilación al compilador Go.

Característica Dependencia Etiqueta de compilación para deshabilitarla
Compresión Brotli Brotli nobrotli
Reiniciar workers al cambiar archivos Watcher C nowatcher
Mercure Biblioteca Mercure Go (instalada automáticamente, licencia AGPL) nomercure

Compilar la aplicación Go

Ahora puede construir el binario final.

Usando xcaddy

La forma recomendada es usar xcaddy para compilar FrankenPHP. xcaddy también permite agregar fácilmente módulos personalizados de Caddy y extensiones de FrankenPHP:

CGO_ENABLED=1 \
XCADDY_GO_BUILD_FLAGS="-ldflags='-w -s' -tags=nobadger,nomysql,nopgx" \
CGO_CFLAGS=$(php-config --includes) \
CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
xcaddy build \
    --output frankenphp \
    --with github.com/dunglas/frankenphp/caddy \
    --with github.com/dunglas/mercure/caddy \
    --with github.com/dunglas/vulcain/caddy \
    --with github.com/dunglas/caddy-cbrotli
    # Agregue módulos adicionales de Caddy y extensiones de FrankenPHP aquí
    # opcionalmente, si desea compilar desde sus fuentes de frankenphp:
    # --with github.com/dunglas/frankenphp=$(pwd) \
    # --with github.com/dunglas/frankenphp/caddy=$(pwd)/caddy

Tip

Si está usando musl libc (predeterminado en Alpine Linux) y Symfony, es posible que deba aumentar el tamaño de pila predeterminado. De lo contrario, podría obtener errores como PHP Fatal error: Maximum call stack size of 83360 bytes reached during compilation. Try splitting expression

Para hacerlo, cambie la variable de entorno XCADDY_GO_BUILD_FLAGS a algo como: XCADDY_GO_BUILD_FLAGS=$'-ldflags "-w -s -extldflags \'-Wl,-z,stack-size=0x80000\'"' (cambie el valor del tamaño de pila según las necesidades de su aplicación).

Sin xcaddy

Alternativamente, es posible compilar FrankenPHP sin xcaddy usando directamente el comando go:

curl -L https://github.com/php/frankenphp/archive/refs/heads/main.tar.gz | tar xz
cd frankenphp-main/caddy/frankenphp
CGO_CFLAGS=$(php-config --includes) CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" go build -tags=nobadger,nomysql,nopgx