mirror of
https://github.com/php/frankenphp.git
synced 2026-04-26 10:18:13 +02:00
134 lines
5.3 KiB
Markdown
134 lines
5.3 KiB
Markdown
# 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](static.md).
|
|
|
|
## 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](https://github.com/shivammathur/homebrew-php).
|
|
|
|
Primero, si no lo ha hecho ya, instale [Homebrew](https://brew.sh).
|
|
|
|
Luego, instale la variante ZTS de PHP, Brotli (opcional, para soporte de compresión) y watcher (opcional, para detección de cambios en archivos):
|
|
|
|
```console
|
|
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](https://www.php.net/downloads.php) y extráigalas:
|
|
|
|
```console
|
|
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
|
|
|
|
```console
|
|
./configure \
|
|
--enable-embed \
|
|
--enable-zts \
|
|
--disable-zend-signals \
|
|
--enable-zend-max-execution-timers
|
|
```
|
|
|
|
#### Mac
|
|
|
|
Use el gestor de paquetes [Homebrew](https://brew.sh/) para instalar las dependencias requeridas y opcionales:
|
|
|
|
```console
|
|
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:
|
|
|
|
```console
|
|
./configure \
|
|
--enable-embed \
|
|
--enable-zts \
|
|
--disable-zend-signals \
|
|
--with-iconv=/opt/homebrew/opt/libiconv/
|
|
```
|
|
|
|
#### Compilar PHP
|
|
|
|
Finalmente, compile e instale PHP:
|
|
|
|
```console
|
|
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](https://github.com/google/brotli) | nobrotli |
|
|
| Reiniciar workers al cambiar archivos | [Watcher C](https://github.com/e-dant/watcher/tree/release/watcher-c) | nowatcher |
|
|
| [Mercure](mercure.md) | [Biblioteca Mercure Go](https://pkg.go.dev/github.com/dunglas/mercure) (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](https://github.com/caddyserver/xcaddy) para compilar FrankenPHP.
|
|
`xcaddy` también permite agregar fácilmente [módulos personalizados de Caddy](https://caddyserver.com/docs/modules/) y extensiones de FrankenPHP:
|
|
|
|
```console
|
|
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`:
|
|
|
|
```console
|
|
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
|
|
```
|